本地化连接或动态字符串

我熟悉使用NSLocalizedString()来本地化字符串,但我今天遇到的问题需要更多的技巧。 我的情况是这样的:

NSString *userName; //the users name, entered by the user.  Does not need localized
NSString *favoriteFood; //the users favorite food, also entered by user, and not needing localized

NSString *summary = [NSString stringWithFormat:@"%@'s favorite food is %@", userName, favoriteFood];

这适用于英语,但并非每种语言都使用与英语相同的单词排序,例如,将日语同一单词逐字翻译成英语将会显示为:

UserName最喜欢的食物披萨是

更何况这不是在每种语言都占有。

有哪些技术可用于本地化这种类型的连接句子?

更新其他人的好处:@Jon Reed是对的,位置说明符对本地化非常重要。 他链接的文档仅包含对NSString,NSLog和其他文档可以使用的参考,链接并不能真正说明如何使用它们。

我找到了这个链接,这很好地解释了它。 它也比我更好地解释了我的问题。 从链接:

printf和sprintf的格式字符串(请参阅Printf)提供了一个特殊的翻译问题。 考虑以下几点:1

 printf(_"String `%s' has %d charactersn",
           string, length(string))) A possible German

翻译这可能是:

 "%d Zeichen lang ist die Zeichenkette `%s'n" The problem

应该是显而易见的:格式规格的顺序与原来的不同! 尽管gettext可以在运行时返回翻译后的字符串,但它不能在调用printf时更改参数顺序。

为了解决这个问题,printf格式说明符可能会有一个额外的可选元素,我们称之为位置说明符。 例如:

 "%2$d Zeichen lang ist die Zeichenkette `%1$s'n" Here, the

位置说明符由一个整数计数和一个'$'组成,这个计数表示使用哪个参数。 计数是基于一个的,格式字符串本身不包括在内。 因此,在下面的例子中,'string'是第一个参数,'length(string)'是第二个参数:

 $ gawk 'BEGIN {
 >     string = "Dont Panic"
 >     printf _"%2$d characters live in "%1$s"n",
 >                         string, length(string)
 > }'
 -| 10 characters live in "Dont Panic"

要指定替换顺序,请使用%1$@%2$@作为格式说明符。 本地化格式字符串可以按任意顺序使用它们。 例如,说你的字符串键是“FavoriteFood”。 呼叫

NSString *summary =
            [NSString stringWithFormat:NSLocalizedString(@"FavoriteFood", nil), 
                                       userName, favoriteFood];

本地化将格式说明符放在适合其语言环境的任何地方。 例:

"FavoriteFood" = "%2$@ is the favorite food of %1$@";

请参阅字符串格式说明符


对格式字符串@"%@'s favorite food is %@"应用NSLocalizedString()应该允许将其替换为当地语言的正确词序和所有格。

链接地址: http://www.djcxy.com/p/67351.html

上一篇: Localizing concatenated or dynamic strings

下一篇: jQuery delete cookie doesn't delete when redirecting