8

我正在寻找一种文化敏感的方式来在使用适当的文章 (a/an) 时将名词正确插入句子中。它可以使用 String.Format,或者如果在其他地方存在适当的方法来执行此操作,则可能使用其他方法。

例如:

基本句子:“您正在查看一个/一个 {0}”

这应该格式化为:“你在看胡萝卜”或“你在看鸡蛋”。

我目前正在通过手动检查要插入的单词的第一个字符然后手动插入“a”或“an”来执行此操作。但我担心当应用程序本地化为其他语言时,这可能会限制我。

是否有解决此问题的最佳实践?

解决方案:问题似乎很复杂,以至于不存在以我最初所说的方式解决此问题的实用程序或框架。似乎最好的解决方案(在我的情况下)是将文章与名词一起存储在数据库中,以便翻译人员可以拥有他们需要的控制级别。感谢所有的建议!

4

6 回答 6

9

问题甚至在英语中,a-vs-an 不是由起始字母决定的,而是由起始决定的。您可以根据起始字母在英语中做出很好的假设,但也有一些例外(例如“小时”、“用户”)。

最好的办法是获得一个单词的发音以便能够选择。

除此之外,下一个最好的办法是列出常见异常,然后猜测其余的。


来自维基百科

“a”或“an”的选择是由语音规则而不是拼写约定决定的。语音中使用“an”来消除在“a”和后面的单词(例如“an X-ray”)之间需要的尴尬的声门塞音(瞬间静默停顿)......以下段落是“an”的拼写规则如果不理解语音规则,可以使用它。

于 2009-05-05T16:48:55.643 回答
4

除了 lc(一小时,一顶帽子)指出的问题外,不同语言的语法规则差异很大。例如,许多基于拉丁语的语言会根据名词的“性别”和“数字”来切换名词的冠词,这有时可以从单词的最后几个字符推断出来,但与英语有同样的问题……有许多例外。

如果您正在谈论本地化界面,我会将文章与每种语言的界面元素的名词一起存储。如果您正在处理用户输入,我看不到这样做的简单方法。

于 2009-05-05T16:56:53.677 回答
3

古老的文字冒险电脑游戏时代,解决这个问题的一种方法是让“a”、“an”、“the”等成为事物实际名称的一部分。当你在这些游戏中看到“a 邮箱”时,没有智能 AI 来确定“a”。对象的名称是“邮箱”。在某些游戏中它可能会说“你打开邮箱”,这听起来很愚蠢,而在其他游戏中它可能会说“你打开邮箱”,这意味着输入的对象有另一个名称,用于不同的语法上下文。我建议你走这条路线,而不是你现在的路线。

于 2009-05-05T17:10:50.350 回答
2

其他语言也有类似的问题,但在不同的上下文中,例如取决于对象的性别或对象的实际数量(有些语言不仅区分一个对象和两个对象,而且一个、两个或多个对象的语法不同俄语中的两个对象)。

要使用德语中的示例:

相当于“您正在查看 a(n) X”将是:

“Du siehst ein X”
或“Du siehst eine X”
或“Du siehst einen X”

取决于对象X的性别。而对象的性别是您无法猜测的,它与对象的名称有关,只是基于历史传统。

因此,在大多数语言中没有简单的方法来实现这种区别。我的建议是始终使用适用于所有情况的配方,例如

“你正在看一个 X 类型的对象”
或“你正在看一个 (n) X”
或“你正在看一个 X”

于 2009-05-05T16:59:35.730 回答
1

这在文化上如何敏感?你试图做的只有在英语中才有意义。其他语言可能需要对句子进行完全不同的更改。有些可能会修饰名词,有些可能会改变句子结构,有些可能会重新排列单词等等。

当本地化为其他语言时,您尝试做的事情将会中断。没有自动的方法来解决这个问题。

作为一个简单的例子,考虑一下当你尝试用英语写“the {something}”时会发生什么,你只需在单词前面加上“the”就可以了。在法语中,根据性别以及是否为复数,您可以在其前面加上 le、la 或 les。在丹麦语中,您改为添加“en”或“et”后缀。因此,当单词 table 翻译为“bord”时,“table”变成了“bordet”。并且“椅子”(stol)变成了“偷来的”。

解决这个问题的唯一有意义的方法是让翻译者控制整个句子。不要以为你可以在这里和那里插入一些与文化相关的词。

所以在实践中,最好的解决方案可能是接受你的应用程序不能简单地本地化。也许您可以确保一些关键语言是可能的,除此之外,忽略这个问题。然后,如果您将来需要将应用程序翻译成语言 X,请与翻译人员一起对应用程序代码进行必要的更改。

或者,您必须完全放弃尝试自己构造句子。确保句子正确的唯一方法是让翻译人员写下整个句子。当然,当您希望能够交换单个单词时,这会导致问题。

于 2009-05-05T17:09:30.837 回答
0

有一个名为.NET 变形器的库,它用于复数/单数化,可能会以相同的方式重新利用或扩展此类事物。您在这里寻找的是一个一般规则,然后您可以调整例外情况......例如,以字母组合开头的单词通常发音为元音。虽然这不是[严格来说]文化敏感的,但它至少应该让你开始用英语。

于 2009-05-05T16:57:35.640 回答