Чи можливо оновити рядки локалізованої розкадровки?


226

Я локалізував частину своєї програми, створивши для неї base.lproj розкадровку та 3 рядкові файли. Це було місяць тому, і після цього я додав у програму новий контролер перегляду, але кнопки та мітки цього контролера не відображаються у файлах рядків

Чи можливо оновити ці додані рядкові файли з 3 розкадровками або я повинен додати нові переклади рядків програмно за допомогою NSLocalizableString та Localizable.strings?


Відповіді:


264

Є два варіанти:

Варіант 1

Xcode може "перезавантажити" файл, перетворивши файл у тип файлу [Інтерфейс Builder Cocoa Touch Storyboard] або у тип файлу [Localizable Strings] .

  1. Виберіть базовий файл розкадровки з «Навігатора проектів»
  2. Знайдіть розділ Локалізація в Інспекторі файлів
  3. Якщо ваш файл наразі є [Localizable Strings], змініть його на [Interface Builder Cocoa Touch Storyboard] або навпаки.
  4. Xcode повинен був перетворити вашу рекламну дошку в поточну версію, зберігаючи ваші старі зусилля щодо локалізації. Тут ви можете змінити файл на початковий тип файлу, якщо хочете.

Варіант 2

Використовуйте ibtool для витягування рядків у вашій розповіді.

  1. Відкрийте додаток Terminal

  2. Знайдіть свій каталог Base.lproj

  3. Використовуйте цей рядок для вилучення рядків:

    ibtool MainStoryboard.storyboard --generate-strings-file file_name.strings

  4. Після того, як ibtool витягує рядки до file_name.strings, ви можете скопіювати і вставити його у свій початковий файл .strings

Відвідайте додаткову інформацію: https://conyac.cc/business/column/localization_guide_ios


1
Я спробував Варіант 1, але зміна типу файлу з [Localizable Strings] на [Interface Builder Cocoa Touch Storyboard] завжди призводить до збою Xcode 5.0.1. Причиною може бути те, що - оскільки я не знав про можливості, описані вище - я раніше редагував файли локалізації розкадровки вручну.
Рейнхард Маннер

16
Варіант 1 працює. Але вам потрібно перейти з "Localizable .." на "інтерфейс ...", а потім знову!
Жоао Нунес

3
Варіант 1 не працює для мене за допомогою XCode 6.0.1. При спробі конвертувати мій .strings файл у .interfacebuilder XCode запитує, чи слід перетворити файли. Файли створюються у файловій системі, проте рядкові файли все ще залишаються і містять старі значення.
Біт підстрибуючи

53
Для мене Варіант 1 замінив усі вже перекладені рядки англійською. Мені довелося ще раз додати переклад.
Михайло Великов

5
Варіант 1 здається дуже нестабільним у Xcode 7. Іноді він працює, іноді - ні. Іноді він випадково знову замінює деякі мої вже перекладені рядки англійською версіями.
Адам Джонс

76

Перевірте BartyCrouch , це прекрасно вирішує вашу проблему. Також це відкритий код , активно підтримується і може бути легко встановлений та інтегрований у ваш проект.


Встановіть BartyCrouch через Homebrew :

brew install bartycrouch

Крім того, встановіть його через Mint :

mint install Flinesoft/BartyCrouch

Поступове оновлення файлів рядків розкадрів / XIBs:

$ bartycrouch update

Це зробить саме те, що ви шукали.


Щоб постійно оновлювати файли Storyboards / XIBs Strings, я настійно рекомендую додати скрипт збірки (інструкції, як додати сюди сценарій збірки ):

if which bartycrouch > /dev/null; then
    bartycrouch update -x
    bartycrouch lint -x
else
    echo "warning: BartyCrouch not installed, download it from https://github.com/Flinesoft/BartyCrouch"
fi

Окрім поступового оновлення файлів Storyboards / XIBs Strings, це також забезпечить Localizable.stringsоновлення ваших файлів за допомогою нових доданих ключів у коді з використанням NSLocalizedStringта відображатиме попередження щодо повторюваних ключів або порожніх значень.

Не забудьте ознайомитись з BartyCrouch на GitHub або в цій детальній статті для отримання додаткової інформації.


1
Оце Так! Цей інструмент просто дивовижний. Для цього потрібно більше оновлень!
ph1lb4

