1

我正在编写一个多平台单元,其中包括使用 Delphi 的 TFormatSettings。我希望创建一个全局 TFormatSettings 让我可以访问我的家庭(英国)位置信息,而不管我的代码将使用的实际区域设置(例如,我需要英国小数分隔符和列表分隔符,这些分隔符因国家/地区而异)。我只是想读取这些值,而不是更改它们,或者修改实际的机器语言环境。为了测试我可以通过这种方式获取信息,我尝试了下面的代码。该代码在 32/64 Windows 中运行良好(返回美元符号,后跟英镑符号),但在我 2 岁的 Nexus 7 上的 Android 上运行时,返回两个输出的美元符号。

它是使用 XE7 和多设备应用程序创建的。

procedure TForm2.Button1Click(Sender: TObject);
var
  FS : TFormatSettings;
begin
  FS := TFormatSettings.Create( 'en-US' );
  ShowMessageFmt( FS.CurrencyString );

  FS := TFormatSettings.Create( 'en-UK' );
  ShowMessage( FS.CurrencyString );
end;

我尝试了各种其他位置字符串,但没有成功。我已经深入研究了 SysUtils 中的“LIBICU”代码,但我正在扩展调试器和我的知识!谁能评论我可能做错了什么?谢谢你的帮助。

稍后编辑解决:要在 Android 中获取英国,您需要通过“en_GB”而不是“en-UK”。Uwe Raabe 显示的这个 Java 链接上也有很多有用的信息。

4

1 回答 1

4

尽管请求的语言环境可能可用,但不能保证:

(来自http://developer.android.com/reference/java/util/Locale.html

请注意,语言环境数据不一定可用于此类中预定义为常量的任何语言环境,但 en_US 除外,这是 Java 保证始终可用的唯一语言环境。

假设所有设备都具有相同的可用区域设置也是错误的。在美国销售的设备几乎肯定会支持 en_US 和 es_US,但不一定支持任何具有相同语言但不同国家的语言环境(例如 en_GB 或 es_ES),也不一定支持其他语言的任何语言环境(例如 de_DE)。对于在欧洲销售的设备,情况可能正好相反。

当语言环境不可用时,我希望至少会出现一条错误消息,但在这种情况下,RTL 似乎会回退 en_US(请参阅 TFormatSettings.AdjustLocaleName)。

于 2014-09-18T21:44:37.493 回答