首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >消息的动态定位

消息的动态定位
EN

Stack Overflow用户
提问于 2014-07-17 08:07:06
回答 1查看 494关注 0票数 0

我对信息作了一个简单的本地化。所有消息都存储在静态类Lng中。

代码语言:javascript
复制
public static partial class Lng
{
    public static readonly string AppName = "My application";
    public static class Category1
    {
        public static readonly string ConfirmDelete = "Are you sure want to delete?";
    }
}

在代码中,使用与引用字段一样简单。

代码语言:javascript
复制
MessageBox.Show(Lng.Category1.ConfirmDelete, ...

还有一位经理,其职责如下:

  • 语言选择
  • 负载对应平移
  • 通过反射更新字段
  • 在应用程序退出时导出当前选定的语言以进行更新(如果选择默认语言,则为任何其他语言创建第一次翻译)

这与语言文件的外观无关,但这里有一个反射部分

代码语言:javascript
复制
TranslateLng("Lng.", typeof(Lng));
...

private static void TranslateLng(string parent, Type type)
{
    foreach (Type nested in type.GetNestedTypes())
    {
        string child = string.Format("{0}{1}.", parent, nested.Name);
        TranslateLng(child, nested);
        foreach (var field in nested.GetFields())
        {
            string key = child + field.Name;
            DefaultAdd(key, (string)field.GetValue(null)); // store value in default language dictionary (if not created yet)
            field.SetValue(null, GetValue(key)); // get value for currently selected language
        }
    }

这个系统有一个问题:所有消息都定义在一个类中,这需要手动管理(在更新使用它们的代码时删除和更新消息)。

我正在考虑更改管理器来动态注册字符串,并将使用简化为

代码语言:javascript
复制
MessageBox.Show(Lng.Text("Are you sure want to delete?"), ...

因此,文本被定义在它使用的地方,复制的文本可以由管理器处理等等。

然而,有两个问题:

  • 我将需要一个完整的列表,在应用程序运行结束的所有消息,以导出完整的消息列表(目前选定的语言)。如果Lng.Text()中的某些成员从未在运行时被调用呢?是否有一种方法可以在代码(编译时)中使用它们注册?这样,所有的调用都会以某种方式被注册,即使代码的宁静从未被使用过。
  • 如何生成key。我可以使用CallerMemberName,但是正确的键更有用,因为它们说明了确切的目的。例如,Lng.Configuration.Appearance.CaptionText。我可以打电话给Lng.Text(key, message),但是我必须管理密钥,确保它们的唯一性,这并不吸引我。
EN

回答 1

Stack Overflow用户

发布于 2014-07-17 11:17:25

最近我做了一个国际化的项目,我们把Resources西苏利泽程序结合起来,取得了很大的成功。当您在提取资源时手动输入密钥时,拥有这些资源可以解决您的密钥问题。您还得到了Resharper的大力支持,这使得整个过程变得轻而易举。

然后使用Sisulizer提取我们的Win窗体和WPF类中硬编码的资源和字符串。它可以导出一个CSV,你可以给你的翻译器,它也支持伪翻译,这使得测试这些应用程序也非常容易。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24798097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档