从 https://github.com/skoruba/IdentityServer4.Admin 上下载了源码,本地调试的时候显示汉语,但是部署到到 centos7 中的 docker,运行起来就编程英文了,确实很奇怪,这么问题能通过在代码中自定文化属性解决吗,求解?
1
695975931 2019-01-11 12:51:21 +08:00 via Android
提个 issue?
|
2
daijinming OP @695975931 不知道和老外措辞
|
3
beginor 2019-01-11 13:45:35 +08:00 via Android
可能是与服务器的时区有关,也可能是 docker 内部的时区
|
4
daijinming OP ![Markdown]( http://i1.bvimg.com/623168/917a2d3b7a7764e5.jpg)
|
5
daijinming OP @beginor 进入 Docker 容器 locale -a 确实没有中文资源,有办法吗,需要更换基础镜像吗
|
6
daijinming OP <div class="col-12">
<h2>@Localizer["PageTitle"]</h2> </div> |
7
daijinming OP 仔细查看代码中很多都上楼上的写法,现在不知道怎么处理,道理是更换 docker 基础镜像( FROM microsoft/dotnet:sdk ) 还是在 Dockerfile 中下载中文资源 还是在 代码中携带资源文件,糊涂中.....
|
8
Raphael96 2019-01-11 14:17:57 +08:00
多语言处理是由客户端浏览器的语言设置来判断的吧
|
9
daijinming OP @Raphael96 客户端都一样的,只是服务端不一样
|
10
chinvo 2019-01-11 14:32:35 +08:00 via iPhone
localizer 是 asp.net core g11n 的用法,这个理论上只受 user agent 的请求影响
|
11
chinvo 2019-01-11 14:35:42 +08:00 via iPhone
突然想起来,你检查下项目目录,有没有 zh / zh-cn / zh-chs 目录。
受中文语言 ISO 编码变更影响,现在只有在 Windows 上编译才会有 zh-cn,在其他平台应该选用 zh-chs |
12
daijinming OP @chinvo ![Markdown]( http://i2.bvimg.com/623168/77b12ed0870683bf.jpg) 有很多类似这样的 ApiResource.zh-CN.resx
|
13
daijinming OP 但是在容器中却找不到任何 zh-CN 相关的 ![Markdown]( http://i1.bvimg.com/623168/c6497796b3e72157.jpg)
|
14
chinvo 2019-01-11 15:15:34 +08:00 via iPhone
@daijinming #12 要编译的,在输出的目录里面应该有个叫 zh-cn 的目录,里面有一些 dll,这个目录也要包含在容器内
|
15
chinvo 2019-01-11 15:16:53 +08:00 via iPhone
另外 Linux 上 .net core 已经不支持 zh-cn 了,你要把这些文件改名成 zh-chs 或者 zh,然后在 startup 里面也把 zh-cn 改成对应的 locales
|
16
daijinming OP @chinvo 先感谢了朋友,文件太多了,我先修改下
|
17
daijinming OP @chinvo 不行呀朋友,这样 zh_CN 修改为 zh_CHS ,这样我本地都是英文了![Markdown]( http://i2.bvimg.com/623168/27818b55fd270c5c.jpg)
|
18
chinvo 2019-01-11 17:26:17 +08:00
@daijinming 是 - 不是 _
|
19
chinvo 2019-01-11 17:27:39 +08:00
|
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) |
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 |
22
daijinming OP @chinvo #18 你看我在#17 发的图片,是-,但却是还是不行,我看了下在 Docker 容器( debian )中编译的只有 en 文件夹,其他都没有
|
23
daijinming OP @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 }); |