[英]Check if Localizable.strings file is valid
我正在以编程方式创建可本地化的字符串文件。 我正在从服务器下载文件并显示该文件的本地化。
但是如果文件中有一些错误,那么我的本地化就不起作用。 它向我展示了钥匙。 如果在服务器上我编辑本地化文件并将字符串添加为
"HELLO_WORLD" = 你好
在这里,密钥是正确的,但值的格式不正确。 格式应该是
"HELLO_WORLD" = "你好";
如果我的 Localizable.strings 文件不包含任何错误并且有效,我如何在运行时以编程方式检查。
请帮忙
从终端使用plutil
:
plutil -lint Localizable.strings
除了@Aderstedt 的回答:
plutil -lint Localizable.strings
确实有效,但您必须为文件的每个版本运行它。 例如
cd
进入你的项目根目录cd en.lproj
- 您可以将其替换为您正在使用的任何本地化。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
免责声明:我的代码
有很多答案,但他们没有关注要点是“在运行时以编程方式检查”。 我的建议是:
以编程方式找到您下载的文件程序的路径(如.../Documents/YourApp.bundle/fr-FR.lproj/Localizable.strings)
NSString *path = [[NSBundle mainBundle] pathForResource:@"Localizable" ofType:@"strings" inDirectory:nil forLocalization:@"ja"];
将其转换为字符串数组
NSString *fileContents = [NSString stringWithContentsOfFile:localizablePath encoding:NSUTF8StringEncoding error:nil]; NSArray *allLinedStrings = [fileContents componentsSeparatedByCharactersInSet: [NSCharacterSet newlineCharacterSet]];
手动或使用正则表达式检查 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.