Подтвердить что ты не робот

Есть ли инструмент для diff/merge/sort локализованных файлов строк?

Локализованный файл строк, который используется для локализации приложений Apple/iPhone, имеет следующий формат:

/* COMMENT */
"KEY" = "VALUE"

Обратите внимание, что KEY уникален в файле строк.
КОММЕНТАРИЙ является необязательным, однако он может помочь переводчику с дополнительной информацией.

Пример:

/* Menu item to make the current document plain text */
"Make Plain Text" = "Make Plain Text";
/* Menu item to make the current document rich text */
"Make Rich Text" = "Make Rich Text";

Я хотел бы разделить/слить два файла строк и, возможно, отсортировать файлы такого типа. Было бы замечательно, если бы комментарии выполнялись при выполнении этих операций.

Формат довольно прост, и я мог бы написать let say python script, чтобы сделать это, но если кто-то уже это сделал, я предпочитаю не переустанавливать колесо;)

Знаете ли вы инструмент, который может манипулировать файлом строк?

4b9b3361

Ответ 1

Я был в отчаянии, чтобы найти достойный способ управлять Localized.strings во время разработки, когда в код добавлены новые строки, и вы не хотите вручную управлять всеми файлами.

Я нашел Localization Manager, который делает это довольно хорошо. Он имеет несуществующую документацию, но поставляется с отдельной программой для переводчиков. Он импортирует ваши строки, отслеживает изменения и экспортирует необходимые файлы Localization.strings обратно в ваш проект.

До сих пор это бесплатное ПО.

Ответ 2

Как я уже сказал в этом сообщении, я недавно нашел бесплатное приложение под названием Локализуемое объединение строк в Mac App Store. Он делает именно то, что вы просите, даже сортировка/украшение. И это бесплатно. Надеюсь, что это поможет.

Ответ 3

Я нашел этот инструмент из проекта Three20:

http://github.com/facebook/three20/blob/master/diffstrings.py

Это отвечает моей первоначальной потребности по-разному в том, что я себе представлял:
он может различаться между основным языковым стандартом и другими локалями, чтобы увидеть, что нужно перевести в каждой локали. И затем смените переведенные строки.

Обратите внимание, что он выводит файлы xml для перевода на переводчики.

Ответ 4

Ужасно, но работает

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        NSString* f1 = [NSString stringWithCString:argv[1] encoding:NSUTF8StringEncoding];
        NSString* f2 = [NSString stringWithCString:argv[2] encoding:NSUTF8StringEncoding];

        //

        NSLog(@" Comparing %@ to %@\n", f1, f2);

        //

        NSError* error;
        if ( [f1 hasPrefix:@"~"] ) {
            f1 = [f1 stringByReplacingOccurrencesOfString:@"~" withString:NSHomeDirectory()];
        }
        if ( [f2 hasPrefix:@"~"] ) {
            f2 = [f2 stringByReplacingOccurrencesOfString:@"~" withString:NSHomeDirectory()];
        }

        NSStringEncoding encoding;
        NSString* f1Content = [NSString stringWithContentsOfFile:f1 usedEncoding:&encoding error:&error];
        NSString* f2Content = [NSString stringWithContentsOfFile:f2 usedEncoding:&encoding error:&error];

        //

        NSArray* f1Strings = [f1Content componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
        NSArray* f2Strings = [f2Content componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];

        for (NSString* keyString in f1Strings) {
            NSString* trimKey = [keyString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
            if ( !trimKey || [trimKey isEqualToString:@""] )
                continue;

            NSString* key = [keyString componentsSeparatedByString:@" = "][0];

            BOOL found = NO;
            for (NSString* keyString2 in f2Strings) {
                if ( [keyString2 hasPrefix:key] ) {
                    found = YES;
                    break;
                }
            }

            if ( !found ) {
                printf("%s\n\n", [keyString UTF8String]);
            }
        }
    }
    return 0;
}

Ответ 5

https://github.com/luckytianyiyan/TyStrings

$ tystrings diff diff1.strings diff2.strings

>>> Parsing File1 Reference...
>>> Parsing File2 Reference...
>>> Comparing...
+----+---------+---------+-------------+---------+
|    | File1   | File2   | Key         | Value   |
|----+---------+---------+-------------+---------|
| +  | 2       |         | diff.test.0 | Test0   |
| -  |         | 2       | diff.test.0 | Test    |
| -  |         | 5       | diff.test.4 | Test4   |
| +  | 8       |         | diff.test.2 | Test2   |
| -  |         | 11      | diff.test.3 | Test3   |
+----+---------+---------+-------------+---------+

Ответ 6

Используйте TextWrangler, чтобы открыть как строковые файлы, так и объединить их.

Это легко и бесплатно!

Здесь вы можете видеть, что происходит, когда вы

  • Откройте строковые файлы в TextWrangler
  • Выберите оба значения, а затем нажмите

Ниже приведен скриншот о том, как он выглядит:

введите описание изображения здесь

Ответ 7

Вы можете попробовать /Developer/Applications/Utilities/FileMerge.app. Это всегда хорошее начало. Кроме того, вы должны попробовать genstrings.