Я ожидаю, что базовый файл будет содержать мои английские слова, так как мой проект имеет локальную область локализации локализации, установленную на английском языке.
Обновление - чтобы уточнить мой вопрос:
Я ожидаю, что базовый файл будет содержать мои английские слова, так как мой проект имеет локальную область локализации локализации, установленную на английском языке.
Обновление - чтобы уточнить мой вопрос:
Хотя я не совсем уверен, правильно ли я это сделаю, я постараюсь ответить на ваш вопрос TTBOMK.
Предположим, что вы используете NSLocalizedString(key, comment)
из своего кода. Вы можете ясно видеть, что первый аргумент на самом деле является ключом для строки, а не самой переведенной (или переведенной) строкой. Поэтому, когда вы "пишете код", вы фактически не записываете строки на базовом языке - или на любой другой язык. Вы должны думать, что вы добавляете в свой код строковые заполнители.
В дальнейшем вы должны создать файл Localizable.strings
для каждого языка, который вы хотели бы поддержать, в форме key = value;
. Чтобы ваш пользовательский интерфейс отображался, по крайней мере, на одном человеко-читаемом языке, у вас должен быть хотя бы один Localizable.strings
файл с соответствующими строковыми значениями для каждого ключа-заполнителя.
Например: если у вас в коде есть NSLocalizedString(@"ConfirmationButtonTitle", @"Yada yada")
, то имеет смысл иметь файл Localizable.strings
, содержащий в нем элемент "GreenButtonTitle" = "Tap here to confirm";
. Если вы не создаете файл Localizable.strings
или файл Localizable.strings
содержат ключ GreenButtonTitle
, тогда заголовок кнопки возвращается к ConfirmationButtonTitle
, так как это имя ключа-заполнителя.
Сказав это, большинство людей предпочитают называть свои ключи точно как строковые значения по разным причинам. Это, возможно, удобная и очень распространенная практика, но может привести к конфликтам в сознании людей.
Итак, если бы вы вместо этого использовали предыдущий пример NSLocalizedString
, например NSLocalizedString(@"Tap here to confirm", @"Yada yada")
, тогда ваш файл default/base Localizable.strings
, вероятно, содержал бы такой элемент, как "Tap here to confirm" = "Tap here to confirm";
.
Что происходит здесь, это не то, что вы повторяете себя, но вместо этого вы называете свой ключ точно так же, как и строковое значение вашего базового языка, вот и все.
ИЗМЕНИТЬ
Всегда существовала концепция базового языка, но, как я понимаю, Xcode 5 подчеркивает это еще больше: это хорошо. Если ваш базовый язык является английским, то вам еще не нужно иметь файл Localizable.strings
для английского языка.
Помимо вопроса о том, какие конечные пользователи языка будут видеть, вам нужно также рассмотреть, что будет показано в AppStore. Мой текущий опыт заключается в том, что если вы используете Base for English, английский не появится в списке поддерживаемых языков (как Apple знает, на каком языке ваша базовая локализация) в описании вашего приложения.
Я сам встречал эту проблему - базовый (английский), немецкий и русский
Настройки цели относятся к:
Localization native development region = en
Но на Appstore он появляется в этой форме:
Languages: German, Russian
ссылка на английский
Я рассматриваю дублирование базовой локализации на английском (не высокий приоритет, так как пользователи видят со скриншотов, что приложение работает на английском языке в любом случае)
Изменить:, похоже, в iOS8 есть другое поведение. Параметры приложения (Settings.bundle), похоже, игнорируют базовый перевод, если любой из переводов соответствует вашему "Предпочтительному языковому заказу".
Другими словами, приложение локализовано: Base, German, Russian. iPhone настроен на использование английского языка, предпочтительный язык - английский, немецкий, русский.
Настройки приложения заходят... Немецкий!
Еще раз: это применяется только к настройкам не к самому приложению!
В соответствии с documentation (прокрутите вниз до "Создание строковых файлов для пользовательского текста в вашем коде" ), вы не должны добавьте Localizable.strings
в базовую локализацию. Даже если язык разработки - английский, создайте отдельную папку и Localizable.strings
для английского языка. Создайте другие для каждого дополнительного языка, который вы хотите добавить.