Как вы управляете процессом перевода строк? - PullRequest
21 голосов
/ 10 октября 2008

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

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

Итак, вопрос в том, как вы управляете всем этим процессом? Любые советы, как облегчить влияние перевода в программном проекте? Как управлять строками, вместо того, чтобы управлять строками?

РЕДАКТИРОВАТЬ: Мы используем Java, и все строки интернационализируются с помощью комплектов ресурсов, поэтому проблема заключается не в самой интернационализации, а в управлении строками.

Ответы [ 11 ]

13 голосов
/ 31 мая 2009

Я не уверен, на какой платформе вы интернационализируете. Ранее я уже писал ответ о наилучшем способе применения приложения. См. Что мне нужно знать для глобализации приложения asp.net?

Тем не менее, управлять самими переводами сложно. Проблема в том, что вы будете использовать один и тот же фрагмент текста на нескольких страницах. Однако ваша платформа может не поддерживать наличие только этого фрагмента текста в одном файле (например, файлы ресурсов на asp.net рекомендуют иметь один файл ресурсов на язык).

Способ работы с вещами заключался в том, чтобы иметь центральное хранилище переводов. Мы создали небольшое приложение .net для импорта переводов из файлов ресурсов в эту базу данных и экспорта переводов из этой базы данных в файлы ресурсов. Таким образом, в процессе сборки есть дополнительный шаг для сборки файлов ресурсов.

Другая проблема, с которой вы столкнетесь, - это передача переводов вашему поставщику переводов и обратно. Для этого есть несколько способов: посмотрите, готов ли ваш поставщик переводов принять XML-файлы и вернуть правильно отформатированные XML-файлы. Это действительно один из лучших способов, поскольку он позволяет автоматизировать импорт и экспорт файлов перевода. Другой вариант, если ваш поставщик разрешает это, - создать веб-сайт, который позволит им редактировать переводы.

В конце концов, ваш ответ для переводов будет таким же, как и для любого другого процесса, требующего повторения и ручной работы. Автоматизируйте, автоматизируйте, автоматизируйте. Автоматизируйте каждую вещь, которую вы можете. Скопируйте и вставьте , а не ваш друг в этом сценарии.

5 голосов
/ 31 мая 2009

Pootle - это веб-приложение, которое позволяет управлять процессом перевода через Интернет.

4 голосов
/ 10 ноября 2008

Существует ряд серьезных проблем, которые необходимо учитывать при интернационализации приложения.

  • Не все строки созданы одинаково . В зависимости от языка длина предложения может значительно измениться. В некоторых языках длина может быть вдвое меньше, а в других - в три раза. Убедитесь, что ваши графические виджеты спроектированы с достаточным пространством для обработки строк, которые больше, чем ваши английские строки.
  • Переводчики обычно не программисты . Не ожидайте, что переводчики смогут читать и поддерживать правильные форматы файлов для файлов ресурсов. Вы должны настроить механизм, в котором вы можете преобразовывать переведенные данные в оба конца в файлы ресурсов из чего-то вроде электронной таблицы. Одной из возможностей является использование XSL-фильтров с Open Office, чтобы вы могли сохранять файлы ресурсов непосредственно в приложении для работы с электронными таблицами. Кроме того, переводчики или компании, предоставляющие переводческие услуги, могут уже иметь свои собственные базы данных, поэтому полезно спросить о том, что они используют, и написать некоторые инструменты для автоматизации.
  • Вам нужно будет добавить данные в строки - не делайте вид, что вам это никогда не понадобится, или вы всегда сможете поставить строку в конце. Убедитесь, что у вас есть настройка форматирования строки для замены заполнителей в строках. Кроме того, не забудьте документировать типичные значения, которые будут заменены для переводчиков. Помните, что порядок заполнения может меняться на разных языках.
  • Назовите ваши строковые переменные i8n так, чтобы они отражали их значение . Вы действительно хотите искать цифры в файле ресурсов, чтобы выяснить, что является содержимым данной строки. Разработчики полагаются на то, что умение читать строковый вывод в коде для большей эффективности, чем они часто осознают.
  • Не бойтесь генерации кода . В моем текущем проекте я написал небольшую Java-программу, вызываемую ant, которая анализирует все ключи файла ресурсов языка (master) по умолчанию и затем сопоставляет ключ с константой, определенной в моем классе локализации. Увидеть ниже. Строки между комментариями // ---- генерируются автоматически. Я запускаю генератор каждый раз, когда добавляю строку.