1
прекрасний інструмент - більше не вручну копіювати / вставляти нові тексти етикеток у * .strings-файли (... і забути будь-який переклад нового ярлика, як і раніше) ... Дякую!
iKK

чи є подібний стручок для проектів OBJC?
rickrvo

2
Це відповідь, яку ми шукаємо. Це має бути прийнятою відповіддю.
Хуанхо

3
Я не розумію, чому через 6 років з того часу, як це питання задається, і це патчі рішення все ще потрібно, щоб це працювало в Xcode. Apple повинна була над цим попрацювати.
huggie

57

Ви можете вручну додати ключ у файл локалізації. Ви можете знайти ключовий об’єкт, вибравши його в редакторі розповідей. Давайте подивимось на Object-IDінспектора посвідчення особи. Це схоже"nwc-b2-19c"

У вашій локалізації оновіть або додайте переклад. Наприклад :

"nwc-b2-19c.title" = "Translated title";

8
думаю, що це менш ризикований підхід
Ніколя Манзіні

Але деякі з Object-ID не відображаються у .string-файлі. Тому що вони не пов'язані. Тож у той час що я можу зробити?
Міхір Оза

чи є спосіб вибрати його через ім'я, а не лише автоматично створений ідентифікатор?
cocoseis

Для UILabel його: "YeB-ap-Wkw.text" = "Мій текст міток";
ioopl

30

Цей не для всіх, але він не потребує додаткових інструментів в терміналі, і це легко для невеликих змін вручну. (Не враховуйте це, коли ви хочете автоматизувати свій процес.)

Крок 0: Налаштування мови розгортки

  • База (з англійськими текстами)
  • Англійська (файл локалізованих рядків не існує, оскільки базовий файл англійською мовою)
  • інші мови (локалізовані файли рядків)

базова конфігурація

Цей крок робиться лише один раз.

Тепер, коли я щось додаю до раскадровки, я роблю наступне

Крок 1: додайте файл англійських локалізованих рядків

Додати англійську мову

просто позначте англійську позицію.

Це створює абсолютно новий англійський файл рядків з локалізацією з усіма рядками

Крок 2. Скопіюйте нові позиції в інші файли мови

і перекладати їх

Крок 3: зніміть позначку англійською мовою, видаліть відповідний файл локалізованих рядків

файл був потрібний лише для отримання нових позицій

Це простий і швидкий процес, все робиться в редакторі розкадровки

Редагувати:

Цей процес дуже добре працює з невеликими розкадровками. Наприклад, у мене є проект, заснований на вкладках, і для кожної вкладки у мене є розкладу.

Шукайте "посилання на розкадрування", щоб знайти підручники.

Хороший приклад: посилання на архів розкадрувань у Xcode, де ми повинні його використовувати?

Таким чином, кожен невеликий раскадровщик має лише кілька рядків для локалізації.


чудово! Ви також знайшли ідею, як видалити видалені елементи?
Tobe

@Tobe Якщо ви розділите свою раскадровку, як я пропоную вище, помітити рядки, які більше не використовуються, дуже легко.
Герд

15

Нарешті, моє рішення було (рудиментарним, але ефективним) скопіювати попередні переклади та вставити їх у новий файл, створений шляхом зняття галочки та встановлення прапорця з мовою вікна Локалізація.

Це було б корисно в деяких випадках, як у мене, коли вам доведеться змінити лише один або два тексти.


Чи збереже це весь час ідентичні та подібні? Я зробив один тест, і, здавалося, він працює, але це може стати катастрофою, якщо ідентифікатор зміниться.
ullstrm

Я так думаю, я робив це багато разів без жодних проблем.
jpl850

1
Ідентифікатори призначаються, коли ви скидали елементи інтерфейсу. Вони не залежать від локалізації, оскільки їм присвоєно розкадровку. Таким чином, ніякого впливу на посвідчення особи не буде.
iBug

Дякую iBug за пояснення =)
jpl850

14

