V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
daijinming
V2EX  ›  程序员

dotnet core 多语言问题请教

  •  
  •   daijinming · 2019 年 1 月 11 日 · 2715 次点击
    这是一个创建于 2578 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    https://docs.microsoft.com/en-us/previous-versions/commerce-server/ee825488(v=cs.20)
    dawnh
        21
    dawnh  
       2019 年 1 月 11 日   ❤️ 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 年 1 月 12 日
    @chinvo #18 你看我在#17 发的图片,是-,但却是还是不行,我看了下在 Docker 容器( debian )中编译的只有 en 文件夹,其他都没有
    daijinming
        23
    daijinming  
    OP
       2019 年 1 月 14 日
    @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   ·   Solana   ·   1412 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:01 · PVG 08:01 · LAX 16:01 · JFK 19:01
    ♥ Do have faith in what you're doing.