如何在.NET中进行极端的品牌/国际化

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类创建那些许多自定义文化的好处.

https://msdn.microsoft.com/en-us/library/system.globalization.cultureandregioninfobuilder(v=vs.110).aspx

toc*_*lle 2

我不建议在如此庞大的项目中使用 .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 所做的就是选择与线程的当前文化相匹配的国家/地区。