Я думаю, що найкращим способом є використання вбудованих локалізацій експорту / імпорту:

  1. У Навігаторі проектів виберіть папку проекту
  2. Виберіть Редактор> Експорт для локалізації,
  3. Усі переклади, залишені на своїх місцях, і XCode автоматично додають пропущені рядки. Крім того, перед імпортом ви можете редагувати .xliff в редакторі XLIFF (наприклад, в Інтернеті - http://xliff.brightec.co.uk ), і тоді вам не потрібно робити це в XCode.
  4. потім Редактор> Імпорт локалізації та виберіть збережений .xliff файл.

PS Якщо ви не хочете редагувати редактор XLIFF і пропустили крок 3, XCode не може зберегти нові рядки. У цьому випадку відкрийте .xliff у редакторі XLIFF, повторно збережіть без змін та імпортуйте новий файл.


1
+1 Простий і правильний спосіб роботи з Локалізацією. Більше того, бажаним способом буде Apple
Jurasic

1
Використовуючи Xcode 7.3.1, у вже локалізованому зразковому проекті я змінив мітку (з "тексту" на "основний текст") і додав нову мітку. Я експортував для локалізації, торкнувся .xliff-файлу (без змін) та імпортував його знову. У файлі Main.strings рядок коментарів до зміненої мітки оновлено /* Class = "UILabel"; text = "a basic text"; ObjectID = "HFW-aN-MTb"; */, але нова мітка НЕ ​​створюється у файлі Main.strings. Потім я відредагував файл .xliff, щоб додати переклад нової мітки. Я знову імпортував його. Нова мітка тепер вставлена ​​у файл Main.strings.
лютого 16-16

+1, але є помилка, яку я виявив. Додаючи нові елементи, вони не містяться у експортованому файлі (як каже duthen). Але коли я роблю експорт відразу після (без змін у раскадровці), всі додані елементи, на диво, включаються. Тож зробіть експорт двічі. Другий включатиме всі нові елементи. Спасибі Apple!
Віктор Кучера

6

Коли ви клацаєте на вашій дошці, наприклад, Main.storyboard ... Праворуч ви бачите меню локалізації (див. Додане зображення). Якщо ви зніміть прапорець і ще раз перевірте лінгваж, файл буде згенерований знову. Тому я зазвичай копіюю вміст, я знову генерую файл, а потім вставляю той вміст, який скопіював і вже переклав.

Це я використовую для оновлення словника.

введіть тут опис зображення


З Xcode 10, якщо ви використовуєте git, це підкреслює відмінності!
Рікардо Руїс Ромеро

Так, можливо ... тепер мій файл більший, ніж у цю дату, і я зливаю його з версією сховища після того, як генерую його знову.
Дж. Фдез

5

У мене там величезна розповідь з великою кількістю струн. На двох мовах - англійська та інша - арабська. Завдання полягала в тому, щоб додати кілька полів та міток до аркуша розкадри та додати для них локалізацію без будь-яких сценаріїв та NSLocalizableStrings.

Для мене допомогло наступне:

По-перше : переконайтеся, що у вас є git для запобігання непередбачуваних змін.

  1. Перейдіть до цільового екрана в xcode та натисніть Editor-> Export For Localization.... Збережіть ar.xliff файл десь.
  2. Завантажити XLIFF Edtior .
  3. Відкрийте файл ar.xliff та внесіть зміни.
  4. Імпортуйте цей файл у xcode. Готово! Ви оновили файл рядків розповідей.

Щоб це працювало, спочатку виберіть проект або ціль у редакторі проектів Xcode.
Чак Борис

4

Існує додаток інструмент командного рядка від Apple, названий AppleGlot, який підтримує поступову локалізацію. Я ще не пробував цього, але він схожий на той інструмент, який ви шукали (деякий час тому).


appleglotІнструмент працює з кінцевими пучками додатків. Зовсім інший підхід для програм перекладу.
Фловдіс

1
Щось не так з "іншим підходом", або що викликає протизаконний рух?
tilo

Потрібно шукати AppleGlot за цим посиланням зараз.
NSDeveloper

4

Ось сценарій для вилучення рядків із дощок і xibs та об'єднання їх із існуючими перекладами.

Щоб автоматично запустити сценарій під час створення проекту, покладіть його в кореневу директорію проекту та додайте фазу запустити сценарій із наступного рядка до цільових фаз збірки у налаштуваннях проекту.

./mergegenstrings.py PathToSourceDir

Або ви можете запустити скрипт на Терміналі вручну, коли захочете.

Сценарій працює так, ibtoolяк відповів Tha Leang. Він також працює genstringsдля вилучення та об'єднання рядків, позначених NSLocalizedStringу вихідному коді. Сценарій заснований на сценарії в цій публікації , який об'єднує рядки після запуску genstrings.


чи можете ви надати більше інформації про те, як це використовувати?
користувач023

1
Я додав коментар до суті. Сподіваюся, це допомагає. gist.github.com/yoichitgy/29bdd71c3556c2055cc0
Yoichi Tagaya

Дякую, прекрасно працює для мене. Якщо у когось є проблеми з дозволами, це може бути корисним: stackoverflow.com/questions/9850936/…
iCode

Цей сценарій чудово працює для файлів mainboard main.board, але, здається, замінює мої переклади Localizable.strings у Xcode 7.
Адам Джонс

3

Найпростіший і менш ризикований підхід - просто скопіювати ідентифікатор об’єкта з архівної таблиці та додати новий ключ для ключа в локалізованому файлі, як показано нижче:

1: Скопіюйте ідентифікатор об'єкта, як показано нижче, із розгортки для компонента:

введіть тут опис зображення

2: Додати новий ключ у локалізований файл, як показано нижче:

"DjF-dn-0ay.text" = "Borrar datos y restablecer";

Примітка. Це дуже менш ризикований підхід, якщо ви хочете оновити лише декілька компонентів, інакше ви можете відтворити локалізований файл для розкадровки.


Дякую за вашу відповідь!!!!!. У мене є запитання, що в своїх проектах я не створив розетку для деяких міток, кнопок ... Якщо я використовую objectID для цих кнопок і міток, чи достатньо це?
Harikarthick K

3

Xlifftool доступний як додаток для Mac і працює добре. Він показує всі перекладені рядки та об'єкти з info.plist, локалізованих рядків та раскадровки.

Отримайте його тут для mac: https://itunes.apple.com/lv/app/xlifftool/id1074282695?mt=12

Крок 1: у Xcode виберіть папку свого проекту в навігаторі проектів. Потім виберіть Редактор / Експорт для локалізації ...

Ваші рядки, що перекладаються, будуть включені у файл xliff під мовою, яку ви вибрали для локалізації у Xcode.

Крок 2: Відкрийте цей файл за допомогою xlifftool і перекладіть або оновіть ваші переклади там, які були зроблені раніше.

Крок 3: Потім завантажте назад у свій проект за допомогою Редактора / Імпорту Локалізації ...


Ще одна альтернатива для macOS - це Loca Studio . Як і Xlifftool, додаток може відкрити результат редактора дій Xcode -> Експорт для локалізації. Він має деякі більш вдосконалені функції фільтрації та пошуку, а також автоматичну перевірку якості. (повне розкриття: Я - головний розробник).
guru_meditator

0

Це мій простий спосіб оновити новий текст із аркуша розкадри чи xib до рядка локалізації

1- використовуйте цей скрипт http://tredje.se/dev/trouble/?x=entry:entry150917-204052

2 - виберіть рядок локалізації, який ви хочете оновити, і переключіть мовний рядок з "рядок локалізації" на "розгортка розробника інтерфейсу"

3- перемкніть його назад :)

