繁体   English   中英

检查 Localizable.strings 文件是否有效

[英]Check if Localizable.strings file is valid

我正在以编程方式创建可本地化的字符串文件。 我正在从服务器下载文件并显示该文件的本地化。

但是如果文件中有一些错误,那么我的本地化就不起作用。 它向我展示了钥匙。 如果在服务器上我编辑本地化文件并将字符串添加为

"HELLO_WORLD" = 你好

在这里,密钥是正确的,但值的格式不正确。 格式应该是

"HELLO_WORLD" = "你好";

如果我的 Localizable.strings 文件不包含任何错误并且有效,我如何在运行时以编程方式检查。

请帮忙

从终端使用plutil

plutil -lint Localizable.strings

除了@Aderstedt 的回答:

plutil -lint Localizable.strings确实有效,但您必须为文件的每个版本运行它。 例如

  1. cd进入你的项目根目录
  2. cd en.lproj - 您可以将其替换为您正在使用的任何本地化。
  3. plutil -lint Localizable.strings

当您运行第 3 步时,您将看到一个错误,告诉您文件有什么问题。 或者你会被告知文件没问题

如上所述, plutil (属性列表实用程序)是一个很好的工具,可以验证您的.plist.strings文件(如果您手动编辑它们)。 您可以通过将其与find结合将其应用于所有.strings文件。 在您的项目目录中运行

find . -name *.strings -exec plutil -lint {} \;

或使用

find . -path ./DerivedData -prune -o -name *.strings -exec plutil -lint {} \;

如果你想排除你的DerivedData目录(就像我通常做的那样)。

我遇到了同样的问题,发现plutil不够“详细”。 编辑文件的人想要一些可以更准确地告诉他们错误的东西

plutil 太宽泛了。

所以我写了一个quick&dirty java工具来测试一个字符串文件:

https://github.com/Daij-Djan/parseAndValidateAppleStringsFile

免责声明:我的代码

有很多答案,但他们没有关注要点是“在运行时以编程方式检查”。 我的建议是:

  1. 以编程方式找到您下载的文件程序的路径(如.../Documents/YourApp.bundle/fr-FR.lproj/Localizable.strings)

     NSString *path = [[NSBundle mainBundle] pathForResource:@"Localizable" ofType:@"strings" inDirectory:nil forLocalization:@"ja"];
  2. 将其转换为字符串数组

    NSString *fileContents = [NSString stringWithContentsOfFile:localizablePath encoding:NSUTF8StringEncoding error:nil]; NSArray *allLinedStrings = [fileContents componentsSeparatedByCharactersInSet: [NSCharacterSet newlineCharacterSet]];
  3. 手动或使用正则表达式检查 allLinedStrings 中的所有行。 以下代码是使用一些简单规则手动检查的示例:

     for (NSString *line in allLinedStrings) { if (line.length >= 2) { NSString *firstTwoCharacters = [line substringToIndex:2]; if (![firstTwoCharacters isEqualToString:@"//"]){ if (![line containsString:@"\\";"]) { NSLog(@"Invalid line"); } NSUInteger numberOfOccurrences = [[line componentsSeparatedByString:@"\\""] count]; if (numberOfOccurrences < 4) { NSLog(@"Invalid line"); } } } else if (line.length > 0) { NSLog(@"Invalid line"); } }

使用下面的工具,它比plutil更好。 它还有其他功能可以检测丢失的本地化字符串。

https://github.com/Rocker007/XCLocale

并使用以下选项来验证您的本地化字符串文件

./XCLocale.py -cf <iOS project path>

此工具将告诉您语法错误的确切行号,并检测一些最新 Xcode 版本未检测到的语法错误

例如:

#"screen.title"  =  " screen 1";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM