Подтвердить что ты не робот

Локализация iOS - обновление Localizable.strings с помощью только новых строк

Я искал Google и StackOverflow и до сих пор не получил четкого ответа на простой и автоматический способ сделать это, но вот сценарий:

  • У меня есть приложение с 1000 строк, локализованных в en, fr, de, es, it.
  • Я создаю новую функцию, которая делает 10 совершенно новых клавиш NSLocalizedString().
  • Я просто хочу, чтобы эти 10 новых строк добавились к концам файлов:
    • en.lproj/Localizable.strings
    • fr.lproj/Localizable.strings
    • es.lproj/Localizable.strings
    • de.lproj/Localizable.strings
    • it.lproj/Localizable.strings

genstrings будет извлекать все 1010 различных строк. Это боль, потому что мне нужно "игла в стоге сена" найти эти 10 строк каждый раз, когда я делаю обновление.

UPDATE 19-SEP-2014 - XCode 6. Apple наконец-то выпустила поддержку экспорта и импорта XLIFF файлов .strings. Что нового в XCode 6? Локализация

Linguan (v1.1.3), в то время как это прекрасный инструмент большую часть времени, он начинает быть инструментом в другом смысле. Он объединяет изменения, но некоторые строки не совпадают правильно, когда они сливаются, поэтому каждый раз, когда он использует Источники сканирования, он создает 100 новых дубликатов ключей, а также 10 строк, за которыми я работаю, поэтому он делает больше работы.

FileMerge. Как показано ниже, попробуйте выполнить разницу между старыми и новыми версиями выходных файлов genstrings. Вывод genstrings имеет строки, отсортированные в алфавитном порядке, так что 10 строк, разбросанных по 1000, означает, что существует 200 различий для обзора. он поддерживает соответствие /*...*/ и "..." = "..." и говорит, что ... был обновлен. Он не обновлялся, а просто перемещался в новое место в файле. Все больше и больше похоже, что мне нужно написать собственный инструмент.

MacHG + FileMerge на стороне заметки, по какой-то странной причине не нравится делать diffs из репозитория с рабочей копией Localizable.strings. Как левая, так и правая панели выглядят пустыми. UPDATE: выдает вариации в некоторых наборах изменений, которые сохраняются как UTF-16, а некоторые из них, как UTF-8, закручивают, чтобы он мог выполнять правильный diff.

Bash Script + FileMerge Я написал следующий Script, чтобы помочь поддерживать мой английский файл ссылки после каждого добавления новых записей NSLocalizedString:

#LOCALISATION UPDATE SCRIPT
#
#This will create a temporary copy of the current 'en' reference file then generate the 
#latest reference file using the 'genstrings' tool. Finally forcing FileMerge to launch 
#and diff the changes.
#
#Last Updated: 2014-JAN-06
#Author(s): Josh Wilson

clear
#assuming this script is run from $SRCROOT

#Backup Existing 'en' reference
cp "en.lproj/Localizable.strings" "en.lproj/Localizable-src.strings"

#Scan source files for 'NSLocalizableString' macros
genstrings -q -u -o en.lproj Classes/*.{m,mm}
genstrings -q -u -a -o en.lproj Classes/iPad/*.{m,mm}
genstrings -q -u -a -o en.lproj Classes/iPhone/*.{m,mm}

#Force FileMerge to launch and diff the update (NOTE: piping to cat forces GUI to open)
opendiff "en.lproj/Localizable-src.strings" "en.lproj/Localizable.strings" | cat

#Cleanup up temporary file
rm "en.lproj/Localizable-src.strings"

Но это только обновляет файл EN, и мне не хватает возможности обновления файлов на другом языке новыми ключами. Этот был хорош для случаев, когда у меня нет английского слова в качестве ключа, а genstrings бомбит меня "welcome_message" = "Welcome!" с "welcome_message" = "welcome_message"

POEditor http://poeditor.com/. Это онлайн-инструмент и подписка, основанная после 1000 строк. Кажется, что он работает хорошо, но было бы неплохо, если бы был инструмент, основанный на подписке.

Traducto Pro Похоже на то, что нужно работать с XCode и извлекать строки и объединять их вместе. Но от него невозможно получить что-либо, пока оно не будет полностью переведено, чтобы вы были вынуждены использовать свои услуги перевода.

Конечно, эта функциональность была реализована ранее. Как Apple поддерживает локализацию своих приложений?

Script наркоманы, я призываю тебя! Развитие iOS продолжается уже некоторое время, и локализация является обычным явлением, безусловно, есть уже зрелое решение этой проблемы?

Python Script update_strings.py: Stackoverflow наконец-то рекомендовал связанный с ним вопрос, а python Script в этом ответе Лучшая практика использования NSLocalizedString выглядит многообещающе...

Протестировав его и в его текущей форме (31-MAY-2013), он не обрабатывает многострочные комментарии, если у вас есть повторяющиеся записи комментариев (ожидается однострочный комментарий).

Может просто нужно немного подстроить регулярное выражение.

4b9b3361

Ответ 1

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


Установите BartyCrouch через Homebrew:

brew install bartycrouch

Кроме того, установите его через Mint:

mint install Flinesoft/BartyCrouch

Инкрементно обновляйте файлы Localizable.strings:

$ bartycrouch update

Это сделает именно то, что вы искали.


Для того, чтобы сохранить свои раскадровки /XIBs Струна файлы обновляются с течением времени я настоятельно рекомендую добавить скрипт сборки (инструкции о том, как добавить скрипт сборки здесь):

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 для получения дополнительной информации.

Ответ 2

если у вас есть жанры для предыдущей версии, просто "diff" между новыми и старыми может сделать трюки

EDIT: лучше всего использовать vimdiff для работы с файлами utf-16

Ответ 3

Вы можете проверить этот Xcode Plugin, который я построил для OneSky, он направлен на улучшение потока работы локализации для разработчиков iOS/Mac OSX.

Функция генерации строк в плагине запускает genstrings и ibtool --export-strings-file в выбранные файлы источника /IB, новые файлы будут автоматически добавлены в проект и будут автоматически установлены, новые строки будут объединены в существующие файлы с комментариями.

Он будет генерировать/обновлять строки только для базового языка, но вы можете использовать другие функции плагина для автоматизации экспорта и импорта переводов с платформы OneSky, которая бесплатна для проектов с несколькими проектами.

Ответ 4

Вы можете проверить мое решение здесь: SwiftyLocalization

С помощью нескольких шагов для настройки у вас будет очень гибкая локализация в Google Spreadsheet (комментарий, пользовательский цвет, выделение, шрифт, несколько листов и т.д.).

Короче говоря, шаги: Google Spreadsheet → Файлы CSV → Localizable.strings

Кроме того, он также создает Localizables.swift, структуру, которая действует как интерфейсы для поиска и декодирования ключей для вас (вы должны вручную указать способ декодирования строки из ключа, хотя).

Почему это здорово?

  • Вам больше не нужно иметь ключ как обычную строку по всем местам.
  • Неверные ключи обнаруживаются во время компиляции.
  • Xcode может выполнять автозаполнение, поэтому вы можете сделать что-то вроде этого:
// It defined as computed static var, so it up-to-date every time you call. 
// You can also have your custom retrieval method there.

button.setTitle(Localizables.login.button_title_login, forState: .Normal)

В проекте используется приложение Google Script для преобразования таблиц → CSV Python Script для преобразования файлов CSV → Localizable.strings Вы можете быстро просмотреть этот примерный лист, чтобы узнать, что возможно.