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

Как вы управляете процессом перевода строк?

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

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

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

EDIT: мы используем Java, и все строки интернационализированы с использованием Resource Bundles, поэтому проблема заключается не в интернационализации, а в управлении строками.

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

Ответ 3

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

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


public final class l7d {
...normal junk

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

//---- 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 {
//---- 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 ----\ }

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

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

Ответ 4

Локализованные проекты, над которыми я работал, имеют даты "замораживания строки". По прошествии этого времени единственным способом изменения строк было разрешение с очень старшего члена команды по управлению проектами.

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

Ответ 5

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

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

-Adam

Ответ 6

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

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

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

http://www.sisulizer.com/

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

Ответ 10

В Java интернационализация выполняется путем перемещения строк в пакеты ресурсов... процесс перевода еще длинный и сложный, но, по крайней мере, он отделен от процесса создания программного обеспечения, выпускает пакеты обновлений и т.д. Одна вещь, которая помогает состоит в том, чтобы иметь систему CI, которая переупаковывает все изменения времени. Мы можем протестировать и протестировать новую версию в течение нескольких минут, изменится ли это код, новый языковой пакет или и то, и другое.

Ответ 11

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