• SL多语言解决方案


    让SL应用支持多国语言。

    1. 新建一个示例SL工程和一个测试的Web站点

    2. 在站点中复制系统自动生成的****TestPage.html,以语言代码(如zh-CN)作为文件名的一部分。

    3. 在每个测试页面中的Object标签中添加语言参数culture和uiculture并设置相应的语言

    4. 在SL工程中添加Resources文件夹(直接放置在根目录也是可以的,不过为了便于管理,单独出来这个文件夹)

    5. 添加StringLibrary.resx资源文件,设置其访问权限为public,在其中添加Name字符串资源

    6. 复制该文件,并分别重命名为相应语言的名字,并修改Name字符串资源的内容,然后将访问级别都设置为No Code Generation

    7. VS帮我们自动生成的后台代码中StringLibrary构造函数的访问权限是internal,如果要在Xaml中使用该资源实例,则此资源类必须是public的。因此我们手动修改StringLibrary.Designer.cs文件将其构造函数访问级别设置为public(注意,这个文件在每次修改StringLibrary.resx后都会自动重新生成)。我们也可以不修改该文件,直接在代码中实例化一个StringLibrary对象(StringLibrary类是Dotnet帮我们自动生成的)并将其动态添加到相应的资源(App或者UserControl)中。

    这个没设置

    <UserControl.Resources>
            <Local:Strings x:Name="LocStrings"/>
        </UserControl.Resources> 
       会出错

     

    8. 在Page.xaml中定义资源实例   

    9. 在Xaml中使用该实例   

      10. 为了编译时能够将语言包打包到Xap包中去,我们需要设置一下工程文件:

        A). 右键工程文件,选择Unload Project,然后再Edit Project。(或者你也可以直接在工程文件夹中直接修改.csproj文件)

      B). 找到SupportedCultures这个节点,添加文本节点

    <SupportedCultures>en-US,zh-CN,zh-TW</SupportedCultures>

      11. 编译整个工程,然后分别查看三个不同语言的测试页面

    其他方面

    1. 不需要通过在HTML页面中指定语言,而是在SL的App启动事件中动态改变当前线程的文化集

    private void Application_Startup(object sender, StartupEventArgs e)

    {

    CultureInfo culture = new CultureInfo("en-US");

    Thread.CurrentThread.CurrentCulture = culture;

    Thread.CurrentThread.CurrentUICulture = culture;

    this.RootVisual = new Page();

    }

    这样即使你在html页面中设置了语言,也会被这里覆盖掉的

    2. 当提供的特定语言的资源文件没有找着的时候,系统会查找相应的父级语言,如zh-CN的父级语言是zh,en-US的父级语言是en(父级语言即地域无关的)。如果还没找到,则使用默认语言资源

    3. 当不指定任何语言时,系统会查找用户操作系统使用的语言,自动加载相应的资源文件,如果找不着, 则回退到默认语言资源

    4. 在AssemblyInfo中指定[assembly: NeutralResourcesLanguageAttribute("en")]属性的作用尚未搞懂,貌似指定那种语言,那种语言就加载不成功,很怪异。有知道的人可以告知我一声~

    转载:http://www.cnblogs.com/KevinYang/archive/2008/11/10/1330305.html

    参考:http://www.cnblogs.com/Terrylee/archive/2008/06/19/localization-in-silverlight-2-beta-2-part1.html(文章说SL2只支持两种语言,本人测试SL3可支持多种语言了)

  • 相关阅读:
    C#中Dictionary的用法
    System.Timers.Timer用法
    C#中的异步调用及异步设计模式(三)——基于事件的异步模式
    C#中的异步调用及异步设计模式(二)——基于 IAsyncResult 的异步设计模式
    C#中的异步调用及异步设计模式(一)
    [你必须知道的异步编程]——异步编程模型(APM)
    strncasecmp与strcasecmp用法
    C语言之strrchr函数
    HDU 5289 Assignment (ST算法区间最值+二分)
    poj 1733 Parity game(种类并查集)
  • 原文地址:https://www.cnblogs.com/chencidi/p/1634124.html
Copyright © 2020-2023  润新知