<code>
public final class l7d {
...normal junk</p>

<p>/**
 * Reference to the localized strings resource bundle.
 */
public static final ResourceBundle l7dBundle =
        ResourceBundle.getBundle(BUNDLE_PATH);</p>

<p>//---- start l7d fields ----\
public static final String ERROR_AuthenticationException;
public static final String ERROR_cannot_find_algorithm;
public static final String ERROR_invalid_context;
...many more
//---- end l7d fields ----\
static {<br>
    //---- start setting l7d fields ----\
    ERROR_AuthenticationException = l7dBundle.getString("ERROR_AuthenticationException");
    ERROR_cannot_find_algorithm = l7dBundle.getString("ERROR_cannot_find_algorithm");
    ERROR_invalid_context = l7dBundle.getString("ERROR_invalid_context");
    ...many more
    //---- end setting l7d fields ----\
}

Подход выше предлагает несколько преимуществ.

  1. Поскольку ваш строковый ключ теперь определен как поле, ваша IDE должна поддерживать завершение кода для него. Это сэкономит вам много типа. Это действительно расстраивает поиск каждого ключевого имени и исправление опечаток каждый раз, когда вы хотите напечатать строку.
  2. Кто-нибудь, пожалуйста, поправьте меня, если я ошибаюсь. Загрузка всех строк в память при статическом создании (как в примере) приведет к более быстрому времени загрузки за счет использования дополнительной памяти. Я обнаружил, что дополнительный объем используемой памяти незначителен и стоит компромисса.
2 голосов
/ 10 октября 2008

Мы не только использовали базу данных вместо хваленых файлов ресурсов (я никогда не понимал, почему люди используют что-то подобное, что очень трудно управлять, когда у нас есть такие хорошие инструменты для работы с базами данных), но мы также избегали необходимость помечать вещи в приложении (забывать помечать элементы управления числами в формах VB6 всегда было проблемой), используя рефлексию для определения элементов управления для перевода. Затем мы используем файл XML, который переводит элементы управления в идентификаторы фраз из базы данных словаря.

Хотя файлом сопоставления нужно было управлять, им все равно можно было управлять независимо от процесса сборки, и перевод приложения был фактически возможен конечными пользователями, которые имели права на базу данных.

2 голосов
/ 10 октября 2008

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

Если базы данных нет, я помещаю каждый язык в отдельный файл, чтобы уменьшить проблемы с управлением версиями. Но структура в основном та же самая - каждая строка имеет идентификатор.

-Adam

2 голосов
/ 10 октября 2008

В локализованных проектах, над которыми я работал, были даты «замораживания строк». По истечении этого времени единственный способ изменения строк был разрешен только с разрешения одного из старших членов команды управления проектом.

Это не совсем идеальное решение, но оно позволило нам приостановить дефекты, касающиеся строк, до следующего выпуска по уважительной причине. После того, как произошло замораживание строки, у вас также есть веская причина отрицать добавление в проект новых функций, связанных с решениями «мгновенного». А получение разрешения от высшего звена означало, что менеджеры среднего звена не будут иметь права изменять спецификации на вашем:)

1 голос
/ 07 февраля 2009

Эта книга Google - Управление файлами ресурсов дает несколько полезных советов

Вы можете использовать программное обеспечение Resource File Management, чтобы отслеживать строки, которые изменились, и контролировать рабочий процесс для их перевода - в противном случае вы получите путаницу зависаний и властный контроль версий

Некоторые инструменты, которые делают подобные вещи - нет связи, я на самом деле их не использовал, просто исследую

http://www.sisulizer.com/

http://www.translationzone.com/en/products/

1 голос
/ 10 октября 2008

Я поставил цель make-файла, которая находит все файлы .properties и помещает их в zip-файл для отправки переводчикам. Я предложил прислать им только разности, но по какой-то причине они хотят каждый раз целую пачку файлов. Я думаю, что у них есть своя собственная система для отслеживания только различий, потому что они взимают с нас плату в зависимости от того, сколько строк менялось от одного раза к другому. Когда я получаю их обратно, я вручную проверяю все их файлы с предыдущей доставкой, чтобы увидеть, изменилось ли что-нибудь неожиданное - один раз все строки PT_BR (бразильский португальский) изменились, и оказалось, что они использовали PT_PT (португальский португальский) ) переводчик для этой партии, несмотря на заказ для PT_BR.

1 голос
/ 10 октября 2008

Решение, к которому мы пришли, состоит в том, чтобы в Excel было небольшое приложение, которое считывает все файлы свойств, а затем показывает матрицу со всеми переводами (языки в качестве заголовков, ключи в виде строк). Совершенно очевидно, чего не хватает тогда. Это отправить переводчикам. Когда он возвращается, лист может быть обработан для генерации тех же пакетов свойств обратно. Пока что это немного ослабило боль, но мне интересно, что еще вокруг.

0 голосов
/ 28 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...