Skip to main content

Непрекъсната локализация без TMS

Вашият код се внедрява непрекъснато. Преводите Ви също трябва да се обновяват непрекъснато. Ето как да автоматизирате локализацията в процеса си на разработка.

Какво представлява непрекъснатата локализация?

Непрекъснатата локализация е практика, при която новите текстове се превеждат автоматично като част от процеса на разработка, вместо преводите да се събират на партиди за периодични версии. Когато разработчик добави нова функционалност с текстове за интерфейса, те се превеждат преди пускането ѝ.

Традиционният подход

Повечето екипи обработват преводите на партиди: събират новите текстове, експортират ги в TMS, изчакват преводачите, импортират резултатите и едва тогава пускат версията. Така локализацията се превръща в тясно място, което забавя версиите за международните пазари с дни или седмици.

1

Разработчикът добавя нови текстове във файла на изходната езикова версия

2

Текстовете се експортират и качват в TMS платформа

3

Преводачите получават известие и започват работа

4

Преводите се проверяват и одобряват

5

Преведените файлове се свалят и обединяват обратно с проекта

6

Функционалността се пуска с преводите дни или седмици по-късно

Days to weeks

Подходът с превод директно в IDE

При превод директно в IDE разработчикът превежда текстовете като част от обичайния процес на програмиране. Без експортиране, без качване и без чакане — преводите се създават в същата работна сесия като разработката.

1

Разработчикът добавя нови текстове във файла на изходната езикова версия

2

Разработчикът иска от своя AI асистент да преведе файла

3

Преведените файлове се записват директно в проекта

4

Функционалността се пуска с преводите в същия commit

Same commit

Традиционният подход

6 steps

Multiple tools and platforms

Days to weeks per cycle

Подходът с превод директно в IDE

4 steps

Inside your editor

Same commit

3

Настройте процеса си за превод

Ако екипът Ви иска автоматизиран превод и извън IDE, добавете CI/CD стъпка, която превежда новите или променените текстове при всяко изпращане към main. Това работи с GitHub Actions, GitLab CI и всяка друга CI/CD система.

За малки екипи започнете с превод директно в IDE. Добавете CI/CD автоматизация, когато екипът Ви надхвърли 3-4 разработчици или когато трябва да гарантирате преводи при всяко сливане в main.

Добавете превода като стъпка в съществуващия си CI/CD процес. Той се изпълнява след успешното изграждане и преди внедряването, за да гарантира, че всяка версия включва актуални преводи.
.github/workflows/translate.yml
# .github/workflows/translate.yml
name: Translate
on:
  push:
    branches: [main]
    paths: ['locales/en/**']

jobs:
  translate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Translate changed strings
        run: |
          npx i18n-agent translate locales/en.json \
            --to de,ja,es,fr,ko,zh-Hans \
            --api-key ${{ secrets.I18N_AGENT_API_KEY }}

      - name: Commit translations
        run: |
          git config user.name "github-actions"
          git config user.email "[email protected]"
          git add locales/
          git diff --cached --quiet || git commit -m "chore: update translations"
          git push
