所以,我正在将应用程序从日语本地化为英语。
在日语中,(例如)“先生”之间没有区别和“女士”(/“太太”),所以我需要做这样的事情:
/* Salutation format for user (male) */
"%@様" = "Mr. %@";
/* Salutation format for user (female) */
"%@様" = "Ms. %@";
如您所见,日语本地化在两种情况下都使用相同的字符串。我的印象是,当字符串文件包含多个具有相同“源”(即左侧)字符串的条目时,“注释”用于确定使用哪一个。 事实证明我错了,评论参数只是对人工翻译的一种帮助,完全被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];
那么,我应该如何处理这样的案件?
答案 0 :(得分:6)
嗯,实际上NSLocalizedString
的“左侧”是关键。所以你可以这样做:
NSLocalizedString(@"SalutForUserMale", @"Salutation format for user (male)");
NSLocalizedString(@"SalutForUserFemale", @"Salutation format for user (female)");
然后在您的基础*.strings
文件(日语我推测)中,您将拥有:
"SalutForUserMale" = "%@様";
"SalutForUserFemale" = "%@様";
在您的英文*.strings
文件中,您将拥有:
"SalutForUserMale" = "Mr. %@";
"SalutForUserFemale" = "Ms. %@";
答案 1 :(得分:2)
Localizable.strings文件只不过是键值列表。你使用日语短语作为键是不寻常的,但我想它是有效的。我认为这是因为原始应用程序是用日语(?)开发的。我通常使用英语短语键,但无论如何。
关键在于如果您想要两个不同的短语,即使只是一个翻译,您的所有翻译中也必须有两个不同的密钥。如果你的基础语言中有某些东西没有被区分,但是在它的翻译中,那么你可以只用两个新的“拆分”现有的密钥。只需稍微更改或添加一个数字,请参见下文:
/* english .strings file */
"hello_world_key" = "Hello World";
"Yes1" = "Yes"; // same in english but different values in german
"Yes2" = "Yes";
/* german .strings file */
"hello_world_key" = "Hallo Welt";
"Yes1" = "Ja";
"Yes2" = "Jawohl";