Saturday, December 31, 2016

Chinese Locale in Android

When we talk about Chinese language globally, there are three major categories:
  • Simplified Chinese
  • Traditional Chinese
  • Chinese
Where Android is using Locale.SIMPLIFIED_CHINESE (Before Android 7.0: zh-rCN; After Android 7.0: zh-rCN_#Hans), Locale.TRADITIONAL_CHINESE (Before Android 7.0: zh-rTW; After Android 7.0: zh-rTW_#Hant) & Locale.CHINESE (Before & After Android 7.0: zh) to represent them.

Here come the problem, when a Hong Kong device which prefer to view in Traditional Chinese, which strings.xml resource will the Android mobile app use?

Before Android 7.0, Android could not always successfully match app and system locales.
User SettingsApp ResourcesResource Resolution
zh-rHKdefault (en)
zh-rCN
zh-rTW
zh
Try zh-rHK => Fail
Try zh => Success
Use zh
Starting in Android 7.0, Android is changing the way the system resolves resources.
User SettingsApp ResourcesResource Resolution
zh-rHK_#Hantdefault (en)
zh-rCN_#Hans
zh-rTW_#Hant
zh
Try zh-rHK_#Hant => Fail
Try zh-r_#Hant => Fail
Try children of zh-r_#Hant => zh-rTW_#Hant
Use zh-rTW#Hant
In order to support both before & after Android 7.0 devices, I believe the minimum resources needed to maintain will be:
  • en (English)
  • zh-rCN (Simplified Chinese)
  • zh-rTW (Traditional Chinese)
  • zh (Traditional Chinese)

Tuesday, December 27, 2016

repository

My first open source Android library - repository, which uses Repository Pattern to load xml or image contents from remote server, local file cache or memory cache.

It took me almost one year (commit history: Nov 22, 2015 - Dec 27, 2016) to:
1) develop it as an Android library
2) prepare a sample app to showcase how to use it
3) publish it to JCenter
4) ready to use for now.

It is quite challenging to develop a library when I compare it with mobile app development. I need to think from a developer point of view, how to code in a way that make them easy to understand.

Thanks to the open source community, I get to study a lot of source code from Square Picasso & Otto, learn from them on how to make a good Android library.
- use Singleton instance
- use Immutable object
- use Builder pattern

I wish one day in the future, someone else will be able to benefit from my contribution on this open source community as well.