我很快就会在一个大型的c#项目中工作,并希望从一开始就构建多语言支持。我有一个办法,可以为每种语言使用单独的资源文件,然后使用资源管理器加载字符串。
有没有其他好的方法可以让我研究一下?
发布于 2008-12-17 02:47:28
+1个数据库
如果对数据库进行了更正,应用程序中的表单甚至可以动态地重新翻译自身。
我们使用的系统中,所有控件都在一个XML文件(每个表单一个)中映射到语言资源in,但所有in都在数据库中。
基本上,我们没有让每个控件持有ID (实现接口,或使用VB6中的tag属性),而是利用了这样一个事实:在.NET中,控件树很容易通过反射被发现。加载表单时的进程将构建XML文件(如果该文件丢失)。XML文件会将控件映射到它们的资源in,因此只需要填写并映射到数据库即可。这意味着,如果某些内容没有标记,或者需要将其拆分为另一个ID,则无需更改编译后的二进制文件(在英语中,可能同时用作名词和动词的某些单词可能需要转换为字典中的两个不同的单词,并且不会被重用,但在初始分配ID期间,您可能不会发现这一点)。但事实是,整个翻译过程完全独立于您的二进制代码(每个表单都必须继承自一个知道如何转换自身及其所有控件的基本表单)。
只有当使用带有插入点的阶段时,应用程序才会得到更多的参与。
数据库翻译软件是您的基本CRUD维护屏幕,具有各种工作流程选项,以方便查找丢失的翻译等。
发布于 2010-12-02 16:51:41
我一直在找,我找到了这个:
如果你使用WPF或Silverlight,你的方法可以使用WPF LocalizationExtension有很多原因。
它是开源的,它是免费的(并将保持免费)是一个真正稳定的状态
在Windows应用程序中,您可以执行以下操作:
public partial class App : Application
{
public App()
{
}
protected override void OnStartup(StartupEventArgs e)
{
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de-DE"); ;
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("de-DE"); ;
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(
XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
base.OnStartup(e);
}
}
我认为在Wep页面上,这种方法可能是相同的。
祝好运!
发布于 2008-12-17 02:21:48
我会选择多个资源文件。它应该不会那么难配置。事实上,我最近回答了一个关于设置基于全局语言的资源文件和表单语言资源文件的类似问题。
Localization in Visual Studio 2008
我认为这是最好的方法,至少对WinForm开发来说是这样。
https://stackoverflow.com/questions/373388
复制相似问题