Часто задаваемые вопросы

Конфигурация

Как создать автоматизированный рабочий процесс?

Weblate может выполнить все действия, связанные с переводом, в полуавтоматическом режиме. Если вы дадите ему доступ на отправку изменений в ваш репозиторий, переводы смогут в нём появляться без запроса подтверждения, если только не возникнут конфликты слияния.

  1. Настройте свой Git-репозиторий так, чтобы он сообщал Weblate, когда происходят какие-либо изменения; для получения информации о том, как это сделать, смотрите раздел Обработчики уведомлений.

  2. В конфигурации вашего компонента установите URL для отправки, это позволит Weblate’у отправлять изменения в ваш репозиторий.

  3. В конфигурации вашего компонента включите отправку-при-коммите, это заставит Weblate отправлять изменения в ваш репозиторий всякий раз, когда они происходят в Weblate.

Как получить доступ к репозиториям по SSH?

Информацию о настройке SSH-ключей смотрите в разделе Доступ к репозиториям.

Как исправить в переводах конфликты слияния?

Время от времени, когда файл перевода изменяется одновременно и в Weblate, и в вышестоящем репозитории, происходят конфликты слияния. Обычно этого можно избежать, влив переводы из Weblate до внесения изменений в файлы перевода (например, перед запуском msgmerge). Просто скажите Weblate закоммитить все отложенные переводы (вы можете сделать это в подпункте Обслуживание репозитория меню Управлять) и влейте их в репозиторий (если не включена автоматическая отправка).

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

Примечание

В зависимости от ваших настроек, доступ к репозиторию Weblate может потребовать аутентификации. При использовании встроенного в Weblate экспортера в Git вы аутентифицируетесь с помощью своего имени пользователя и ключа API.

# Commit all pending changes in Weblate, you can do this in the UI as well:
wlc commit
# Lock the translation in Weblate, again this can be done in the UI as well:
wlc lock
# Add Weblate as remote:
git remote add weblate https://hosted.weblate.org/git/project/component/
# You might need to include credentials in some cases:
git remote add weblate https://username:APIKEY@hosted.weblate.org/git/project/component/

# Update weblate remote:
git remote update weblate

# Merge Weblate changes:
git merge weblate/main

# Resolve conflicts:
edit …
git add …
…
git commit

# Push changes to upstream repository, Weblate will fetch merge from there:
git push

# Open Weblate for translation:
wlc unlock

Если вы используете в Weblate несколько ветвей, то же самое вы можете сделать со всеми ними:

# Add and update Weblate remotes
git remote add weblate-one https://hosted.weblate.org/git/project/one/
git remote add weblate-second https://hosted.weblate.org/git/project/second/
git remote update weblate-one weblate-second

# Merge QA_4_7 branch:
git checkout QA_4_7
git merge weblate-one/QA_4_7
... # Resolve conflicts
git commit

# Merge main branch:
git checkout main
git merge weblates-second/main
... # Resolve conflicts
git commit

# Push changes to the upstream repository, Weblate will fetch the merge from there:
git push

В случае использования файлов PO gettext’а существует способ полуавтоматического исправления конфликтов:

Извлеките и сохраните локальный клон Git-репозитория Weblate. Также возьмите второй свежий локальный клон вышестоящего Git-репозитория (то есть, вам нужно две копии вышестоящего Git-репозитория: нетронутая и рабочая):

# Add remote:
git remote add weblate /path/to/weblate/snapshot/

# Update Weblate remote:
git remote update weblate

# Merge Weblate changes:
git merge weblate/main

# Resolve conflicts in the PO files:
for PO in `find . -name '*.po'` ; do
    msgcat --use-first /path/to/weblate/snapshot/$PO\
               /path/to/upstream/snapshot/$PO -o $PO.merge
    msgmerge --previous --lang=${PO%.po} $PO.merge domain.pot -o $PO
    rm $PO.merge
    git add $PO
done
git commit

# Push changes to the upstream repository, Weblate will fetch merge from there:
git push

Как мне сразу перевести несколько веток?

Weblate поддерживает одновременную отправку изменений перевода внутри одного проекта. В каждом компоненте, в котором она включена (это поведение по умолчанию), внесённое изменение автоматически вносится и в прочие компоненты. Таким образом, переводы остаются синхронизированными, даже если сами ветки уже достаточно сильно разошлись, и простое объединение изменений перевода между ними невозможно.

