zoukankan      html  css  js  c++  java
  • 系统多语言实现

    背景:

    早期开发未考虑全球化,英文版系统,页面很多,每个页面内容也很多。

    目的:

    本地化,如果选择特定的语言环境,应该显示特定语言。

    系统简介:

    1)没有采用windows控件,而是根据系统的特性自定义控件,比如Button,自定义的控件为RCButon、RCTextBox RCLabel等。

    2)Win form开发。

    3)。Net .2.0 和3.5,VS2010开发。

    4)页面文本有些是在程序中设置,或者是从数据库中读取。

    5)业务范围很广。

    解决方案:

    一:Winform本地化

    步骤:(以Form1页面为例)

    1)设置Form1窗体的属性:Localizable设置为true,Language设置为法文(暂定翻译成法语)。

    2)逐个翻译页面中需要翻译的字段。自动生成对应的资源文件,比如Form1.fr.resx。

                           

    3)在控制面板中设置区域和语言,当设置成方法时,就能启动法语版本,一般我们是显示英语。

    4)也可以通过编程设置,改变thread.currentthread.currentculture 和thread.currentthread.currentuiculture的值。

    优点:

    1)操作简单,编译项目时,为每种语言创建一个附属程序集,这个附属程序集只包含本地化资源。

    2)根据不同语言的特性重新调整界面。

    3)可以外包翻译,通过 windows资源本地化编辑器进行翻译,该工具无须访问C#源文件(产品部可以自己翻译啦)。

    缺点:对于本系统改造,工作量太大。

    二:textkey策略

    设计原理

        将界面控件上显示的内容text(以下简称text)以其对应的键值TextKey代替,并将TextKey和text的对应关系保存在配置文件中。在控件初始化或显示时,通过多语言模块得到对应的TextKey对应的text。对于没有定义TextKey的内容,将采用原来的内容,不进行多语言替换。

    步骤

    1)生成资源文件

    采用工具抽取页面上的文本内容至csv文件中。格式如下:

    模块名    文件名    控件名   文本内容    词频    textkey  

    前五项是从页面中获取,textkey需要手工操作,根据text内容定义唯一的textkey,再根据textkey生成资源文件。以ABCD.xml为例:

    <?xml version="1.0" encoding="gb2312"?>

    <Dictionary>

      <word TextKey="BC.tkFeeCeiling" Text="文FEE CEILING" />

    </Dictionary>

    2)自定义控件改造

    在控件属性栏中显示textkey属性。

        [Browsable(true), DefaultValue(""), Category("Appearance"), Description("Text键值,用于控件多语言化")]

            public string TextKey

            {

               get{.......}

               set

    {

    //这路操作显示的内容。关键步骤TextCache

    }

    }

    3)通过配置文件设置多语言属性。(目前没有解决根据机器culture来自动获取语言特性,只能通过配置文件设置)。

    4)加载多语言包。

    解析资源字典文件,将textkey和对应的text添加到dictionary中,再将dictionary中的内容存放到TextCache(用来存放资源字典)中。

    优缺点:

    1)工作量比上面的方法要少很多。翻译人员可根据字典直接翻译。

    2)需要手动设置语言,不能获取机器的culture,资源字典是一次性加载到内存中,如果以后业务量增加,一次性加载不了怎么办?资源文件存放在服务器中,文件如果太大,传输速度?

     也许还有更好的解决方案,欢迎大家指正。

  • 相关阅读:
    Faster R-CNN
    06.看板实践——限制在制品
    05.看板方法——在制品
    04.看板实践——工作项
    03.看板实战——工作可视化
    02.看板实践——理解看板
    01.看板实践——学习看板(笔记)
    00.看板实践——前言(笔记)
    00.Scrum指南
    02.有效的项目管理——什么是项目管理
  • 原文地址:https://www.cnblogs.com/icbcfang/p/4469097.html
Copyright © 2011-2022 走看看