iOS字符串文件冲突 - 源语言中的字符串相同,目标不同

Nic*_*ari 5 cocoa localization nslocalizedstring ios

所以,我正在将应用程序从日语本地化为英语.

在日语中,(例如)"先生"之间没有区别 和"女士"(/"太太"),所以我需要做这样的事情:

/* Salutation format for user (male) */
"%@?" = "Mr. %@";

/* Salutation format for user (female) */
"%@?" = "Ms. %@";
Run Code Online (Sandbox Code Playgroud)

如您所见,日语本地化在两种情况下都使用相同的字符串.我的印象是,当字符串文件包含多个具有相同"源"(即左侧)字符串的条目时,"注释"用于确定使用哪一个.事实证明我错了,评论参数只是对人工翻译的一种帮助,完全被忽略了NSLocalizedString().

因此,如果我运行应用程序,则无论用户的性别如何,下面的两个代码路径都会生成相同的字符串:

NSString* userName;
BOOL userIsMale;

/* userName and userIsMale are set... */

NSString* format;

if(userIsMale){
    // MALE
    format = NSLocalizedString(@"%@?", 
                               @"Salutation format for user (male)");
}
else{
    // FEMALE
    format = NSLocalizedString(@"%@?", 
                               @"Salutation format for user (female)");
}

NSString* salutation = [NSString stringWithFormat:format, userName];
Run Code Online (Sandbox Code Playgroud)

那么,我应该如何处理这样的案件呢?

Ali*_*Ali 6

嗯,实际上"左侧" NSLocalizedString是关键.所以你可以这样做:

NSLocalizedString(@"SalutForUserMale", @"Salutation format for user (male)");
NSLocalizedString(@"SalutForUserFemale", @"Salutation format for user (female)");
Run Code Online (Sandbox Code Playgroud)

然后在你的基本*.strings文件(日语我推测)你会有:

"SalutForUserMale" = "%@?";
"SalutForUserFemale" = "%@?";
Run Code Online (Sandbox Code Playgroud)

在您的英文*.strings文件中,您将拥有:

"SalutForUserMale" = "Mr. %@";
"SalutForUserFemale" = "Ms. %@";
Run Code Online (Sandbox Code Playgroud)