После вливания изменений из Weblate, вам, возможно, придётся объединить эти ветви (в зависимости от вашего рабочего процесса разработки) для устранения различий:

git merge -s ours origin/maintenance

Как переводить многоплатформенные проекты?

Weblate поддерживает широкий диапазон форматов файлов (смотрите раздел Поддерживаемые форматы файлов) и самым простым подходом является использование родного формата для каждой платформы.

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

Как экспортировать используемый Weblate репозиторий Git?

Репозиторий ничем таким не выделяется, он живёт в каталоге DATA_DIR и называется vcs/<проект>/<компонент>/. Если у вас есть SSH-доступ к этой машине, вы можете работать с репозиторием напрямую.

Для анонимного доступа вы можете запустить Git-сервер и позволить ему открыть репозиторий во внешний мир.

В качестве альтернативы вы можете использовать Экспортер Git изнутри Weblate для автоматизации этого процесса.

Какие есть способы для отправки изменений в вышестоящий репозиторий?

В значительной степени это зависит от вашей установки, в этом плане Weblate достаточно гибок. Вот несколько примеров используемых с Weblate’ом рабочих процессов:

  • Weblate автоматически отправляет и вливает изменения (смотрите раздел Как создать автоматизированный рабочий процесс?).

  • Вы вручную приказываете Weblate отправить изменения (ему нужны права доступа на отправку изменений в вышестоящий репозиторий).

  • Кто-то вручную вливает изменения из git-репозитория Weblate в вышестоящий репозиторий.

  • Кто-то переписывает созданную Weblate историю (например, устраняя коммиты слияния), объединяет изменения и приказывает Weblate’у сбросить содержимое в вышестоящий репозиторий.

Конечно, вы можете смешивать все эти рабочие процессы по своему усмотрению.

Как мне ограничить Weblate доступом только к переводам, не раскрывая ему при этом исходный код?

Для отделения переводов от исходного кода вы можете использовать подмодули git, при этом вы по-прежнему держите их под контролем версий.

  1. Создайте репозиторий с вашими файлами перевода.

  2. Добавьте его в качестве подмодуля к своему коду:

    git submodule add git@example.com:project-translations.git path/to/translations
    
  3. Свяжите Weblate с этим репозиторием, ему больше не нужен доступ к репозиторию, содержащему ваш исходный код.

  4. Вы можете обновлять основной репозиторий переводами из Weblate, выполняя команду:

    git submodule update --remote path/to/translations
    

Для получения более подробной информации обратитесь к документации по подмодулям git.

Как мне проверить, правильно ли настроен мой Weblate?

Weblate включает в себя набор проверок конфигурации, которые можно посмотреть, перейдите по ссылке Отчёт о производительности в интерфейсе администратора, или напрямую откройте адрес /manage/performance/.

Почему все коммиты от имени Weblate имеют электронную почту <noreply@weblate.org>?

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

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

How to move files in the repository without losing history in Weblate?

To keep the history, comments, or screenshots linked to strings after changing the files location you need to ensure that these strings are never deleted in Weblate. These removals can happen in case the Weblate repository is updated, but the component configuration still points to the old files. This makes Weblate assume that it should delete all the translations.

The solution to this is to perform the operation in sync with Weblate:

  1. Lock the affected component in Weblate.

  2. Commit any pending changes and merge them into the upstream repository.

  3. Disable receiving webhooks the Настройки проекта; this prevents Weblate from immediately seeing changes in the repository.

  4. Do any needed changes in the repo (for example using git mv), push them to the upstream repository.

  5. Change the Настройки компонента to match the new setup; upon changing configuration, Weblate will fetch the updated repository and notice the changed locations while keeping existing strings.

  6. Unlock the component and re-enable hooks in the project configuration.

Использование

Как мне отрецензировать переводы других переводчиков?

  • В Weblate доступно на выбор несколько вариантов рабочего процесса, основанные на рецензировании, смотреть раздел Рабочие процессы перевода.

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

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

Как мне предоставить обратную связь по исходной строке?

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

Как я могу использовать при переводе уже существующие переводы?

  • Благодаря разделяемой памяти переводов могут быть использованы все переводы, загруженные в Weblate.

  • Вы можете импортировать в Weblate свою уже существующую память переводов из файлов.

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

  • Вы можете настроить tmserver со всеми имеющимися у вас базами данных и позволить Weblate’у его использовать. Это хороший вариант, если вы хотите использовать его при переводе несколько раз.

  • Другим вариантом является перенос всех связанных проектов на один экземпляр Weblate, что позволит автоматически подбирать переводы из других проектов.

