Соответствующая статья (a / an) в String.Format - PullRequest
8 голосов
/ 05 мая 2009

Я ищу культурно-чувствительный способ правильно вставить существительное в предложение при использовании соответствующей статьи (a / an). Он может использовать String.Format или что-то еще, если подходящий способ сделать это существует в другом месте.

Например:

Базовое предложение: "Вы смотрите на {0}"

Это должно иметь формат: «Вы смотрите на яйцо» или «Вы смотрите на яйцо».

В настоящее время я делаю это, вручную проверяя первый символ слова, которое нужно вставить, а затем вручную вставляя «a» или «an». Но я обеспокоен тем, что это может ограничить меня, когда приложение локализовано на другие языки.

Есть ли лучшая практика для решения этой проблемы?

РЕШЕНИЕ: Похоже, что проблема сложна до такой степени, что не существует утилиты или среды для решения этой проблемы так, как я первоначально сформулировал. Похоже, что лучшее решение (в моей ситуации) - это сохранить статью в базе данных вместе с существительным, чтобы переводчики могли иметь необходимый уровень контроля. Спасибо за все предложения!

Ответы [ 6 ]

9 голосов
/ 05 мая 2009

Проблема даже в английском, a-vs-an определяется не начальной буквой , а стартовым звуком . Вы можете сделать довольно хорошее предположение на английском языке, основываясь на начальной букве, но есть некоторые исключения (например, «час», «пользователь»).

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

За исключением этого, следующее, что лучше всего сделать, - это список общих исключений, а затем угадать остальное.


Из Википедия :

Выбор "а" или "ан" определяется скорее фонетическими правилами чем по правописанию. "An" это используется в речи, чтобы удалить неловкая гортанная остановка пауза), что в противном случае требуется между "а" и следующим словом, например "рентген" ... следующее параграфы являются правилами правописания для "an" который может быть использован, если фонетическое правило не понято.

4 голосов
/ 05 мая 2009

Помимо проблемы, отмеченной lc (час, шляпа), правила грамматики на разных языках сильно различаются. Например, многие латиноамериканские языки переключают артикли существительных, основываясь на «роде» и «числе» существительного, что иногда может быть выведено из последних нескольких символов слова, но имеет ту же проблему, что и английский ... много исключений.

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

3 голосов
/ 05 мая 2009

Во времена старых текстовых приключенческих компьютерных игр одним из способов решения этой проблемы было сделать «а», «ан», «и т. Д.» Частью действительного названия вещи. Когда в этих играх вы видите «почтовый ящик», нет интеллектуального ИИ, чтобы определить «а». Название объекта - «почтовый ящик». В некоторых играх он может сказать «вы открываете почтовый ящик», что звучит глупо, а в других он может сказать «вы открываете почтовый ящик», что означает, что было введено другое имя объекта, который будет использоваться в различных грамматических контекстах. Я предлагаю вам пойти по этому маршруту вместо того, на котором вы сейчас находитесь.

2 голосов
/ 05 мая 2009

Другие языки имеют похожие проблемы, но в разных контекстах, например, в зависимости от пола объектов или фактического количества объектов (и некоторые языки не только различают один и два объекта, но грамматика различна для одного, двух или более двух объектов на русском языке).

Чтобы использовать пример с немецкого языка:

Эквивалент «Вы смотрите на (n) X» будет:

"Du Siehst Ein X"
или "Du Siehst Eine X"
или "Du Siehst Einen X"

в зависимости от пола объекта X. А пол объекта - это то, о чем вы не можете догадаться, оно связано с именем объекта только на основе исторической традиции.

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

«Вы смотрите на объект типа X»
или "Вы смотрите на (n) X"
или "Вы смотрите на один Х"

1 голос
/ 05 мая 2009

Как это культурно чувствительно? То, что вы пытаетесь сделать only , имеет смысл на английском языке. Другие языки могут потребовать совершенно других изменений в предложении. Некоторые могут изменить существительное, некоторые могут изменить структуру предложения, некоторые могут изменить порядок слов и так далее.

То, что вы пытаетесь сделать, сломается при локализации на другие языки. Не существует автоматического способа решить эту проблему.

В качестве простого примера рассмотрим, что происходит, когда вы пытаетесь написать «{что-то}» В английском вы просто префикс слова со словом «все», и все хорошо. На французском языке вы добавляете префикс le, la или les, в зависимости от пола и от того, множественное число или нет. На датском вы вместо этого добавляете суффикс «en» или «et». Поэтому, когда слово table переводится как «борд», «стол» становится «бордет». И «стул» (stol) становится «украденным».

Единственный значимый способ обойти это - дать переводчику контроль над целым предложением. Не думайте, что вы можете просто вставить несколько зависимых от культуры слов тут и там.

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

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

0 голосов
/ 05 мая 2009

Существует библиотека под названием .NET inflector , которая используется для плюрализации / сингулярности, которые потенциально могут быть переназначены или расширены таким же образом для такой вещи. То, что вы ищете здесь, - это общее правило, которое вы можете настроить с исключениями ... например, слова, начинающиеся с буквенных комбинаций, которые обычно произносятся как гласные. Хотя это [строго говоря] не является культурно чувствительным, оно должно помочь вам начать как минимум на английском языке.

...