Ответ 1
Используйте plutil
из терминала:
plutil -lint Localizable.strings
Я создаю Localizable, файл строк программно. Я загружаю файл с сервера и показываю локализацию из этого файла.
Но если в файле есть некоторая ошибка, моя Локализация не работает. Он показывает мне ключи. Если на сервере я редактирую файл локализации, и я добавил строку как
"HELLO_WORLD" = Hello
Здесь ключ верен, но значение не в правильном формате. Формат должен быть как
"HELLO_WORLD" = "Hello";
Как я могу запрограммировать проверку во время выполнения, если файл Localizable.strings не содержит ошибок и действителен.
Пожалуйста, помогите
Используйте plutil
из терминала:
plutil -lint Localizable.strings
В дополнение к ответу @Aderstedt:
plutil -lint Localizable.strings
работает, но вы должны запускать его для каждой версии файла. Например
cd
в корневой каталог проектаcd en.lproj
- вы можете заменить это любой локализацией, с которой работаете.plutil -lint Localizable.strings
Когда вы запустите шаг 3, вам либо будет показана ошибка, сообщая вам, что не так с вашим файлом. Или вам будет сказано, что файл ОК
Как уже упоминалось выше, plutil
(служебная программа списка свойств) - отличный инструмент для проверки ваших файлов .plist
и .strings
, если вы их вручную редактируете. Вы можете применить его ко всем вашим файлам .strings
, объединив его с find
. В каталоге проекта запустите
find . -name *.strings -exec plutil -lint {} \;
или используйте
find . -path ./DerivedData -prune -o -name *.strings -exec plutil -lint {} \;
если вы хотите исключить свой каталог DerivedData
(как обычно).
У меня была такая же проблема, и множественное число не было достаточно подробным. Люди, редактирующие файлы, хотели что-то, что могло бы сказать им более точно, что не так.
plutil слишком широк.
поэтому я написал быстрый инструмент & 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");
}
}
Используйте ниже инструмент, который лучше, чем Плутиль. У этого есть другие особенности, чтобы обнаружить пропущенную локализованную строку.
https://github.com/Rocker007/XCLocale/tree/master
Используйте ниже инструмент, который лучше, чем Плутиль. У этого есть другие особенности, чтобы обнаружить пропущенную локализованную строку.
https://github.com/Rocker007/XCLocale
и используйте опцию ниже для проверки вашего локализованного строкового файла
./XCLocale.py -cf <iOS project path>
Этот инструмент сообщит вам точную строку no для ошибки synatax, а также обнаружит некоторые из синтаксических ошибок, которые не обнаружены вашей последней версией Xcode
Например
#"screen.title" = " screen 1";