【问题标题】:.NET equivalent of choices in Java resource bundles?.NET 等效于 Java 资源包中的选择?
【发布时间】:2013-08-16 09:52:11
【问题描述】:

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

zh_CN - 英式英语

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)

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

zh_CN

  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 中实现这一目标的指导和指示。

谢谢

【问题讨论】:

  • 太棒了 :-) 它可以做到Bosnian 吗? (其中 few 表单基于few → n mod 10 in 2..4 and n mod 100 not in 12..14;
  • 没有开箱即用的 AFAIK...我会尝试 CustomFormatter 看看这是否可能是一个解决方案
  • 通过一些工作,我想它可以做波斯尼亚语,诀窍是,你不需要传入一个整数,你可以这样做 {1,choice,none#none string|one #singlular string|few#few string|many#many string|other#everything else} 并这样做。它不需要只使用整数。
  • 没有开箱即用?真可惜。然后我会看看 String.Format 和 CustomFormatter 接口......

标签: .net localization resources globalization resourcebundle


【解决方案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}

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

【讨论】:

    猜你喜欢
    • 2011-07-25
    • 2011-03-23
    • 2012-11-28
    • 2010-11-20
    • 2019-04-15
    • 2011-01-27
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多