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节测试)。在最近的版本 - 它更可靠。