所以我在vb.net开发了一个应用程序,但最近我遇到了允许多种语言的必要条件。我不知道是否有任何'共同'方式来做这种事情,但我实现这一目标的方法如下:
例如,我的词典类:
Dim dictionary As New Dictionary(Of String, String)
dictionary.Add("00011", "hello there!")
在我的代码的某处,我将替换:
mylabel.text = "hello there!"
使用:
mylabel.text = dictionary.item("00011")
稍后我将不再使用静态字典,而是创建该字典,从这样的数据库中获取信息(并在应用程序的开头加载它:
_______________________________________
word_code ### word_EN ### word_FR
_______________________________________
00011 ### hello there ### bonjour il
我将根据选择的语言加载字典。
我对这种方法不太满意,我不知道这是否正确,但如果是这样,我有几个问题:
非常感谢先进, Ĵ
答案 0 :(得分:1)
这是一种常见的方式 - 使用系统名称和语言代码来查找翻译的值。但是,一般来说,我只建议你为系统文本和较小的文本段这样做。
原因是在例如CMS /电子商务系统中,可能需要在数据模型中翻译包含大量文本的页面以支持它开始;然后你已经有了语言部门。 因此,在这种情况下,您最好使用已翻译的数据模型制作页面结构,其中详细信息将针对您当前网站的每种语言的语言特定。 例如,您将拥有一个产品 - > product_detail其中detail保留所述产品的翻译值。类似于文章 - > article_detail等等。
但是对于需要显示的一般翻译和系统文本,这是一种常见的方式。 正如你自己建议的那样,像字典这样的结构是一个很好的结构,可以快速查找并可以缓存在系统中,因此你不需要一直检索它们。
您可以通过以下方式将您的翻译细分为子组;说你有一个订单页面和一个产品页面。然后,您可以将翻译分配给“产品”,也可以将“订购”分配给“普通”组。 它还可以更轻松地构建较小的缓存对象,从数据存储中提取较少的数据等,因此仅围绕订单的页面不需要担心产品转换。
它需要内存,但除非您将整个CMS系统放入翻译中,否则它应该是“次要的”。 然而,我会质疑需要1000万个翻译实体,并想知道你的系统是否真的需要那么多,如果确实如此,那么可能会考虑一种替代方法,是否可能更好地将“页面”的多个版本设置为消除翻译的需要。
我还建议你不要使用“00011”作为系统代码来开始,并选择一个更“可读”的版本(如“hello”)来简化代码的可读性和可维护性。那么如果你想要一个类似“00011”的'系统值',那么很容易进行搜索/替换。