.gitlab-ci.yml
# .gitlab-ci.yml
translate:
  stage: deploy
  only:
    changes:
      - locales/en/**
  script:
    - npx i18n-agent translate locales/en.json
        --to de,ja,es,fr --api-key $I18N_AGENT_API_KEY
    - git add locales/ && git commit -m "chore: translations" && git push
4

Добавете контрол на качеството на преводите в CI

Автоматизираните проверки във Вашия CI процес откриват липсващи преводи, повредени заместители и невалидни формати на ICU съобщения, преди да достигнат до реалната среда. Това са прости скриптове, които сравняват файла на изходната езикова версия с всички целеви версии.

Без проверка на преводите в CI липсващите преводи достигат незабелязано до реалната среда. Потребителите виждат необработени ключове като „settings.title" или празни низове вместо преведен текст. Една 5-минутна CI проверка напълно предотвратява това.
check-translations.sh
#!/bin/bash
# check-translations.sh — Run in CI to catch missing translations

SOURCE="locales/en.json"
LANGS=("de" "ja" "es" "fr")
EXIT_CODE=0

# Extract all keys from source
SOURCE_KEYS=$(jq -r '[paths(scalars)] | map(join(".")) | .[]' "$SOURCE" | sort)
SOURCE_COUNT=$(echo "$SOURCE_KEYS" | wc -l)

for lang in "${LANGS[@]}"; do
  TARGET="locales/$lang.json"
  if [ ! -f "$TARGET" ]; then
    echo "❌ Missing: $TARGET"
    EXIT_CODE=1
    continue
  fi

  TARGET_KEYS=$(jq -r '[paths(scalars)] | map(join(".")) | .[]' "$TARGET" | sort)
  MISSING=$(comm -23 <(echo "$SOURCE_KEYS") <(echo "$TARGET_KEYS"))

  if [ -n "$MISSING" ]; then
    COUNT=$(echo "$MISSING" | wc -l)
    echo "❌ $lang: $COUNT missing keys"
    echo "$MISSING" | head -5
    EXIT_CODE=1
  else
    echo "✅ $lang: all $SOURCE_COUNT keys present"
  fi
done

exit $EXIT_CODE
check-placeholders.sh
#!/bin/bash
# check-placeholders.sh — Validate placeholder consistency

SOURCE="locales/en.json"
LANGS=("de" "ja" "es")

for lang in "${LANGS[@]}"; do
  TARGET="locales/$lang.json"

  # Compare placeholders like {{name}}, {count}, %s, %d
  jq -r 'paths(scalars) as $p | [($p | join(".")), (getpath($p))]
    | @tsv' "$SOURCE" | while IFS=$'\t' read -r key value; do
    SOURCE_PH=$(echo "$value" | grep -oE '\{\{[^}]+\}\}|%[sd@]' | sort)
    TARGET_VAL=$(jq -r "getpath($(echo $key | jq -R 'split(".")'))" "$TARGET")
    TARGET_PH=$(echo "$TARGET_VAL" | grep -oE '\{\{[^}]+\}\}|%[sd@]' | sort)

    if [ "$SOURCE_PH" != "$TARGET_PH" ]; then
      echo "❌ $lang/$key: placeholder mismatch"
      echo "   Source: $SOURCE_PH"
      echo "   Target: $TARGET_PH"
    fi
  done
done

Проверявайте преводите в CI

Добавете i18n-validate към своя CI процес, за да откривате автоматично липсващи ключове, повредени заместители и проблеми с множественото число. Използвайте i18n-pseudo, за да създавате изкуствени преводи за визуални регресионни тестове.
5

Откривайте и отстранявайте разминаванията в преводите

Разминаване възниква, когато изходните текстове се променят, но преводите не се обновят. Английският текст вече гласи „Save changes", а немският все още съдържа стария текст. Откриването на разминавания сравнява времевите отметки или хешовете на съдържанието на изходните файлове и преводите.

Остарелите преводи са по-лоши от липсващите. Липсващият превод очевидно е неправилен — потребителите виждат ключ или резервен език. Остарелият превод убедително съобщава нещо невярно, което може да заблуди потребителите или да доведе до заявки към поддръжката.
detect-drift.sh
#!/bin/bash
# detect-drift.sh — Find stale translations

SOURCE="locales/en.json"
SOURCE_HASH=$(md5sum "$SOURCE" | cut -d' ' -f1)
HASH_FILE=".translation-hashes"

# Compare current source hash with stored hash
if [ -f "$HASH_FILE" ]; then
  STORED_HASH=$(grep "^en:" "$HASH_FILE" | cut -d: -f2)
  if [ "$SOURCE_HASH" != "$STORED_HASH" ]; then
    echo "⚠️  Source strings changed since last translation"
    echo "   Run translations to update all locales"

    # Show which keys changed
    git diff HEAD~1 "$SOURCE" | grep '^[+-]' | grep -v '^[+-][+-]'
  fi
fi

# Update stored hash
echo "en:$SOURCE_HASH" > "$HASH_FILE"
6

Изберете подхода си за превод

Не всяко съдържание изисква един и същ подход за превод. Текстовете и етикетите на интерфейса се превеждат отлично с AI. За рекламните текстове е подходящ AI превод с последваща човешка проверка. Правните текстове и съдържанието за съответствие с изискванията винаги трябва да се поверяват на професионални преводачи.

С AI могат да се преведат 80%+ от типичните текстове в приложенията с качество за реална употреба. Запазете човешкия превод за правни текстове, стила на марката и културно чувствително съдържание, при което нюансите са най-важни.
Cost Comparison
Translation Approach Comparison:

Content Type         | Approach          | Cost/word  | Quality
─────────────────────┼───────────────────┼────────────┼──────────
UI strings, labels   | AI/LLM            | $0.001-01  | Production
Tooltips, help text  | AI/LLM            | $0.001-01  | Production
Marketing copy       | AI + human review | $0.05-0.15 | High
Legal / compliance   | Human translator  | $0.15-0.40 | Certified
Brand voice content  | Human translator  | $0.20-0.50 | Premium
7

Git процес за преводите

Превеждайте във Вашия клон за функционалността преди сливането, а не след него. Така всяко сливане в main включва пълни преводи. Добавете проверка преди сливане, която потвърждава пълнотата на преводите за всички поддържани езикови версии.

Големите JSON файлове за езикови версии често предизвикват конфликти при сливане, когато няколко клона ги променят едновременно. Подреждайте ключовете по азбучен ред и използвайте по един ключ на ред, за да намалите размера на разликите и да улесните разрешаването на конфликтите.

Файловете с преводи се съхраняват във Вашето хранилище заедно с кода. Те се управляват чрез системата за контрол на версиите, могат да се проверяват в заявки за сливане и се внедряват чрез същия процес като всичко останало.
.gitattributes + package.json
# .gitattributes — reduce merge conflicts in locale files
locales/*.json merge=union

# Sort keys alphabetically to minimize diffs:
# package.json script:
"sort-locales": "node -e \"
  const fs = require('fs');
  const f = process.argv[1];
  const d = JSON.parse(fs.readFileSync(f));
  const s = (o) => Object.keys(o).sort().reduce((r,k) =>
    ({...r, [k]: typeof o[k]==='object' ? s(o[k]) : o[k]}), {});
  fs.writeFileSync(f, JSON.stringify(s(d), null, 2)+'\\n');
\""

Често срещани грешки

Локализация едва след разработката

Най-голямата грешка е да изчакате края на разработката, преди да превеждате. Това създава тесни места, забавя версиите и превръща преводите във второстепенна задача. Превеждайте по време на разработката, а не след нея.

Липса на проверка на преводите в CI

Без автоматизирани проверки липсващите преводи, повредените заместители и невалидните формати достигат до реалната среда. Добавете проверки за пълнота и формат към своя CI процес.

Излишна сложност с TMS

TMS е създадена за управление на работата на преводачи. Ако използвате превод с AI, допълнителната сложност на TMS може да не Ви е необходима. Започнете просто — превеждайте в IDE или CI/CD — и добавете TMS само ако трябва да управлявате човешки преводачи.

Липса на проследяване на актуалността на преводите

Без проследяване на актуалността не знаете кои преводи са остарели. Изходните текстове се променят, но старите преводи остават. Включете откриване на разминавания в работния си процес, за да намирате неактуалното съдържание.

Изпробвайте i18n Agent сега

Пуснете тук Вашия файл за превод

JSON, YAML, PO, XML, CSV, Markdown, Properties

или натиснете, за да изберете файл

Целеви езици

Не се изисква регистрацияНезабавна оценка

Често задавани въпроси