Cocoa可以自动处理法语中本地化字符串的收缩吗?

Pau*_*nge 1 cocoa localization nsstring

我有一个本地化NSString的东西,比如"你赢了.这是查克诺里斯.".法语翻译是"Gagne.il s'agissait bien de Chuck Norris".但当名字以元音开头时,应该说"Gagné.ils'agissait bien d'Alfred Hitchcock".

是否NSString为这些情况提供支持,还是我需要手动翻译每种可能性?

Jon*_*pan 6

如果你正在尝试使用类似的工具进行本地化,那么这样的NSLocalizedString()变体将会出现在很多语言中(特别是那些具有语法性别的语言)并且要处理很多麻烦.没有内置的change-strings-if-starting-with-a-vowel方法,但是这样的东西是必要的(伪代码):

if (language == LANG_FRENCH) {
    if (myName.startsWith(ANY_VOWEL)) {
        result = format(@"Gagné ... d'%@", myName);
    } else {
        result = format(@"Gagné ... de %@", myName);
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么我给你伪代码而不是真正的代码?因为这是做这项工作的错误方法.它很乱,很难看,还有很多边缘情况.例如,法语中的字母"H"可以是"吸气"或"非吸气",一个取"l"/ d'而另一个取"le/la/de"(比较"l'hôtel"区分是任意的,不能仅通过检查单词的拼写来确定.

尝试将格式字符串更改为中性,而不是尝试将格式字符串与名称匹配.而不是"Il s'agissait bien d'%@."尝试"Le nom? C'est %@!"使名称的性别和拼写不影响本地化.不同的语言在这里有不同的选择.