Apologies for replying to myself, just wanted add to my previous message
that I checked with my Optimus One.  On that device, the L&I menu seems to
match getLocales() output (some filtering similar to what LocalePicker does
notwithstanding), however as it turns out, when I switched our app to "zh"
which is *not* on the list, it worked anyway!


On Tue, Aug 13, 2013 at 10:50 PM, Latimerius <[email protected]> wrote:

> Admittedly it took a bit ;-) but I finally got around to taking a closer
> look.
>
> My HTC Desire show the following languages in its Languages&Input menu:
>
> English (United Kingdom)
> English (Ireland)
> French
> Italian
> Spanish
>
> Not a lot.  However, when I call
>
> Resources.getSystem().getAssets().getLocales();
>
> on the device, I get the following list:
>
> da
> ja
> nb
> de
> th
> fi
> el
> nl
> pl
> ko
> fr
> tr
> cs
> es
> it
> pt
> ru
> sv
> en_CA
> uk_UA
> en_ZA
> en_GB
> id_ID
> en_IE
> bg_BG
> ar_EG
> en_SG
> th_TH
> fi_FI
> sl_SI
> zh_HK
> sk_SK
> zh_CN
> hi_IN
> en_IN
> vi_VN
> ro_RO
> hr_HR
> ca_ES
> sr_RS
> en_US
> es_US
> lt_LT
> pt_PT
> en_AU
> hu_HU
> lv_LV
> zh_TW
> en_NZ
> fr_CA
> nl_BE
> fr_BE
> de_DE
> sv_SE
> de_CH
> fr_CH
> it_CH
> tl_PH
> de_LI
> da_DK
> he_IL
> ar_IL
> nl_NL
> pl_PL
> nb_NO
> ja_JP
> pt_BR
> fr_FR
> el_GR
> ko_KR
> tr_TR
> es_ES
> de_AT
> it_IT
> ru_RU
> cs_CZ
> en
> ar
> hu
> iw
>
> (Interestingly enough, calling Activity.getAssets().getLocales() returns
> almost the same list, just with "hi" appended.)
>
> When I switch my app to some of the languages which are *not* offered by
> the L&I menu but *do* appear on the getLocales() list, it turns out that
> some work (like Portuguese, German, Japanese, Chinese) and some don't
> (Hindi, Arabic). "Works" mean that legible text is displayed, "doesn't
> work" means that all glyphs are replaced with rectangles in the rendered
> text.
>
> I believe the LocalePicker code you linked to doesn't run on that device
> (or additional, much stricter filtering is applied elsewhere), and I'm
> still not sure how to filter the getLocales() list to remove languages that
> the device is actually not able to display.
>
>
> On Thu, Jun 13, 2013 at 6:22 PM, Latimerius <[email protected]> wrote:
>
>> Thanks, that's good info.  The reason I didn't check the source in this
>> case is, first, with min sdk of 7 that's a lot of source to check ;-) , and
>> second that this whole issue is fairly peripheral to our app.
>>
>> I'm wondering if I can be reasonably sure that this code (or an
>> equivalent) runs in a majority of devices.  Off-hand, it doesn't seem to
>> explain what e.g. Optimus One shows in its L&I menu (I'll do a detailed
>> check tonight or tomorrow).
>>
>>
>> On Wed, Jun 12, 2013 at 4:39 PM, Kostya Vasilyev <[email protected]>wrote:
>>
>>> Settings app:
>>>
>>>
>>> https://android.googlesource.com/platform/packages/apps/Settings/+/refs/heads/master/src/com/android/settings/LocalePicker.java
>>>
>>> Uses this:
>>>
>>>
>>> https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/com/android/internal/app/LocalePicker.java
>>>
>>> It's basically Resources.getSystem().**getAsset**s().getLocales() which
>>> you'd already mentioned, but the code here does some filtering, to make the
>>> list look prettier -- which explains the different results.
>>>
>>> When in doubt, use the source :)
>>>
>>> -- K
>>>
>>> On Wednesday, June 12, 2013 5:55:35 PM UTC+4, Piren wrote:
>>>>
>>>> Your reasoning is sound, but you're barking at the wrong tree... What
>>>> shows in Language & Input can be summed up to "This is what the company
>>>> that made the specific ROM you're using wanted the users to see when they
>>>> use the device", which has little affect on your app. Any language that
>>>> shows there, will mean that you can support it as well, but that list is
>>>> very short, much shorter than the actual list of supported locales and
>>>> fonts. That list is usually just the default provided by google plus some
>>>> of the leading languages used in the region the device is aimed for.
>>>>
>>>> By localization i meant - Modifications to the text so that a group of
>>>> people would be able to understand it using their native language.
>>>> If a device was localized to support Germany, it would obviously
>>>> support the German language and have all of its interface display in
>>>> German. However, it does not mean it supports all the Locales available in
>>>> Germany (which might be different due to different dialects and customs).
>>>> Basically what you're are aiming to do is add multiple localizations to
>>>> your app and then intersect that list with the localizations the device can
>>>> actually display (which is defined by its available fonts).
>>>>
>>>> Basically the list of support goes like:  Font > Locale >>
>>>> Localizations   (where the Font supports more "options" than Locale and
>>>> Locale support much more "options" than Localizations).
>>>>
>>>> Regarding the limitation that RTL languages offer and limitations like
>>>> that - That is up to you to verify when you create your localization...
>>>> having a Locale to match that localization would just make it easier to
>>>> localize, but not mandatory. e.g - If you want to display a number you can
>>>> use String.format + Locale to display it according to the current locale,
>>>> or go the extra mile and offer locales that aren't supported by doing the
>>>> formatting yourself. which will be possible as long as the font to display
>>>> it, will be available.
>>>>
>>>> P.S - RTL support in android sucks balls :) (at least up to JB) If
>>>> you're not a native RTL speaker, don't dwell on it too much... just make
>>>> sure it's readable.
>>>>
>>>>
>>>>
>>>> On Wednesday, June 12, 2013 3:56:39 PM UTC+3, latimerius wrote:
>>>>>
>>>>> Thanks for the reply.  To explain a bit further: the reason I'm trying
>>>>> to get something similar to what the user sees in "Language & input" is, I
>>>>> just consider it unlikely that a device would offer a language that's it's
>>>>> not capable to handle, or that it would *not* offer a language it *can*
>>>>> handle.
>>>>>
>>>>> It's just a heuristic to decide whether what I'm getting looks
>>>>> plausible.  If, for instance, a devices offers two variants of English,
>>>>> French, Italian and Spanish (a single variant each) in its settings but
>>>>> getAvailableLocales() returns just a heap of English variants (like 15 or
>>>>> 20) and two Spanish variants, it doesn't match what I see in settings and
>>>>> thus looks suspicious.  That's it - I don't mean to insist that an API 
>>>>> must
>>>>> get me a list identical to "Language & input".
>>>>>
>>>>> I'm not sure what the difference between "locale" and "localization"
>>>>> is - I believe I'm using the word "locale" in the sense explained for
>>>>> instance here: 
>>>>> http://en.wikipedia.org/**wiki/Locale<http://en.wikipedia.org/wiki/Locale>.
>>>>>   However, you're right in that I don't actually need full support for a
>>>>> specific locale - being able to render text is good enough (I mean I don't
>>>>> care about currency formatting, collating etc.).  On the other hand, I'm
>>>>> not sure if just checking fonts is enough to ensure that.  Consider for
>>>>> instance right-to-left languages - fonts might well be available but
>>>>> without specific support in the font/text renderer the result won't be 
>>>>> good.
>>>>>
>>>>> Come to think of it, I'm probably looking for a
>>>>> TextView.getAvailableLocales()**...
>>>>>
>>>>>
>>>>> On Wed, Jun 12, 2013 at 10:20 AM, Piren <[email protected]> wrote:
>>>>>
>>>>>> I think you're confusing several different things.... the "Language
>>>>>> and Input" list that you're trying to fit isn't the same as the supported
>>>>>> locales ... This is just a list of languages the specific OS interface 
>>>>>> has
>>>>>> special versions for (i.e, the entire device UI will change). This is
>>>>>> localization, not locale support.
>>>>>>
>>>>>> The list of available locales will be more accurate to what you're
>>>>>> trying to achieve, but it is still not there - some devices can render
>>>>>> fonts that are outside of those available locales.
>>>>>> this is because what really matters in the end is if you have the
>>>>>> proper fonts to render that text.
>>>>>>
>>>>>> I actually dealt with something regarding that a few days ago and i'm
>>>>>> even more confused... the source code for TextView/Paint don't actually
>>>>>> tell us any information on how android gets the available fonts or how it
>>>>>> decides which one to use (it's all in native code apparently)
>>>>>>
>>>>>> But i did find this:
>>>>>> http://www.ulduzsoft.com/2012/**01/enumerating-the-fonts-on-**
>>>>>> android-platform/<http://www.ulduzsoft.com/2012/01/enumerating-the-fonts-on-android-platform/>
>>>>>>
>>>>>> It might give you what you're looking for if you combine the
>>>>>> available font list with the available locales.
>>>>>>
>>>>>>
>>>>>> On Tuesday, June 11, 2013 7:31:53 PM UTC+3, latimerius wrote:
>>>>>>>
>>>>>>> I understand this is a FAQ but after googling for hours and finding
>>>>>>> nothing but forum questions with no answers and a heap of bad
>>>>>>> (non-functional) advice, I figured I'd ask.
>>>>>>>
>>>>>>> I'd like to allow our users to set a locale independent of the
>>>>>>> system-wide one.  To construct the menu of available languages, I 
>>>>>>> figured
>>>>>>> I'd take a list of languages supported by the app and remove the ones 
>>>>>>> not
>>>>>>> supported by the particular device.  I wouldn't want to offer a 
>>>>>>> language to
>>>>>>> the user if the device cannot render texts in that language (say due to 
>>>>>>> a
>>>>>>> missing font or code support).
>>>>>>>
>>>>>>> Getting a list of languages device can render turned out
>>>>>>> surprisingly hard though.  Following hints from docs and advice from the
>>>>>>> net, I tried
>>>>>>>
>>>>>>> Locale.getAvailableLocales()
>>>>>>> Resources.getSystem().**getAsset**s().getLocales() (or
>>>>>>> just getAssets().getLocales() with same result)
>>>>>>>
>>>>>>> none of which gets the expected result (which is something
>>>>>>> resembling the language list in system "Language & Input" settings).  
>>>>>>> Also,
>>>>>>> there is a mention in the docs that subsystems affected by locale 
>>>>>>> settings
>>>>>>> usually offer their own means of getting a list of supported locales 
>>>>>>> which
>>>>>>> we should use in preference to Locale.getAvailableLocales(****).
>>>>>>>  Fair enough but I can see no such functions in TextView or Paint which 
>>>>>>> are
>>>>>>> the subsystems I use to draw text.
>>>>>>>
>>>>>>> We can do without app-specific locale settings although they'd be
>>>>>>> nice to have.  However, if just out of curiosity, I'm still wondering if
>>>>>>> it's really not possible on Android to get this seemingly fundamental 
>>>>>>> piece
>>>>>>> of information?
>>>>>>>
>>>>>>>  --
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "Android Developers" group.
>>>>>> To post to this group, send email to [email protected]
>>>>>> To unsubscribe from this group, send email to
>>>>>> android-developers+**[email protected]
>>>>>> For more options, visit this group at
>>>>>> http://groups.google.com/**group/android-developers?hl=en<http://groups.google.com/group/android-developers?hl=en>
>>>>>> ---
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "Android Developers" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send an email to android-developers+**[email protected].
>>>>>> For more options, visit 
>>>>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out>
>>>>>> .
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>  --
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Android Developers" group.
>>> To post to this group, send email to [email protected]
>>> To unsubscribe from this group, send email to
>>> [email protected]
>>> For more options, visit this group at
>>> http://groups.google.com/group/android-developers?hl=en
>>> ---
>>> You received this message because you are subscribed to the Google
>>> Groups "Android Developers" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>>
>>>
>>
>>
>

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to