Есть ли инструмент для 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, чтобы сделать это, но если кто-то уже это сделал, я предпочитаю не переустанавливать колесо;)
Знаете ли вы инструмент, который может манипулировать файлом строк?
Ответы
Ответ 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
.