То, что я писал относительно давно про перевод JIRA имеет смысл и для Confluence, да и возможно и для других приложений. Однако, я там не описал ещё много интересностей и в организационном плане. Здесь и сейчас я опишу часть из них.
Порядок
Сначала определитесь с порядком перевода. Переводить можно:
- По файлу – мне такой вариант не нравится, если объём перевода существенный (тысячи строк). В малых переводах (до пары сотен строк) вполне можно переводить и по файлу.
- По интерфейсу – мне такой вариант видится предпочтительней, особенно в случае больших объёмов и сложных интерфейсов:
- Открываем окно Х – переводим его
- Открываем окно Y – переводим его
- Открываем окно Z – переводим его
- Собираем, проверяем
- Исправляем, собираем, проверяем
- Начинаем следующую серию
Есть некоторые программы, в которых файловый и алфавитный порядок идёт достаточно близко к друг другу. Но в случае продуктов Atlassian это совсем не так.
Машинный перевод
Машинный перевод может больше запутать, чем помочь. Доверяю только голове. В некоторых случаях даже приходится разбираться в концепциях предлагаемых программой, иначе перевод можно получить крышесносящий.
Простейший пример: “Account” может переводиться как “Счёт”. Хотя это верно для бухгалтерских систем, однако в общей терминологии IT обычно применяется термин “Учётная запись”.
Перевод “в слепую”
Переводить “в слепую” сложный интерфейс чревато последующей кривизной русского языка. Здесь возможно и использование неверной терминологии в контексте, например “Name” может переводиться как “Имя”, “Название” или “Наименование”, а иногда даже целесообразнее уточнить до “Имя файла”.
Особое внимание на падежи и численность. Например:
Sort by:
— Name
— Size
лучше перевести с учётом падежей, если позволяет структура перевода
Сортировать:
— по имени
— по размеру”
Это получше прямого перевода в стиле:
Сортировать по:
— Имя
— Размер
Также возможны глагольно-существительные разночтения в переводах кратких слов. Например: “view” может быть переведено как “просмотреть” или “просмотр”. Точный перевод может быть выполнен только с учётом контекста (хотя есть ещё варианты с “вид” или “ракурс”). В случае прилагательных типа “new” могут быть и варианты с прилагательными в разных родах – “новый” или “новое”, хотя не исключены непрямые переводы типа “создать”, в зависимости от контекста.
Отдельного рассмотрения требуют глаголы совершенной и несовершенной форм. Например: видел недавно в одном приложении (установщик HTC Sync в данном случае) кнопку “Устанавливать” — это полная несуразица с точки зрения русского языка. Безусловно, тут имелось в виду “Установить”. Для настроек больше подойдёт несовершенная форма “Сохранять автоматически”, а для действий больше подходит совершенная форма “Сохранить”.
Мне лично не нравится, когда в равнозначном списке (действий, пунктов, заголовков) смешиваются существительные и глаголы. Требуется более точно представлять, в каких элементах интерфейса допустимы глагольные, существительные формы. Например: допустимы пары “Поиск, Замена” и “Найти, Заменить”, но смешивать их в стиле “Найти, Замена” – недопустимо.
Словарь
В процессе перевода очень желательно завести себе проектный словарик, в котором вы будете вести базовый словарь понятий с допустимыми или недопустимыми вариантами перевода. Ниже что-то вроде примера:
Слово | Допустимо | Недопустимо |
click | щёлкнуть | кликнуть |
button (на экране) | кнопка | |
key (на клавиатуре) | клавиша | кнопка |
download | загрузить | скачать |
permission | полномочия | разрешения |
space | пространство | область, космос |
tab | вкладка | закладка |
label | метка | ключевое слово |
send | отправить | отослать |
Для общего сведения пользуйтесь общим опорным кратким словарь. У Microsoft был хороший большой словарь с разнообразной терминологией, ориентированный именно на интерфейс программ. Ссылочки под рукой нет, но рекомендуется к использованию в больших проектах.
Версионность
Если вы предполагаете в будущем наличие других участников перевода – то здесь очень желательно будет использовать SVN/CVS-ориентированные системы (хостера, локальные, бесплатные). Здесь будет помогать версионность вашего перевода и существенное облегчение совместной работы над комплектом файлов перевода.
Хранение версий английских оригиналов также очень предпочтительно. Пример: вы переводите версию 1.0 и перевод готов процентов на 80% (полностью переведены основные функции). Выходит версия 1.1, где внесены изменения как в части добавления новых функций, так и изменения в текстовке существующих функций. Сравниваете английские версии – получаете “дельту”, которую вам надо перевести для полноты перевода.
Поиск по переводу
Часто бывает, что некоторые (особенно краткие) элементы интерфейса вы не можете точно найти в файле перевода. Основная причина – распространённость использования данного слова, а вам нужно при этом исправить конкретный элемент, не трогая все остальные.
Для такого случая есть трюк: нужен есть какой-то третий язык (немецкий или обезьянний). В файле этого перевода надо перевести коды перевода в виде самих кодов:
Например, файл перевода содержит:
404.message.reason1=The page does not exist.
404.message.reason2=The page exists, but you do not have permission to view it.
404.nav.dashboard=Your Dashboard
404.nav.home=Site Homepage
404.nav.title=Go to
404.search.title=Site Search
404.spaces=Public Spaces
из него нам нужно получить что-то вроде:
404.message.reason1=404.message.reason1
404.message.reason2=404.message.reason2
404.nav.dashboard=404.nav.dashboard
404.nav.home=404.nav.home
404.nav.title=404.nav.title
404.search.title=404.search.title
404.spaces=404.spaces
Тогда, если мы подложим этот перевод и переключимся на него, то получим условный интерфейс:
Здесь всё очень понятно – найти нужный элемент интерфейса в файле стало гораздо легче.
В простом случае это легко делается при помощи регулярных выражений. Мы ищем используя регулярные выражения
(.*)=(.*)
и заменяем на
\1=\1
Надеюсь, что объяснять не нужно. Данный синтаксис регэкспов работает для редактора Notepad++, в других редакторах может использоваться немного другой синтаксис.
При таком подходе есть немного выпадающие звенья, например строки с параметрами:
browse.mail=Browse mail in the {0} space
В некоторых случаях приложение может начать жестоко плющить. Но с этим можно или мириться, или усложнять процесс замены.
Ассоциации
Программа BabelFish выполнена в виде JAR, хотя она понимает перетаскивание файлов на неё, но можно и связать её для более быстрого доступа.
Вариант первый
Сделать пакетный файл с нижеследующим содержанием:
start javaw.exe -jar c:\site\conf-trans\BabelFish\babelfish.jar c:\site\conf-trans\ConfluenceActionSupport.properties
Запуск данного ярлыка откроет требуемый файл в программе BabelFish.
Вариант второй
Связать файлы *.properties через ассоциации по командной строке, аналогичной вышеуказанной.
Мелкие трюки в BabelFish
Есть распостранённая, но недокументированная особенность для быстрой навигации в дереве элементов.
Начните быстро набирать начальные буквы искомого кода, и вы перейдёте к элементу с таким началом – при этом учитывается раскрытость веток.