.NET Core 2.2 特定文件夹结构下文件翻译失效如何解决
故障排查方向
1. 本地化扫描范围未覆盖对应命名空间
- 绝大多数框架的本地化资源绑定逻辑按命名空间匹配,若项目仅将
Models文件夹对应的命名空间纳入了本地化扫描范围,database/entities对应的命名空间不在扫描规则内,框架就无法找到对应语言的翻译资源,只会返回注解中写死的德语默认值。 - 排查方式:检查本地化服务注册代码,确认
AddDataAnnotationsLocalization相关配置中的资源路径、命名空间白名单,是否包含实体类所在的命名空间。
2. 资源文件结构/命名不匹配
- 若项目采用文件夹结构匹配资源文件的规则,
Models文件夹下存在对应翻译资源文件(如.resx),但database/entities下没有对应同级资源文件,或资源文件命名前缀与实体类不匹配,也会导致翻译失效。 - 示例:
Models/Article.cs对应Models/Article.zh-CN.resx可正常读取翻译,若database/entities/Post.cs没有对应database/entities/Post.zh-CN.resx,就无法读取翻译内容。
3. 实体类访问修饰符不符合扫描要求
- 部分框架的本地化扫描逻辑仅处理
public修饰符的类,若database/entities下的类为internal等非公开修饰符,未被扫描器识别,就不会触发翻译逻辑。 - 排查方式:对比
database/entities下的类与Models下正常工作的类的访问修饰符是否一致。
4. 实体类未参与模型验证流程
- 若
database/entities下的类仅作为数据库映射使用,没有作为接口入参、视图模型参与模型验证流程,数据注解的验证逻辑本身不会被触发,自然不会走翻译流程。 - 排查方式:确认触发验证的场景下,是否直接使用
database/entities下的类实例做验证,若手动映射到了Models类再做验证,database/entities上的注解不会生效。
5. 全局消息重写规则未覆盖对应类
- 若配置了全局DataAnnotations错误消息重写规则,规则过滤条件仅包含
Models命名空间下的类,未匹配到database/entities命名空间的类,框架就不会替换注解中写死的德语默认消息。
内容的提问来源于stack exchange,提问作者Lukas Hieronimus Adler
相关产品推荐
相关产品推荐

