Локализация в Xcode 10 - PullRequest
       50

Локализация в Xcode 10

0 голосов
/ 06 февраля 2019

У меня есть приложение, где все пользовательские строки используют NSLocalizableString ().Я никогда не локализовал приложение, поэтому смотрел видео WWDC 2018 Новые рабочие процессы локализации в Xcode 10 .Оттуда я создал новый проект, приложение Single View.Базовая локализация включена по умолчанию.На раскадровке я добавил одну UILabel и ограничил ее в центре представления.Я добавил к нему выход в контроллере вида:

@IBOutlet weak var label: UILabel!

И я установил его текст в viewDidLoad:

label.text = NSLocalizedString("Hello World", comment: "")

Построить и запустить, и он работает нормально.

Теперь я добавляю локализацию.Я выбираю проект и добавляю испанский.

enter image description here

Затем я экспортирую для локализации ... в меню редактора.Я открываю файл по этому пути:

es.xcloc -> LocalizedContents -> es.xliff

Там я нахожу ключ «Hello World», меняю значение на «Hola Mundo» и сохраняю файл.

...
<file original="MyProject/en.lproj/Localizable.strings" datatype="plaintext" source-language="en" target-language="es">
    <header>
      <tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="10.1" build-num="10B61"/>
    </header>
    <body>
      <trans-unit id="Hello World">
        <source>Hola Mundo</source>
        <note>No comment provided by engineer.</note>
      </trans-unit>
    </body>
  </file>
...

Затем вернемся к Xcode и импортируем локализации.Вот первая проблема:

enter image description here

Почему это несоответствующий перевод?

Я все равно продолжаю импортировать.Я редактирую схему следующим образом:

enter image description here

Когда я бегу, я получаю "HELLO WORLD".Это заглавные буквы, потому что это отладка локализации, указывающая на отсутствие перевода.

Чего мне не хватает?

1 Ответ

0 голосов
/ 06 февраля 2019

У нас тут несколько проблем.Во-первых, когда вы делаете NSLocalizedString("Hello World", comment: ""), на самом деле происходит попытка извлечь локализованную строку с ключом Hello World, и поскольку XCode не может найти этот ключ, он возвращает сам ключ, который вы установили для метки.Так что, для лучшей практики, рассмотрите возможность использования ключа, который не содержит пробелов на нем.Может быть, что-то вроде hello-world-label.Тогда это будет:

NSLocalizedString("hello-world-label", comment: "")

После экспорта для локализации будет сгенерировано следующее:

<trans-unit id="hello-world-label">
    <source>hello-world-label</source>
    <note>No comment provided by engineer.</note>
</trans-unit>

И теперь вам нужно добавить тег <target>, чтобы указать фактический перевод,Поэтому:

<trans-unit id="hello-world-label">
    <source>hello-world-label</source>
    <target>Hola Mundo</target>
    <note>No comment provided by engineer.</note>
</trans-unit>

Затем просто импортируйте обратно локализации, и все будет в порядке.

РЕДАКТИРОВАТЬ

После этого, Localizable.stringsфайл должен был быть сгенерирован.Нажмите на него и посмотрите на File Inspector на правой стороне Xcode в разделе Localization.Вы убедитесь, что файл локализован только для Spanish.Итак, продолжайте и установите флажок English.Затем ваш Localizable.strings будет доступен для редактирования на английском и испанском языках, как вы можете видеть на рисунке ниже:

enter image description here

Теперь вы редактируете английскийверсия этого файла для использования обоих языков в вашем приложении.

...