Как правильно закодить локализуемые строки
В прошлую субботу был на митапе про Python от сообщества PyNSK. После докладов обсуждали, как закодить строки в интерфейсе, чтобы хорошо переводить их на другие языки. В каждом языке есть свои инструменты, расскажу про общие принципы.
Общий принцип номер один: предложения переводятся целиком, поэтому и в коде они должны быть целиком.
Например, в интерфейсе есть такая строка:
Здесь есть имя пользователя, его нужно подставить в шаблон. Наивный программист напишет так:
Переводчик получит только строку в кавычках и перведёт, как сможет:
Это звучит ужасно, поэтому переводчик может поменять смысл в угоду грамматике:
Это ещё хуже, потому что текст адресован не владельцу учётной записи.
Как правильно
В коде всё предложение должно быть одной строкой-шаблоном:
Теперь переводчик сможет поставить переменную в нужное место:
—
—
—
Одно предложение = одна строка-шаблон
#l10n_docops
---
Если вы давно это знали или просто хорошо разбираетесь в локализации — заходите в чат @docsascode, поделитесь опытом и болью.
На фото — доска после обсуждения на митапе. На ней есть кусочки двух ещё не опубликованных постов. 😉
В прошлую субботу был на митапе про Python от сообщества PyNSK. После докладов обсуждали, как закодить строки в интерфейсе, чтобы хорошо переводить их на другие языки. В каждом языке есть свои инструменты, расскажу про общие принципы.
Общий принцип номер один: предложения переводятся целиком, поэтому и в коде они должны быть целиком.
Например, в интерфейсе есть такая строка:
Nick's account is suspended
Здесь есть имя пользователя, его нужно подставить в шаблон. Наивный программист напишет так:
user + "'s account was suspended"
Переводчик получит только строку в кавычках и перведёт, как сможет:
Nick учётная запись заблокирована
Это звучит ужасно, поэтому переводчик может поменять смысл в угоду грамматике:
Nick, ваша учётная запись заблокирована
Это ещё хуже, потому что текст адресован не владельцу учётной записи.
Как правильно
В коде всё предложение должно быть одной строкой-шаблоном:
"{name}'s account is suspended".format(name=user)
Теперь переводчик сможет поставить переменную в нужное место:
—
"Учётная запись {name} заблокирована"
—
"Cuirtear cuntas {name} ar fionraí"
—
"គណនីរបស់ {name} ត្រូវបានផ្អាក"
Одно предложение = одна строка-шаблон
#l10n_docops
---
Если вы давно это знали или просто хорошо разбираетесь в локализации — заходите в чат @docsascode, поделитесь опытом и болью.
На фото — доска после обсуждения на митапе. На ней есть кусочки двух ещё не опубликованных постов. 😉