3

在 Java 资源包中,我可能有以下资源包定义:

en_GB - 英式英语

jobs.search.resultstr = There {1,choice,0#are no jobs|1#is one job|1<are {1,number,integer} jobs} for your search

ceb_PH - 宿务

jobs.search.resultstr = Adunay {1,choice,0#mga walay mga|1#mao ang 1 nga|1<{1,number,integer}} trabaho alang sa {1,choice,0#inyong mga|1#imong|1<inyong mga} search

我将用于提取资源的代码将根据输入数据做出选择,并正确格式化字符串,从而产生三种不同的输出之一。

伪代码:

myResultStr = resourceBundle.getResource("jobs.search.resultStr", jobs.recordCount)

这将导致输出以下字符串之一,具体取决于所选的语言环境和返回的结果数。

en_GB

  1. 没有您要搜索的职位
  2. 有一份工作供您搜索
  3. 有 2 个职位供您搜索

或者

ceb_PH

  1. Adunay mga walay mga trabaho alang sa inyong mga search
  2. Adunay mao ang 1 nga trabaho alang sa imong 搜索
  3. Adunay 2 trabaho alang sa inyong mga 搜索

我对 .NET 开发比较陌生,我一直在研究 .NET .resource 和 .resx 本地化方法,但我似乎无法找到任何关于如何达到相同水平的提示正如我上面在 .NET 框架中说明的那样,本地化灵活性。

任何关于我如何在 .NET 中实现这一点的指导和指示都将受到欢迎。

谢谢

4

1 回答 1

1

我解决这个问题的方法确实是使用 CustomFormatter 来实现 ChoiceFormat 的等效项,自定义 ResourceBundle 对象使用它来代理对 .NET resx 文件的访问。通过实现涵盖所有我需要(以及未来更多)语言的 Pluraliser 对象层次结构以及 ChoiceFormat,我可以准确地本地化字符串。

代码看起来有点像这样......

String.Format(new ChoiceFormatProvider(Session["CultureInfo"]), rb.GetString("resxkey", Session["CultureInfo"]), new object[] { 5 });

GetString 返回的字符串由 resx 文件本地化,但随后由自定义格式化程序处理,它们看起来像这样......

{0:choice,0#zero str|1#one str|1<more than one}

更进一步,我可以处理像这样格式化的字符串......

{0:plural,zero#zero str|one#singular str|two#dual str|few#few str|many#many str|other#other plural str}

这两个特性与一组自定义复数对象相结合,可以实现非常复杂的本地化特性。

于 2013-09-03T22:02:52.010 回答