首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >国际化数字和数量

国际化数字和数量
EN

Stack Overflow用户
提问于 2012-06-30 11:41:00
回答 3查看 238关注 0票数 1

我不确定如何在下面的情况下正确使用NSNumberFormatter,并正确地保持本地化/国际化。

英文输出:

代码语言:javascript
复制
0 bananas
1 banana
5 bananas

我应该怎么做才能正确地保持国际化/本地化?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-30 14:41:25

复数的国际化是一个难题。我不是专家,但除了英语中简单的"1是单数,所有其他都是复数“之外,各种语言都有各种各样的复数方案。有些语言对于0、1、2、3和>3有不同的形式。考虑到语言的复杂性,可能还有更复杂的方案。

除了NSLocalizedString和朋友的普通字符串本地化之外,Cocoa中没有任何东西提供任何帮助,包括NSNumberFormatter。因此,您可以使用带有"0 bananas“、"1 banana”、"2 bananas“、"3 bananas”和"%d bananas“等键的NSLocalizedString。然后,使用开关加载您希望格式化的香蕉的实际数量。

另一种方法是平底船,并使用类似"bananas:%d“的字符串。

或者,您可以通过为0、1和>1提供本地化字符串来组合这些技术,并建议翻译人员在这些形式不能满足其语言要求时切换到平底船样式。

票数 4
EN

Stack Overflow用户

发布于 2012-06-30 17:10:48

肯回答得很好。

我会加上这一点。

在第一个近似值中,最好将完整的短语提供给翻译人员,因为不同语言之间的语法差异很大。但这还不够。您必须准备好处理翻译团队的一些请求。例如,在法语中,船被翻译成le into,飞机被翻译成l'avion (而不是le avion)。通常,翻译人员会使用技巧来避免这种情况,引入特殊情况,但这并不总是可能或可取的。

与翻译团队合作,找到最佳解决方案,并在可能的情况下将特定情况推广到所有语言,以便代码保持语言中立。在代码中,有几个相同的字符串比语言特定的情况更好。

随着时间和经验的积累,你会习惯这一点的。我在许多语言的本地化软件上工作了10多年(我想大概在7到23年之间,对23年的情况不是完全确定)。您将了解哪里出了问题,以及关于这些语言的一些细节。顺便说一句,没有太多的问题:复数,体裁,缩写是最常见的。格式通常由system locales API很好地处理。这非常有趣!

票数 1
EN

Stack Overflow用户

发布于 2012-07-19 08:05:16

我刚刚发布了改编自Mozilla的PluralForm的JJPluralForm

这样,你就不必担心在代码中执行所有的if-elseswitch-case代码来进行本地化,随着本地化数量的增加(俄语有3个复数规则,阿拉伯语有6个规则,等等),这就变得不可能维护了。

类似于您给出的例子,可以用以下方法处理:

代码语言:javascript
复制
[[JJPluralForm sharedManager] pluralStringForNumber:numberOfBananas
                                    withPluralForms:NSLocalizedString(@"N_BANANAS_PLURAL_STRING", @"")
                                    localizeNumeral:YES];

然后,每个Localizable.strings文件将N_BANANAS_PLURAL_STRING本地化为以分号分隔的复数形式列表。对于英语来说,那就是"%@ banana;%@ bananas"

查看该项目以了解更多详细信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11271216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档