Должен ли я использовать gettext для этого вместо этого? - PullRequest
0 голосов
/ 16 октября 2011

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

-

message.body = 'Dear '+ad.name+'\nThank you for registering with '+self.current_logo+'! To edit your ad,click edit from the menu.'+ self.current_logo+'/vi/'+ad.key().id() +'\nWe invite you to visit our home page where you can find latest information on new business announcements from us. From there you also can upload videos, music and images. \n1) Contact Preferences - Please Select Your Contact Preferences\nInformation Contact\nIf you like, you can also add us on Facebook: apps.facebook.com/koolbusiness'

- Результат, например, когда мы добавили домен, а затем использовали марку / логотип:

---------- Пересланное сообщение ---------- От: Дата: Солнце, 16 октября 2011 года в 19:29 Тема: Honda Zoomer To: fridge @ koolbusiness.com

Уважаемый Niklas R Спасибо за регистрацию на www.koolbusiness.com!Чтобы отредактировать свое объявление, нажмите «Изменить» в меню.www.koolbusiness.com/vi/4361186 Мы приглашаем вас посетить нашу домашнюю страницу, где вы можете найти самую свежую информацию о наших новых бизнес-объявлениях от нас.Оттуда вы также можете загружать видео, музыку и изображения.1) Настройки контактов - Пожалуйста, выберите свои настройки контактов. Информация Контакт. Если хотите, вы также можете добавить нас на Facebook: apps.facebook.com/koolbusiness


Что вы думаете?

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

Обновление

Так как gettext, кажется, является выбором, меня интересует реализация.В частности, 2 вещи касались того, включать ли HTML и как отображать специальный символ, такой как амперсанд.Я в настоящее время использую это, что делает правильный вывод, но правильный ли код?

django.po

msgid "Accessories & Parts"
msgstr "Partes & Acessórios"

msgid "Entire Brasil"
msgstr "«Todo Brasil»"

msgid "You can post ads for free. You can search for classified advertisements from professionals as well as private individuals; such as: cars, property, employment, pieces of furniture, electronics and others."
msgstr "<a href='/ai'>Anúncios</a> no site Montao.com.br são colocados manualmente pelo usuário aqui. <br/><a href='/li'>Todos</a> os anúncios são revistos pela equipe do Montao.com.br. O anúncio será visível durante dois messes. Grátis!"

Для нового перевода электронной почты я мог бы использовать gettext, но я должен получить обапеременные и перевод правильный, и это может быть сложно, но в любом случае я пытаюсь начать набросок, чтобы он мог быть локализован на многие языки:

msgid "Dear %s\nThank you for registering with %s! To edit your ad,click edit from the menu.%s/vi/%s \nWe invite you to visit our home page where you can find latest information on new business announcements from us. From there you also can upload videos, music and images. \n1) Contact Preferences - Please Select Your Contact Preferences\nInformation Contact\nIf you like, you can also add us on Facebook: apps.facebook.com/koolbusiness"
msgstr ""

Однако мой опыт говорит, что гораздо лучше сделать 2Задания cron, по одному для каждого перевода, чем одно задание cron для многих переводов, поскольку запрос может случайно получить неправильный файл cookie из-за совместного использования файлов cookie или аналогичным образом.Таким образом, эта задача перевода также для полноты и согласованности, хотя первая попытка работает для английского языка и легко расширяется на 2 языка, и я думаю, что хорошо иметь полную локализацию с помощью gettext.

1 Ответ

1 голос
/ 17 октября 2011

Конечно, gettext - лучшее решение, если вам нужна локализация (просто не забудьте использовать заполнители вместо конкатенации строк, как вы делали в вашем примере).

Что касается белой маркировки, если ВСЕ контент, зависящий от клиента, также можно локализовать, то с gettext все будет в порядке - вы попали двумя птицами одним камнем, плюс gettext несколько стандартен, поэтому все инструменты локализации и профессионалы будут работать без проблем. Однако, я предполагаю, что есть вещи, которые на самом деле не локализуемы (например, изображения), поэтому я предлагаю вам сохранить какую-то заранее определенную структуру для такого контента, чтобы каждый клиент мог вставить свой контент, не касаясь кода (например, Логотип всегда называется Logo.png, с фиксированным размером).

Распространенной практикой является сохранение значения msgid в файлах .po равным тексту на исходном языке, и это хорошо работает для коротких простых предложений. Если у вас длинные предложения со специальными символами и HTML или другими тегами, я бы предложил использовать идентификатор, такой как «result_message», а затем вручную заполнить основной файл ресурсов (например, для английского). Это делает файл немного менее самоописуемым и требует немного больше усилий, но в долгосрочной перспективе это лучшее решение, если вы хотите оставаться в здравом уме (и сохранять файлы ресурсов как можно меньше).

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

...