[ 
https://issues.apache.org/jira/browse/CB-4602?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13979803#comment-13979803
 ] 

Mike Billau commented on CB-4602:
---------------------------------

According to http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html, 
the Locale object "implements identifiers interchangeable with BCP 47." This 
means that for Android, we can simply return `Locale.getDefault()` and it 
should be BCP47 compliant.  I tried this:

locale = "SIMPLIFIED_CHINESE", getDefault = zh_CN
locale = "CHINESE", getDefault = zh
locale = "TAIWAN", getDefault = zh_TW
locale= "English", getDefault = en_US

These results match up with what [~pdardailler] mentioned above, execpt for the 
underscore instead of the dash. I'm not sure why "CHINESE" locale only returned 
"zh." There also might be issues since according to 
http://developer.android.com/reference/java/util/Locale.html, "Java uses 
several deprecated two-letter codes. The Hebrew ("he") language code is 
rewritten as "iw", Indonesian ("id") as "in", and Yiddish ("yi") as "ji". This 
rewriting happens even if you construct your own Locale object, not just for 
instances returned by the various lookup methods. "

Finally, since this is changing the return value of an API, we should probably 
create a new method, like getPreferredLanguageCode() or something, instead of 
just changing getPreferredLanguage(). 

> getPreferredLanguage platform inconsistencies
> ---------------------------------------------
>
>                 Key: CB-4602
>                 URL: https://issues.apache.org/jira/browse/CB-4602
>             Project: Apache Cordova
>          Issue Type: Bug
>          Components: Android, Plugin Globalization
>    Affects Versions: 2.6.0, 3.0.0
>         Environment: Android
>            Reporter: Jon Whitlock
>            Assignee: Martin Gonzalez
>            Priority: Minor
>
> In;
> https://github.com/apache/cordova-docs/blob/master/docs/en/edge/cordova/globalization/globalization.getPreferredLanguage.md
> "Returns the language identifier string to the successCallback with a 
> properties object as a parameter. That object should have a value property 
> with a String value."
> navigator.globalization.getPreferredLanguage(
>    function (language) {alert('language: ' + language.value + '\n');},
>    function () {alert('Error getting language\n');}
> );
> On Android the function doesn't seem to return an identifier as such, it 
> returns *a string describing the language localised to that language*, e.g. 
> "English" for English or "中文" for Japanese. Naturally this is less than ideal 
> for subsequent string operations, furthermore on that page "Windows Phone 8 
> Quirks - Returns the ISO 639-1 two-letter code for the current language" 
> which is an identifier, and also what I would expect (or an ISO 639-2 code, 
> as per http://www.loc.gov/standards/iso639-2/php/code_list.php)
> Android seems to support 639-2 
> http://developer.android.com/reference/java/util/Locale.html#getISO3Language()
> I have no idea what it returns on other platforms, but to keep client code 
> consistent I guess it would good if this could be normalised in the API.
> Have tested this on v3.0 and 2.6, is the same.
> As an aside, the locale is not really what I want here, as the user may be in 
> the US but have Japanese as their preferred language.
> Thanks,
> jon
> (first go at using Jira, apols if I got something wrong!)



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to