Як перекладати .po файли без пошкодження змінних коду (%s, HTML)

Все починається з простого завдання: ви перекладаєте свою тему WordPress на іспанську мову. Ви завантажуєте файл .mo, оновлюєте свій сайт і...
Fatal error: Uncaught ArgumentCountError: Too few arguments to function sprintf()...
Або, можливо, ваш сайт завантажується, але макет зруйнований, тому що закриваючий тег </div> було перекладено як </ div>.
Це найбільший страх кожного розробника, який працює з локалізацією. Коли ви використовуєте загальні інструменти перекладу (наприклад, Google Translate або базові AI-обгортки) для технічних файлів .po, вони не розглядають код інакше, ніж текст. Вони намагаються "перекласти" ваші змінні, і таким чином ламають ваш веб-сайт.
У цьому посібнику ми пояснимо, чому саме це відбувається і як забезпечити 100% безпеку коду у ваших автоматизованих перекладах.
Анатомія катастрофи: Чому %s ламає сайти
WordPress використовує систему Gettext і PHP-функції, такі як sprintf(), для обробки динамічного тексту.
Наприклад, у вас може бути рядок, подібний до цього:
msgid "Search results for %s"
%s — це змінна-заповнювач, куди PHP вставлятиме пошуковий запит користувача.
Як загальний ШІ помиляється
Коли ви передаєте цей рядок у стандартну велику мовну модель (LLM) або API перекладу, він бачить %s як просто ще одне дивне слово. Він може спробувати виправити граматику або пунктуацію навколо нього.
Ось найпоширеніші синтаксичні помилки, які ми бачимо:
-
Доданий пробіл:
- Оригінал:
Hello %s - Поганий переклад:
Hola % s - Результат: PHP шукає
%s, але бачить% s. Змінна не завантажується, часто викликаючи фатальну помилку.
- Оригінал:
-
HTML-галюцинація:
- Оригінал:
Click <strong>here</strong> to login. - Поганий переклад:
Haga clic <strong>aquí</ strong> para iniciar sesión. - Результат: ШІ додав пробіл всередині закриваючого тегу
</ strong>. Ваш CSS ламається, і решта сторінки стає жирною.
- Оригінал:
-
Перестановка аргументів:
- Оригінал:
Page %1$s of %2$s - Поганий переклад:
Página %2$s de %1$s - Результат: ШІ вирішив, що речення звучало б краще, якби числа були переставлені. Тепер ваша пагінація говорить "Сторінка 10 з 1".
- Оригінал:
Пастка "Ручного виправлення"
Більшість розробників намагаються вирішити цю проблему, переглядаючи файл вручну. Якщо у вас невеликий плагін із 50 рядками, це нормально. Але якщо ви перекладаєте магазин WooCommerce з 5000 рядками?
Сканування 5000 рядків коду на предмет однієї пропущеної крапки з комою або зайвого пробілу всередині змінної %s неможливе. Це займає години, і людське око неминуче щось пропустить.
Regex (Регулярні вирази) можуть допомогти перевірити наявність, але вони рідко виявляють проблеми з перевпорядкуванням, специфічні для контексту, або незначне пошкодження атрибутів HTML.
Рішення: "Блокування синтаксису"
Єдиний спосіб безпечно перекласти файл .po — це запобігти тому, щоб ШІ взагалі торкався коду. Це вимагає процесу під назвою Блокування синтаксису.
Це основна технологія, що лежить в основі SimplePoTranslate.
На відміну від загальних інструментів, ми не просто скидаємо текст у ШІ. Ми спочатку аналізуємо структуру Gettext. Ось як працює наш "Безпечний режим":
- Аналіз: Ми скануємо ваш файл
.poта ідентифікуємо кожну змінну (%s,%d), кожен позиційний аргумент (%1$s) та кожен HTML-тег (<br/>,<span>). - Вилучення та блокування: Ми тимчасово видаляємо ці елементи з рядка та замінюємо їх незмінними токенами.
- Вхід:
Hello <strong>%s</strong> - Що бачить ШІ:
Hello [TOKEN_1][TOKEN_2]
- Вхід:
- Переклад: ШІ перекладає текст "Hello" на "Hola", але він не може фізично змінити
[TOKEN_1]або[TOKEN_2], оскільки вони заблоковані. - Реконструкція: Ми повторно вставляємо оригінальний код у перекладений рядок точно там, де він належить.
Результат: Нуль зламаних сайтів
Оскільки ШІ ніколи не взаємодіє з фактичними символами %s або HTML, математично неможливо, щоб механізм перекладу додав пробіл всередині змінної або пошкодив тег.
Ми навіть обробляємо складні правила плюралізації (msgid_plural) для таких мов, як російська чи польська, забезпечуючи використання правильної змінної для правильної кількості.
Припиніть ризикувати своїм кодом
Вам не варто схрещувати пальці щоразу, коли ви завантажуєте мовний файл. Локалізація має бути про охоплення нових клієнтів, а не про налагодження помилок PHP.
SimplePoTranslate — це найбезпечніший і найсучасніший хмарний інструмент для розробників, які піклуються про цілісність коду.
- Хмарний: Не потрібно встановлювати плагіни.
- Контекстно-залежний: Використовує ШІ класу Gemini/GPT-4 для природного формулювання.
- Синтаксис заблоковано: Гарантований захист для ваших змінних.
Готові перекладати без головного болю? Почніть безкоштовно на SimplePoTranslate.com