Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ios可本地化字符串不工作_Ios_Xcode_Localization_Localizable.strings - Fatal编程技术网

ios可本地化字符串不工作

ios可本地化字符串不工作,ios,xcode,localization,localizable.strings,Ios,Xcode,Localization,Localizable.strings,我制作了一个ios应用程序,该应用程序本地化为两种语言(英语和丹麦语,默认为英语)。 我用两个子文件en和da制作了一个本地化的.strings。 一切都应该是正确的,我看到英文文本加载从字符串文件罚款。但丹麦人没有 我试图通过下面的代码检查首选语言,它是丹麦语 [[NSLocale preferredLanguages] objectAtIndex:0]; 我尝试过清理+删除和重建,但运气不佳 我知道Localizable.strings文件正在工作,因为它正在获取英文文本。我知道,通过上面

我制作了一个ios应用程序,该应用程序本地化为两种语言(英语和丹麦语,默认为英语)。
我用两个子文件en和da制作了一个本地化的.strings。
一切都应该是正确的,我看到英文文本加载从字符串文件罚款。但丹麦人没有

我试图通过下面的代码检查首选语言,它是丹麦语

[[NSLocale preferredLanguages] objectAtIndex:0];
我尝试过清理+删除和重建,但运气不佳

我知道Localizable.strings文件正在工作,因为它正在获取英文文本。我知道,通过上面的代码行,它看到了丹麦的本地化。 我错过了什么

只需添加几个示例:
从英语:

"YesButton" = "Done";
"NoButton" = "Not yet!";
"NextButton" = "Next";
"BackButton" = "Back";
"EditButton" = "Edit";
"DoneButton" = "Done";  
丹麦人:

"YesButton" = "Færdig";
"NoButton" = "Ikke endnu!";
"NextButton" = "Næste";
"BackButton" = "Tilbage";
"EditButton" = "Redigér";
"DoneButton" = "Færdig";
获取文本的代码是:

[yesButton setTitle:NSLocalizedString(@"YesButton", nil) forState:UIControlStateNormal];
即使preferredLang是da(丹麦语),也会返回“Done”

希望有人有想法?:)

提前谢谢

编辑::
实际的丹麦-丹麦本地化有问题。我不知道苹果是否更新了它或者他们做了什么,但它从被称为“丹麦”变成了“丹麦”。
在进行了全新的丹麦本地化并删除了旧的本地化之后,它成功了!疯狂的东西。让你抓挠你的头

我以前也经历过类似的事情。我所做的全部工作就是将字符串编码从:

encoding:NSASCIIStringEncoding

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

现在假设问题不是字符串编码。您还可以围绕它工作,并执行以下操作:

NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0];

NSString yesButtonStr=@"";
NSString noButtonStr=@"";
NSString nextButtonStr=@"";

if([@"en"  caseInsensitiveCompare:language] == NSOrderedSame )
{
yesButtonStr = @"Done";
noButtonStr= @"Not yet!";
nextButtonStr = @"Next";
//...
}
else if if([@"da"  caseInsensitiveCompare:language] == NSOrderedSame )
{
yesButtonStr = @"Færdig";
noButtonStr = @"Ikke endnu!";
nextButtonStr = @"Næste";
//...
}
然后:


实际的丹麦本地化有问题。
当我开始本地化时,它被称为“丹麦”。ios和/或xcode更新后,现在仅为“丹麦语”。
因此,我们必须进行一次全新的本地化

谢谢你,苹果。。。。。。不是

试试这个

NSString *translatedString = [self languageSelectedStringForKey:@"YesButton"]; // Give your key here

-(NSString*) languageSelectedStringForKey:(NSString*) key
{
    NSString *path;
    path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"]; // give your language type in pathForResource, i.e. "en" for english, "da" for Danish
    NSBundle* languageBundle = [NSBundle bundleWithPath:path];
    NSString* str=[languageBundle localizedStringForKey:key value:@"" table:nil];
    return str;
}

希望这有帮助,谢谢。快乐编码

您在英语和丹麦文文件中使用相同的密钥吗?是的,当然。。。关键是相同的,当然不同的文本。你确定你得到的是英文版本,而不仅仅是默认文本?是的,因为我没有在任何地方添加任何默认文本。唯一的文本源是Localizable.strings文件。例如:self.navigationItem.title=NSLocalizedString(@“CalendarVCTitle”,nil);给出“BLABLA”,bla bla就是我看到的。故事板上没有文本。在属性检查器中,它被设置为UTF16,我理解它应该设置为UTF16(也尝试使用8,但没有运气)。我直接在xcode中创建了字符串文件(没有从外部复制它)。但是谢谢你的建议。你试过在调试屏幕上打印那些字符串吗?只是试过了。preferredLang的nslog是丹麦语,文本来自英语本地化的.strings。真让我吃惊!如果您临时删除英文条目并只打印丹麦语条目,那么在调试日志上会看到什么?这一点很好。然后该键作为默认值出现。因此,它实际上并不是在读取丹麦语本地化的.strings。有没有办法将其设置为默认值,然后看看它是否会读取它?您好,谢谢您的回答。我弄明白了,并在下面回答了(还不能接受自己的回答)。但是谢谢你的方法,很好的诊断工具。实际的丹麦本地化有些问题。当我开始本地化时,它被称为“丹麦”。在ios和/或xcode更新后,它现在仅为“丹麦文”。因此,我们必须进行一次全新的本地化。谢谢你,苹果。。。。。。不无论如何,谢谢你的帮助:)
[yesButton setTitle:NSLocalizedString(yesButtonStr, nil) forState:UIControlStateNormal];
NSString *translatedString = [self languageSelectedStringForKey:@"YesButton"]; // Give your key here

-(NSString*) languageSelectedStringForKey:(NSString*) key
{
    NSString *path;
    path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"]; // give your language type in pathForResource, i.e. "en" for english, "da" for Danish
    NSBundle* languageBundle = [NSBundle bundleWithPath:path];
    NSString* str=[languageBundle localizedStringForKey:key value:@"" table:nil];
    return str;
}