Обновляет ли Weblate помимо самих переводов также и файлы перевода?

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

Откуда берутся определения языка и как я могу добавить свои собственные определения?

Базовый набор определений языка входит в состав Weblate и Translate-toolkit. Он охватывает более 150 языков и включает информацию о множественных формах или направлении текста.

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

Может ли Weblate подсветить изменения в строке «на правку»?

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

К примеру, для PO-файлов Gettext при обновлении PO-файлов необходимо в вызов команды msgmerge передать параметр --previous:

msgmerge --previous -U po/cs.po po/phpmyadmin.pot

Для одноязычных переводов Weblate может найти предыдущую строку по её идентификатору, поэтому различия он показывает автоматически.

Почему Weblate до сих пор показывает старые строки перевода, хотя я уже обновил шаблон?

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

Примечание

Обычно перед обновлением файлов перевода полезно влить изменения, сделанные в Weblate, в основной репозиторий, так как в противном случае вы, вероятно, столкнётесь с некоторыми конфликтами при слиянии.

Например, если вы используете PO-файлы gettext, вы можете обновить файлы перевода с помощью инструмента msgmerge:

msgmerge -U locale/cs/LC_MESSAGES/django.mo locale/django.pot

В случае, если вы хотите выполнять такое обновление автоматически, вы можете установить надстройку Обновлять PO-файлы до соответствия POT (msgmerge).

Решение проблем

Запросы иногда завершаются с ошибкой «слишком много открытых файлов» (“too many open files”)

Такое иногда случается, когда ваш Git-репозиторий слишком разрастается и у вас их очень много. Сжатие Git-репозиториев улучшит эту ситуацию.

Простейший способ это сделать — запустить следующий скрипт:

# Go to DATA_DIR directory
cd data/vcs
# Compress all Git repositories
for d in */* ; do
    pushd $d
    git gc
    popd
done

См.также

DATA_DIR

При доступе к сайту я получаю ошибку «Плохой запрос (400)» (“Bad Request (400)”)

Скорее всего это вызвано неправильной настройкой параметра ALLOWED_HOSTS. Он должен содержать все имена хостов, с которых вы хотите получать доступ к вашему Weblate’у. Например:

ALLOWED_HOSTS = ["weblate.example.com", "weblate", "localhost"]

Что означает сообщение «Есть больше файлов для одного языка (en)»?

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

  • В случае необходимости перевода на исходный язык в настройках компонента необходимо изменить параметр Исходный язык.

  • Если файл перевода для исходного языка не нужен, пожалуйста, удалите его из репозитория.

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

Подсказка

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

Это может быть вызвано тем, что используются устаревшие коды языков одновременно с новыми (ja и jp для японского) или используется одновременно код, привязанный к стране, и основной (ru и ru_RU). Смотрите подробности в разделе «Разбор кодов языков».

Возможности

Поддерживает ли Weblate другие системы контроля версий, кроме Git и Mercurial?

В настоящее время Weblate не имеет родной поддержки ни для чего, кроме Git (с расширенной поддержкой GitHub, Gerrit и Subversion) и Mercurial, но вполне возможно дописать поддержку и других систем контроля версий.

Также для доступа к другим системам контроля версий вы можете использовать Удалённые помощники Git в Git’е .

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

Примечание

Для родной поддержки других систем контроля версий Weblate требует использования распределённых СКВ, и, вероятно, может быть настроен на работу с любой системой, помимо Git или Mercurial, но кто-то должен эту поддержку реализовать.

Как Weblate сообщает о том, кто какую строку перевёл?

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

Кроме того, если формат файла перевода это поддерживает, он обновляет заголовки файлов и включает в них имя переводчика.

Почему Weblate принудительно показывает все PO-файлы в одном дереве?

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

Изменено в версии 4.2: Переводчики могут переводить все компоненты одного проекта на один конкретный язык как единое целое.

Почему Weblate использует такие коды языков, как sr_Latn или zh_Hant?

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

Weblate по-прежнему понимает старые коды языков и сопоставляет их с текущими — например, sr@latin будет обрабатываться как sr_Latn, а zh@CN — как zh_Hans.

Примечание

Weblate по умолчанию использует коды языков в стиле POSIX с подчёркиванием, подробнее см. в Определение языков.