V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
daijinming
V2EX  ›  程序员

dotnet core 多语言问题请教

  •  
  •   daijinming · 2019-01-11 12:39:11 +08:00 · 2355 次点击
    这是一个创建于 1922 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://github.com/skoruba/IdentityServer4.Admin 上下载了源码,本地调试的时候显示汉语,但是部署到到 centos7 中的 docker,运行起来就编程英文了,确实很奇怪,这么问题能通过在代码中自定文化属性解决吗,求解?

    第 1 条附言  ·  2019-01-11 13:52:30 +08:00
    23 条回复    2019-01-14 10:14:49 +08:00
    695975931
        1
    695975931  
       2019-01-11 12:51:21 +08:00 via Android
    提个 issue?
    daijinming
        2
    daijinming  
    OP
       2019-01-11 13:44:38 +08:00
    @695975931 不知道和老外措辞
    beginor
        3
    beginor  
       2019-01-11 13:45:35 +08:00 via Android
    可能是与服务器的时区有关,也可能是 docker 内部的时区
    daijinming
        4
    daijinming  
    OP
       2019-01-11 13:51:52 +08:00
    daijinming
        5
    daijinming  
    OP
       2019-01-11 14:07:44 +08:00
    @beginor 进入 Docker 容器 locale -a 确实没有中文资源,有办法吗,需要更换基础镜像吗
    daijinming
        6
    daijinming  
    OP
       2019-01-11 14:09:15 +08:00
    <div class="col-12">
    <h2>@Localizer["PageTitle"]</h2>
    </div>
    daijinming
        7
    daijinming  
    OP
       2019-01-11 14:15:37 +08:00
    仔细查看代码中很多都上楼上的写法,现在不知道怎么处理,道理是更换 docker 基础镜像( FROM microsoft/dotnet:sdk ) 还是在 Dockerfile 中下载中文资源 还是在 代码中携带资源文件,糊涂中.....
    Raphael96
        8
    Raphael96  
       2019-01-11 14:17:57 +08:00
    多语言处理是由客户端浏览器的语言设置来判断的吧
    daijinming
        9
    daijinming  
    OP
       2019-01-11 14:20:44 +08:00
    @Raphael96 客户端都一样的,只是服务端不一样
    chinvo
        10
    chinvo  
       2019-01-11 14:32:35 +08:00 via iPhone
    localizer 是 asp.net core g11n 的用法,这个理论上只受 user agent 的请求影响
    chinvo
        11
    chinvo  
       2019-01-11 14:35:42 +08:00 via iPhone
    突然想起来,你检查下项目目录,有没有 zh / zh-cn / zh-chs 目录。

    受中文语言 ISO 编码变更影响,现在只有在 Windows 上编译才会有 zh-cn,在其他平台应该选用 zh-chs
    daijinming
        12
    daijinming  
    OP
       2019-01-11 14:51:57 +08:00
    @chinvo ![Markdown]( http://i2.bvimg.com/623168/77b12ed0870683bf.jpg) 有很多类似这样的 ApiResource.zh-CN.resx
    daijinming
        13
    daijinming  
    OP
       2019-01-11 14:54:03 +08:00
    但是在容器中却找不到任何 zh-CN 相关的 ![Markdown]( http://i1.bvimg.com/623168/c6497796b3e72157.jpg)
    chinvo
        14
    chinvo  
       2019-01-11 15:15:34 +08:00 via iPhone
    @daijinming #12 要编译的,在输出的目录里面应该有个叫 zh-cn 的目录,里面有一些 dll,这个目录也要包含在容器内
    chinvo
        15
    chinvo  
       2019-01-11 15:16:53 +08:00 via iPhone
    另外 Linux 上 .net core 已经不支持 zh-cn 了,你要把这些文件改名成 zh-chs 或者 zh,然后在 startup 里面也把 zh-cn 改成对应的 locales
    daijinming
        16
    daijinming  
    OP
       2019-01-11 15:40:02 +08:00
    @chinvo 先感谢了朋友,文件太多了,我先修改下
    daijinming
        17
    daijinming  
    OP
       2019-01-11 16:27:19 +08:00
    @chinvo 不行呀朋友,这样 zh_CN 修改为 zh_CHS ,这样我本地都是英文了![Markdown]( http://i2.bvimg.com/623168/27818b55fd270c5c.jpg)
    chinvo
        18
    chinvo  
       2019-01-11 17:26:17 +08:00
    @daijinming 是 - 不是 _
    chinvo
        20
    chinvo  
       2019-01-11 17:29:13 +08:00
    还有上面链接的 Globalization and localization terms 小节,以及下面的链接

    https://docs.microsoft.com/en-us/previous-versions/commerce-server/ee825488(v=cs.20)
    dawnh
        21
    dawnh  
       2019-01-11 17:33:34 +08:00   ❤️ 1
    简单搜索了一下连接里的代码,似乎是直接调用.net core 的 UseRequestLocalization(),那在 startup()设置一下应该就好了吧,直接贴.net core 的样例麻烦自己改吧:

    var supportedCultures = new[]
    {
    new CultureInfo("en-US"),
    new CultureInfo("fr"),
    };

    app.UseRequestLocalization(new RequestLocalizationOptions
    {
    DefaultRequestCulture = new RequestCulture("en-US"),
    // Formatting numbers, dates, etc.
    SupportedCultures = supportedCultures,
    // UI strings that we have localized.
    SupportedUICultures = supportedCultures
    });

    app.UseStaticFiles();
    // To configure external authentication,
    // see: http://go.microsoft.com/fwlink/?LinkID=532715
    app.UseAuthentication();
    app.UseMvcWithDefaultRoute();
    来自: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-2.2
    daijinming
        22
    daijinming  
    OP
       2019-01-12 09:42:35 +08:00
    @chinvo #18 你看我在#17 发的图片,是-,但却是还是不行,我看了下在 Docker 容器( debian )中编译的只有 en 文件夹,其他都没有
    daijinming
        23
    daijinming  
    OP
       2019-01-14 10:14:49 +08:00
    @chinvo ,终于搞定了,感谢了,都修改成类似 Index.zh.resx
    -----------------------
    var supportedCultures = new[]
    {
    new CultureInfo("zh"),
    new CultureInfo("en")
    };

    app.UseRequestLocalization(new RequestLocalizationOptions
    {
    DefaultRequestCulture = new RequestCulture("zh"),
    // Formatting numbers, dates, etc.
    SupportedCultures = supportedCultures,
    // UI strings that we have localized.
    SupportedUICultures = supportedCultures
    });
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   973 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:55 · PVG 05:55 · LAX 14:55 · JFK 17:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.