Joda时间本地化 - getAsText(Locale ..)在某些语言环境中无法正常工作

时间:2014-08-12 09:35:00

标签: android localization jodatime

根据设备Locale:

getAsText()应打印本地化版本

例如,当语言环境为en时,一切正常:

DateTime dt = new DateTime();
System.out.println(dt.dayOfWeek().getAsText()); 
| Tuesday

但是如果将syslem语言改为希伯来语,那就破坏了:

System.out.println(dt.dayOfWeek().getAsText()); 
| 3        ( <-- supposed to be "יום שלישי")

如果覆盖设备区域设置,仍然有些区域设置似乎不起作用:

DateTime dt = new DateTime();
System.out.println(dt.dayOfWeek().getAsText(Locale.FRENCH)); // prints "mardi" = OK
System.out.println(dt.dayOfWeek().getAsText(new Locale("iw"))); // prints "3"
| mardi
| 3        ( <-- supposed to be "יום שלישי")

将系统区域设置更改为iw时,此代码打印正确,这意味着 转换在某处:

System.out.println(DateUtils.formatDateTime(this, dt, DateUtils.FORMAT_SHOW_WEEKDAY)); 
| יום שלישי

确保区域设置可用:

Locale iw = new Locale("iw");
System.out.println(iw.getDisplayName() + " " + iw.toString()); // prints Hebrew iw == OK
| Hebrew iw

任何建议如何解决这个问题,并确保joda时间getAsText / getAsShortText将被本地化? (或者如何添加我的翻译?)

更新1

我尝试解决此问题的一个方向是手动添加缺失的翻译。

SimpleDateFormat中,可以使用DateFormatSymbols的get和set添加/编辑天,月或其他符号的名称。效果很好 - 但不是在Joda。

在Joda中,我只能找到“获取”部分,我找不到如何将其设置回来......

DateFormatSymbols dfs = DateTimeUtils.getDateFormatSymbols(iw); // << joda method
dfs.setWeekdays(new String[] { "ראשון", "שני", "שלישי", "רביעי", "חמישי","שישי", "שבת" });

知道如何将DateFormatSymbols设置回格式化程序吗?

更新2

钻进Joda代码我意识到不可能退缩 问题的原因在于java.text.DateFormatSymbols(Locale)构造函数。 显然,某些语言环境不包含

中的所有必需信息
libcore.icu.LocaleData.get(locale);

因此,数据默认为数值。 这个问题似乎存在于较旧的设备中,因为新的Android版本会添加缺少的信息。

底线:在较旧的Android版本上使用非主流语言时,Joda格式化程序不可靠。 (经第11节测试)。在最近的版本 - 它更可靠。

0 个答案:

没有答案