Проверьте, действительно ли файл Localizable.strings

Я создаю Localizable, файл строк программно. Я загружаю файл с сервера и показываю локализацию из этого файла.

Но если в файле есть некоторая ошибка, моя Локализация не работает. Он показывает мне ключи. Если на сервере я редактирую файл локализации, и я добавил строку как

"HELLO_WORLD" = Hello

Здесь ключ верен, но значение не в правильном формате. Формат должен быть как

"HELLO_WORLD" = "Hello";

Как я могу запрограммировать проверку во время выполнения, если файл Localizable.strings не содержит ошибок и действителен.

Пожалуйста, помогите

Ответы

Ответ 1

Используйте plutil из терминала:

plutil -lint Localizable.strings

Ответ 2

В дополнение к ответу @Aderstedt:

plutil -lint Localizable.strings работает, но вы должны запускать его для каждой версии файла. Например

  • cd в корневой каталог проекта
  • cd en.lproj - вы можете заменить это любой локализацией, с которой работаете.
  • plutil -lint Localizable.strings

Когда вы запустите шаг 3, вам либо будет показана ошибка, сообщая вам, что не так с вашим файлом. Или вам будет сказано, что файл ОК

Ответ 3

Как уже упоминалось выше, plutil (служебная программа списка свойств) - отличный инструмент для проверки ваших файлов .plist и .strings, если вы их вручную редактируете. Вы можете применить его ко всем вашим файлам .strings, объединив его с find. В каталоге проекта запустите

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

или используйте

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

если вы хотите исключить свой каталог DerivedData (как обычно).

Ответ 4

У меня была такая же проблема, и множественное число не было достаточно подробным. Люди, редактирующие файлы, хотели что-то, что могло бы сказать им более точно, что не так.

plutil слишком широк.

поэтому я написал быстрый инструмент & dirty java для проверки файла строк:

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

отказ от ответственности: мой код

Ответ 5

Есть много ответов, но они не были сосредоточены на основных моментах: " программно проверяет во время выполнения". Мое предложение:

  • Программно найти путь к вашей загруженной файловой программе (например.../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");
        }
    }
    

Ответ 6

Используйте ниже инструмент, который лучше, чем Плутиль. У этого есть другие особенности, чтобы обнаружить пропущенную локализованную строку.

 https://github.com/Rocker007/XCLocale/tree/master

Ответ 7

Используйте ниже инструмент, который лучше, чем Плутиль. У этого есть другие особенности, чтобы обнаружить пропущенную локализованную строку.

https://github.com/Rocker007/XCLocale

и используйте опцию ниже для проверки вашего локализованного строкового файла

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

Этот инструмент сообщит вам точную строку no для ошибки synatax, а также обнаружит некоторые из синтаксических ошибок, которые не обнаружены вашей последней версией Xcode

Например

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