因此,内置您不会获得翻译,但一种方法是依靠 ResourceManager 通过查找要为每种文化显示的存储字符串来为您处理此问题。对于您要显示的每种语言,您可以创建一个资源文件,其中包含文化值作为名称的一部分 - 类似于:
myLangResource.es-CO.resx
myLangResource.fr-CA.resx
myLangResource.en-US.resx
只需为您关心的每种语言在您的项目中添加一个类型为 Resource File 的新项目,然后存储您关心翻译的字符串。这些将包含名称和值,您的代码将查找这些名称和值以检索适当的字符串。就像是
Name Value
-----------------
Welcome Howdy
或者
Name Value
-----------------
Welcome Bienvenido
然后,本质上,您创建了一个 CultureInfo 成员:
private CultureInfo curCulture;
然后将其设置为当前文化,如下所示:
curCulture = CultureInfo.CurrentCulture;
然后,您将通过ResourceManager
对象加载适当的资源以获取适当的字符串。像这样:
var resourceManager = new ResourceManager("MyNamespace.myLangResource", typeof(DemoForm).Assembly);
string greeting = resourceManager.GetString("Welcome", curCulture);
// show the greeting however you want such as
myLabel.Text = greeting;
假设您出于某种原因想要更改当前的文化值。资源查找不需要名称的“es-CO”或“fr-CA”或“en-US”部分。它会自动尝试通过查找具有匹配名称的资源文件来为您执行此操作。