Я искал 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), он не обрабатывает многострочные комментарии, если у вас есть повторяющиеся записи комментариев (ожидается однострочный комментарий).
Может просто нужно немного подстроить регулярное выражение.