Зроблено.

введіть тут опис зображення


Він змінює файл на Інтерфейс розробника інтерфейсу, але знову після 1 або 2 секунд повертає його назад до Локалізованих рядків і не додає до Локалізаційних рядків для нового тексту перегляду
Муджахід Латіф

@MujahidLatif Я зараз користуюся цим стручком, він мені дуже корисний, і він може оновлювати локалізацію та локалізацію розкадровки, як буде github.com/Flinesoft/BartyCrouch
Fadi Abuzant

0

Варіант 1
Xcode може "перезавантажити" файл, перетворивши файл у [Interface Builder Cocoa Touch Storyboard]тип файлу чи [Localizable Strings]тип файлу.

Виберіть базовий файл розкадровки з « Навігатора проектів». Знайдіть розділ « Локалізація» у « Інспектор файлів» . Якщо ваш файл наразі є [Localizable Strings], змініть його [Interface Builder Cocoa Touch Storyboard]або навпаки.
Xcode повинен був перетворити вашу рекламну дошку в поточну версію, зберігаючи ваші старі зусилля щодо локалізації. Тут ви можете змінити файл на початковий тип файлу, якщо хочете.

Варіант 2
Використовуйте ibtoolдля вилучення рядків у вашій розповіді.

Відкрийте програму Terminal.
Знайдіть Base.lprojкаталог.
Використовуйте цей рядок для вилучення рядків:

ibtool MainStoryboard.storyboard --generate-strings-file file_name.strings

Після того, як ibtool витягує рядки file_name.strings, ви можете скопіювати та вставити його у свій вихідний .stringsфайл.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.