Стандарты для комментариев в NSLocalizedString - PullRequest
1 голос
/ 19 марта 2012

Как люди пишут свои комментарии для своих NSLocalizedString с?Есть ли стандартное руководство, которому мы должны следовать?Например, если у меня есть:

NSLocalizedString(@"Tap your account to sign in", @""); 

, и мой комментарий «Текст, который просит пользователя войти в систему, нажав на учетную запись», это немного двусмысленно?Должен ли я оставить комментарий, если он в значительной степени говорит само за себя?

Другой вопрос: что, если у меня есть набор ProgressHUD с текстом, установленным в LoggingIn, какой простой способ синхронизировать проект моего приложения, который нужно локализовать в NSLocalizedString (@"Logging In", @"some description"); Есть лиинструмент для выполнения таких задач?

Ответы [ 2 ]

3 голосов
/ 20 марта 2012

Второй параметр - это комментарий, который автоматически появится в файле строк, если вы используете утилиту командной строки genstrings , которая может создать файл строк для вас путем сканирования исходного кода.

Комментарий полезен для ваших локализаторов.Например:

NSLocalizedString(@"Save",@"Title of the Save button in the theme saving dialog");

Когда вы запускаете genstrings, это приведет к записи в файле Localizable.strings, например:

/* Title of the Save button in the theme saving dialog */
"Save" = "Save";

В вашем конкретном примере довольно очевидно, чтокомментарий означает, но не контекст.Вам, вероятно, следует добавить некоторый контекст, например, такой:

NSLocalizedString(@"Tap your account to sign in", @"Instruct user to tap their account to sign in (Facebook account, main game preferences)");

Таким образом, локализатор точно знает, на какую кнопку вы ссылаетесь.

Это становится еще более важным для кнопок с надписью «Поделиться» иликакой-то другой неспецифический ярлык:

NSLocalizedString(@"Share", @"Label for sharing button on main image editing screen");

(Это измененная версия моего ответа на этот похожий вопрос ).

0 голосов
/ 09 мая 2012

Роб Кенигер прав. Я также хотел бы добавить это: Второй параметр можно использовать как .. значение по умолчанию !!

(NSLocalizedStringWithDefaultValue не работает должным образом с genstring, поэтому я предложил это решение)

Вот моя Пользовательская реализация, которая использует NSLocalizedString, которая использует комментарий в качестве значения по умолчанию:

1. В предварительно скомпилированном заголовке (файл .pch) переопределите макрос 'NSLocalizedString':

// cutom NSLocalizedString that use macro comment as default value
#import "LocalizationHandlerUtil.h"

#undef NSLocalizedString
#define NSLocalizedString(key,_comment) [[LocalizationHandlerUtil singleton] localizedString:key  comment:_comment]

2. создать класс для реализации обработчика локализации

#import "LocalizationHandlerUtil.h"

@implementation LocalizationHandlerUtil

static LocalizationHandlerUtil * singleton = nil;

+ (LocalizationHandlerUtil *)singleton
{
    return singleton;
}

__attribute__((constructor))
static void staticInit_singleton()
{
    singleton = [[LocalizationHandlerUtil alloc] init];
}

- (NSString *)localizedString:(NSString *)key comment:(NSString *)comment
{
    // default localized string loading
    NSString * localizedString = [[NSBundle mainBundle] localizedStringForKey:key value:key table:nil];

    // if (value == key) and comment is not nil -> returns comment
    if([localizedString isEqualToString:key] && comment !=nil)
        return comment;

    return localizedString;
}

@end

3. Используйте это!

Убедитесь, что вы добавили скрипт Run в ваши фазы сборки приложения, чтобы ваш файл Localizable.strings обновлялся при каждой сборке, т. Е. Новая локализованная строка добавлялась в ваш файл Localized.strings:

Моя фаза сборки Script - это сценарий оболочки:

Shell: /bin/sh
Shell script content: find . -name \*.m | xargs genstrings -o MyClassesFolder

Итак, когда вы добавляете эту новую строку в свой код:

self.title = NSLocalizedString(@"view_settings_title", @"Settings");

Затем выполните сборку, ваш файл ./Localizable.scripts будет содержать новую строку:

/* Settings */
"view_settings_title" = "view_settings_title";

И так как ключ == значение для 'view_settings_title', пользовательский LocalizedStringHandler будет возвращать комментарий, то есть «Настройки»

Вуаля: -)

...