2016-02-14 1 views
0

Я изучаю книгу iOS 9 AppCoda на Swift (https://www.appcoda.com/swift/), и я застрял, в частности, в разделе «Локализация». Таким образом, автор перешел к изменению некоторых строк, ориентированных на пользователя, в коде только от String до NSLocalizedString. Это имеет смысл, и внесенные мной изменения автоматически обновлялись с помощью файла XLIFF. В разделе «Локализация» автор упоминает, что вы также можете перевести строки Storyboard, ориентированные на пользователя, с функцией «Локализация экспорта» Xcode.Локализация и пользовательский текст в раскадровки

Потому что это книга, над которой вы работаете, он предоставляет уже переведенный XLIFF-файл на китайский и немецкий языки, который включает в себя исходный текст, переведенный текст и элементы раскадровки, также переведенные.

Когда я импортирую файлы в Xcode, я вижу три раскадровки (Base и Chinese/German.strings и т. Д.), Но когда я запускаю приложение, ни один из элементов Storyboard на самом деле не переводится, и только элементы из источника код.

Когда я нажимаю на немецкую раскадровку, я получаю «не локализованные строки».

enter image description here

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

Есть ли у кого-нибудь идеи о том, почему элементы раскадровки не будут обновляться с помощью переведенного текста в моем случае?

Любые мысли будут оценены.

ответ

2

Вот моя догадка ... Экспорт строк локализации из раскадровки немного отличается от экспорта этих строк из кода.

Файл локализации строк из кода получает фактический текст из NSLocalizedString макро и создает отображение таких как:

"Original string" = "Translated string". 

Таким образом, вы просто должны использовать «Original строки» в вашем коде, то Xcode знает он должен перевести его на «Переведенная строка».

Однако файл локализации раскадровки использует дескрипторы объектов пользовательского интерфейса для установки локализованных строк.Например:

/* Class = "UILabel"; text = "Ops..."; ObjectID = "fe4-zT-gjU"; */ 
"fe4-zT-gjU.text" = "Wait for it..."; 

В этом примере моя раскадровка имеет UILabel, с текстом «Упс ...», и эта метка имеет ObjectID равного «Fe4-ZT-Ий».

Идентификаторы объектов являются уникальными для каждого объекта в каждом проекте, поэтому, очевидно, идентификаторы объектов из учебника приложения coda будут уникальными для созданного автором проекта; если вы не скачали оригинальную раскадровку автора, ваша раскадровка будет иметь все разные идентификаторы объектов, поэтому Xcode не будет знать, как связать правильные переводы с правильными объектами.

Я не думаю, что Xcode импортирует локализацию для объектов с объектами, которые он не распознает.

Так что, я думаю, вам следует выполнить операцию «Экспорт для локализации». Это должно обновить файл .strings раскадровки. Затем вы копируете каждый перевод из учебного файла в файл .strings с помощью редактора xliff. Скучно, я знаю. Добро пожаловать в мир разработки приложений. :-)

+1

Это такой блестящий ответ @Felipe. Огромное спасибо. Вы были правы в отношении идентификаторов объектов, и когда я связался с автором приложения Coda, он предоставил мне файл проекта и раскадровку до момента, когда мы изменили код перевода (так что элементы интерфейса были там все) и как только я снова пробежал экспорт, и тогда он работал. Действительно интересный подход, и это было чрезвычайно полезно! Еще раз спасибо - я ценю это! – amitsbajaj

+0

Добро пожаловать! Я счастлив, что вам удалось решить вашу проблему :-) –

0

Когда вы добавили свою локализацию, вы выбрали файл раскадровки?

enter image description here

Если это так, то убедитесь, что ваша схема установлена ​​на правильном языке. Это может быть сделано в рамках продукта> Схемы> Редактировать Схема

enter image description here

Если это не сделать, то убедитесь, что ваш тренажер установлен на язык, который вы хотите отобразить. Это можно сделать в настройках симулятора, как и у iPhone.

Надеюсь, это поможет.

+0

Большое спасибо за ответ @ d.greg. Я ценю его. Поэтому, когда я экспортировал локализацию из Xcode, я выбрал Project, а затем Project (FoodPin) вместо цели. Я не выбрал раскадровку. Но в то же время я не видел ваш первый снимок экрана нигде. Это во время импорта? Для импорта я выбираю «Редактор»> «Импорт», и я выбрал файл .xliff. Вторая часть, которую я знаю, работает, потому что NSLocalizedStrings, созданные мной в коде, переводятся; просто нет элементов раскадровки, таких как UILabels и т. д. – amitsbajaj

Смежные вопросы