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

例如:

基本句子:“你正在看a / an {0}”

这应格式化为:“你正在看胡萝卜”或者“你正在看一个鸡蛋。”

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

是否有解决此问题的最佳做法?

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

有帮助吗?

解决方案

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

如果您正在谈论本地化接口,我会在每种语言中存储带有名称的文章。如果您正在处理用户输入,我看不到一种简单的方法。

其他提示

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

最好的办法是可以选择单词的发音。

除此之外,接下来要做的最好的事情是列出一些常见的异常,然后猜测其余的异常。


来自维基百科

  

“a”的选择或“一个”或“一个”是   由语音规则决定   而不是通过拼写惯例。 "安"是   受雇于演讲中删除   尴尬的声门停止(瞬间沉默   暂停)否则需要   在“a”之间和一个跟随的词,例如   “X射线”。 ... 下列   段落是“an”的拼写规则。   如果是语音规则,可以使用它   不明白。

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

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

使用德语的例子:

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

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

取决于对象X的性别。对象的性别是您无法猜测的,它仅根据历史传统链接到对象的名称。

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

"您正在查看类型为X的对象

或者“你在看(n)X”
或“你正在看一个X”

这对文化敏感度如何?你想要做什么只有才有意义。其他语言可能需要对句子进行完全不同的更改。有些人可能会修改名词,有些人可能会改变句子结构,有些人可能会对词语进行重新排序等等。

当您本地化为其他语言时, 打破。没有自动解决方法。

作为一个简单的例子,考虑当你尝试写“{something}”时会发生什么。 在英语中,您只需在单词前加上“the”;一切都很好。在法语中,您可以使用le,la或les作为前缀,具体取决于性别以及是否为复数。 在丹麦语中,您可以添加“en”或“et”后缀。因此,在单词表转换为“bord”,“表格”的情况下,变成“bordet”。和“椅子” (stol)变成“被盗”。

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top