Подтвердить что ты не робот

Почему люди используют простой английский в качестве переводчиков?

Это может быть глупый вопрос, но здесь идет.

Я видел несколько проектов, используя некоторую библиотеку перевода (например, gettext), работающую с обычными английскими заполнителями. Так, например:

_("Please enter your name");

вместо абстрактных заполнителей (которые всегда были моими инстинктивными предпочтениями)

_("error_please_enter_name");

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

Разве это не ужасно громоздко? Почему это отраслевой стандарт?

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

4b9b3361

Ответ 1

Да, вам нужно изменить существующие файлы переводов, и это хорошо.

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

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

Ответ 2

  • Основной язык уже существует: вам не нужно его переводить.
  • Переводчики имеют лучший контекст с реальным предложением, чем туманные заполнители.
  • Заполнители - это только ключи, все же можно изменить исходный язык, создав для него перевод. Потому что, когда перевод не существует, он использует заполнитель в качестве переведенного текста.

Ответ 3

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

Таким образом, моя причина была бы менее эффективной для разработчиков.

Ответ 4

Мне нравится ваш второй подход. При переводе текстов у вас всегда возникает проблема омонимов. Подобно "открытому", это может означать состояние окна, но также и глагол для выполнения действия. На других языках эти омонимы могут отсутствовать. Вот почему вы должны иметь возможность добавлять значение к своим заполнителям. Лучший подход заключается в том, чтобы поместить это значение в вашу текстовую библиотеку. Если это невозможно на платформе, которую вы используете, может быть хорошей идеей определить "язык разработки". Этот язык добавит смысл в текстовые записи, такие как: "action_open" и "state_open". вы обязательно должны приложить дополнительные усилия, чтобы я перевел этот язык на простой английский (или язык, на котором вы разрабатываете). Я поставил эту философию в некоторые крупные проекты, и в конечном итоге это экономит некоторое время (и головные боли).

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

_(i18n("Please enter your name", "error_please_enter_name"));

Где:

i18n(text, meaning)

Ответ 5

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

Ответ 6

Довольно старый вопрос, но еще одна причина, которую я еще не видел в ответах:

Вы можете получить больше заполнителей, чем необходимо, тем самым больше работайте с переводчиками и возможными несогласованными переводами. Тем не менее, хорошие редакторы, такие как Poedit или Gtranslator, возможно, помогут в этом.

Чтобы придерживаться вашего примера: Текст "Пожалуйста, введите свое имя" может отображаться в другом контексте в другом шаблоне (который разработчик, скорее всего, не знает и не должен быть). Например. его можно использовать не как ошибку, а как подсказку, как заполнитель поля ввода.

Если вы используете

_("Please enter your name");

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

Однако, если вы использовали

_("error_please_enter_name");

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

_("prompt_please_enter_name");

который затем должен быть переведен снова.

Поэтому я думаю, что это не очень хорошо масштабируется. Предварительно согласованная схема формулировок суффиксов/префиксов, например. поскольку контексты никогда не могут быть такими точными, как сам текст, который я думаю (либо слишком подробный, либо слишком общий, заранее вы не знаете, а потом его трудно изменить) и больше работы для разработчика, который не стоит ИМХО.

Кто-нибудь согласен/не согласен?

Ответ 7

Там исходная иерархия, от наиболее специфической локали к нелокализованной версии в исходном коде.

Таким образом, французский во Франции может иметь следующий резервный маршрут:

  • fr_FR
  • фр
  • нелокализованной. Исходный код.

В результате правильные английские предложения в исходном коде гарантируют, что если конкретный перевод не предусмотрен в шаге (1) или (2), вы, по крайней мере, получите правильное понятное предложение, чем случайный мусор программиста, например, ERROR_FILE_NOT_FOUND".

Плюс, что вы делаете, если это строка формата: "Извините, но% s не существует"? Хуже всего: "Написанные записи% s в% s, общий размер:% d"?

Ответ 8

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