c# - 识别未本地化的文本

标签 c# asp.net localization asp.net-4.0

在 ASP.NET 中,可以使用资源文件本地化应用程序。资源文件包含不同的翻译。例如,可能有一个英语资源文件和一个西类牙语资源文件。使用资源文件时,可以将属性应用于网页上的控件,以使用资源文件中的值自动填充该控件。或者,可以通过编程方式从资源文件加载这些值并将其分配给控件的属性。

ASP.NET 使用回退机制来加载翻译。它试图找到与当前用户的文化最相似的资源文件。如果当前用户的区域性是西类牙语,则 ASP.NET 会尝试从西类牙语资源文件加载适当的资源。如果西类牙语资源不可用,则会回退到默认资源文件。由于此行为,西类牙语用户的文本可能会以默认语言显示,原因有两个:

  1. 没有西类牙语翻译。 (译者尚未提供该项目的翻译。)
  2. 文本未本地化。 (这可能是页面中出现纯文本或消息在某处被硬编码的结果。)

如果文本以默认语言显示,我想知道是由于原因 1 还是由于原因 2。

对于每个缺失的翻译,我可以在资源文件中插入某种占位符文本。然而,这意味着我要放弃后备机制。更糟糕的是,如果占位符文本意外地进入生产环境,它看起来比显示默认文本要糟糕得多。

是否有人有任何建议(或解决方案)来确定这两个条件中的哪一个是手动测试期间出现默认文本的原因?

最佳答案

如果我理解正确的话,您想要验证每个可本地化的文本实际上确实是可本地化的,并且没有被烧录在代码中。为此,您不应使用真正的区域性(西类牙语),而应为虚假的不受支持的区域性创建资源,并为默认资源中可用的每个可本地化资源条目提供自动翻译。

例如,如果您有一个默认资源包含:

  • 条目1:这是一个测试!

您应该在您的虚假文化中创建一个资源,其中包含:

  • 条目1:Th1s 1s @ t€st!

您甚至可以(并且应该)使用简单的字符映射自动执行虚假资源的创建。这样,当您将应用程序设置为使用自定义的假文化时,您就知道每个条目都有翻译,因此您可以找到编码文本。 此策略由 Windows 使用,称为 pseudo-locales 。使用伪翻译字符串可以使用假区域性进行开发,因为文本仍然可读,并且这提高了找到硬编码文本的概率

Windows 自 Windows Vista 和 Windows 2008 R2 起支持伪区域设置,因此,如果您的构建和测试环境使用这些操作系统,您可以将您的虚假区域性与这些伪区域设置之一关联起来(例如 qps-ploc)。如果您的操作系统不受支持,只需将您的虚假资源与您可能永远不会支持的真实文化相关联,或者只是创建自己的文化。

另请注意,即使在受支持的操作系统中,Visual Studio 也不会为这些伪区域设置创建附属程序集,除非您enable them on the registry .

关于c# - 识别未本地化的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11927671/

相关文章:

c# - 在 ListView 控件中查找控件

javascript - 在 ASP.NET C# 中获取 StackOverFlow 异常

Android 简体中文和繁体中文不工作

c# - C#中的正则表达式类

c# - Odata如何授权用户角色的$expand功能?

c# - Access 查询表达式中缺少运算符

Java - Swing 组件本地化 - 在哪里可以找到语言包?

c# - 如何将 List<T> 初始化为给定大小(相对于容量)?

javascript - 如何在保留上一页数据的同时返回到asp.net中的上一页

python - 如何在Python中每四位用逗号格式化一个数字?