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

dotnet core 多语言问题请教

  •  
  •   daijinming · 8 天前 · 838 次点击

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

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

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

    https://docs.microsoft.com/en-us/previous-versions/commerce-server/ee825488(v=cs.20)
        21
    dawnh   8 天前   ♥ 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
        22
    daijinming   7 天前
    @chinvo #18 你看我在#17 发的图片,是-,但却是还是不行,我看了下在 Docker 容器( debian )中编译的只有 en 文件夹,其他都没有
        23
    daijinming   5 天前
    @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
    });
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   784 人在线   最高记录 4236   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 18ms · UTC 20:56 · PVG 04:56 · LAX 12:56 · JFK 15:56
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1