Hel*_*rld 6 c# branding internationalization asp.net-mvc-5.2 .net-4.6.1
我们正计划一个非常大的应用程序.
- 我们希望将我们的应用程序国际化到30个国家.
- 在大多数国家,有1到6个不同的品牌可供选择.
- 像'de'这样的某个区域设置和像'XXX'这样的品牌的每个组合可能会多次出现,因此我们需要另一个标识符来获取独特的内容:
"locale_brand_siteorigin"
Run Code Online (Sandbox Code Playgroud)
因此我们有.resx文件,如:
配置.de.burgerking.px10 .resx
粗体打印是唯一标识符.
在运行时我们创建一个:
var rm = new ResourceManager("MyNamespace.Configurations.UniqueIdentifier",Assembly.GetExecuting());
Run Code Online (Sandbox Code Playgroud)
根据我们的业务逻辑,我们可以创建上面的resourceManager.
最后,我们将最终拥有180多个resx文件,其中包含唯一标识符的所有组合.
你知道更好的方法来做这种品牌吗?
4年前有人问过这个问题,但没有人回答:
UPDATE
我还想扩展我的问题,要求提供一个解决方案,展示使用cultureandregioninfobuilder类创建那些许多自定义文化的好处.
我不建议在如此庞大的项目中使用 .resx 文件。当一个网站被翻译成多种不同的语言时,通常会有很多人参与副本管理、翻译等工作。这些人将无法编辑 .resx 文件,因为它们在技术上嵌入在应用程序代码中。这意味着每次发生变化时,您的开发人员都必须不断更新资源……这对每个人来说都是一场真正的噩梦。
我最近为SumoSoft.Cms构建了一个数据库驱动的系统。所有字符串都可以通过管理面板进行管理,而在您只需使用的代码中:
@CmsMethods.StringContent("ContentSection_Name", "Fallback_Value")
Run Code Online (Sandbox Code Playgroud)
此帮助程序查询数据库,查找“ContentSection”类型的实体,其结构或多或少如下所示:
public class ContentSection
{
public string Name { get; set; }
public ICollection<ContentSectionLocalizedString> LocalizedStrings { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
每个 LocalizedString 都包含对特定国家/地区的引用和属性“Content”,因此 Helper 所做的就是选择与线程的当前文化相匹配的国家/地区。