本地化
当您将产品的可用性限制为仅一种语言时,您将潜在的客户基础限制为世界人口的一小部分。如果你想让你的应用程序达到全球受众,成本效益本地化是获得更多客户的最好、最经济的方式之一。
本地化是将应用程序资源转换为应用程序支持的特定区域性的本地化版本。
本文将向您展示如何本地化Telerik UI控件使用的任何资源字符串。我们将讨论以下主题:
本文中的所有示例都是在Telerik上下文中演示的RadGridView控制。但是,用于字符串资源本地化的技术和原则对所有其他Telerik都是有效的WPF控件.
使用内置资源进行本地化
WPF内置的本地化机制提供了用以下支持的语言之一轻松设置所使用的Telerik WPF控件的可能性:
英语
德国
西班牙语
法国
意大利
荷兰
土耳其
默认是英文,但是您可以在相应的文件夹中为其他语言找到一个单独的文件,以及本地安装中的其他二进制文件。
如果需要将控件翻译成另一种语言,则应该使用自定义本地化经理.
要使用内置的本地化机制本地化控件,首先必须将资源文件夹与所引用的二进制文件放在一起,如图所示图3.
图1:在项目中放置资源文件夹
定义应用程序的语言设置的下一步是更改当前的文化应用程序:
示例1:设置应用程序的当前区域性
public App() {Thread.CurrentThread.CurrentCulture = new CultureInfo("de");Thread.CurrentThread.CurrentUICulture = new CultureInfo("de");}
Public子New() Thread.CurrentThread.CurrentCulture = New CultureInfo("de") Thread.CurrentThread.CurrentUICulture = New CultureInfo("de")结束子
就是这样。您的控件现在应该本地化为首选语言。
图2:德语本地化的RadGridView
资源键
有些控件是复杂的用户界面控件(例如,RadGridView,RadScheduleView),它们用于本地化的字符串很多。为了能够区分这些资源,有一个唯一的标识符叫做资源的关键分配给每个可本地化字符串。
在图3中,您可以看到一些资源键和与它们相关联的字符串。
图3:一些RadGridView的资源键及其值
的完整列表资源键,浏览本地化主题用于特定控件。
你可以找到"。的“Core\Controls”目录中包含所支持语言的翻译源代码.
使用ResourceManager进行本地化
如果需要修改所选语言的默认字符串,可以基于标准资源文件进行本地化。为此,您必须创建一个单独的. resx为您的应用程序将支持的每种语言归档。
假设您希望将控件RadGridView翻译成英语、德语和荷兰语。你必须添加三个新的资源文件到你的项目:
GridViewResources.resx-此资源文件将存储英语(默认)资源用于网格控制。设置AccessModifier财产公共.
GridViewResources.de.resx-此资源文件将存储德国资源用于网格控制。设置AccessModifier财产不生成代码.
GridViewResources.nl.resx-此资源文件将存储荷兰资源用于网格控制。设置AccessModifier财产不生成代码.
图4:为每种支持的语言创建单独的.resx文件
现在已经有了所需的文件,接下来只本地化组面板的文本。为此,您需要在三个资源文件中分别创建一个资源字符串,并将其转换为适当的语言。
请注意,资源字符串的名称应该与正在本地化的字符串的资源键相同。RadGridView的组面板的资源键为GridViewGroupPanelText.
的完整列表资源键,浏览本地化主题用于特定控件。
的内容,如图5所示GridViewResources.de.resx文件。资源名字(GridViewGroupPanelText)的其他两个文件应该是相同的。的价值列将包含适当语言的翻译。
图5:GridViewResources.de.resx的内容
最后一步是实例化LocalizationManager类,通过遍历所有资源键并返回适当的翻译,它允许您轻松地本地化任何Telerik UI控件。然后设置它ResourceManager到刚刚创建的资源(您可以在Application类的默认构造函数中执行此操作)。
例2:设置LocalizationManager的ResourceManager
LocalizationManager。Manager = new LocalizationManager() {ResourceManager = GridViewResources。ResourceManager};
LocalizationManager。Manager = New LocalizationManager() LocalizationManager.Manager. resourcemanager = GridViewResources。ResourceManager
如果依赖区域性设置自动加载正确的资源,则必须在应用程序的项目文件中编写一些代码。例如,如果您必须支持英语和荷兰语,您可以将本地化的字符串存储在Resources.resx而且Resources.nl.resx文件。为Resources.resx文件,可以设置ResXFileCodeGenerator来内部或公共而对其他人来说,要不生成代码.
使用自定义本地化管理器进行本地化
如果希望将控件转换为与默认可用语言不同的语言,则需要创建一个自定义LocalizationManager.为此,创建派生自LocalizationManager并覆盖其GetStringOverride ()方法。逻辑非常简单——你只需要创建一个switch语句,并为每个资源键返回正确的翻译,如下所示:
例3:重写LocalizationManager的getstringgoverride()方法
public class CustomLocalizationManager: LocalizationManager {public override string getstringgoverride (string key) {switch(key) {case "GridViewGroupPanelText":返回"Zum gruppieren ziehen Sie den Spaltenkopf in diesen Bereich.";//---------------------- RadGridView Filter下拉列表项文本:case "GridViewClearFilter":返回"Filter löschen";case " gridviewfiltershowwrowswithvaluethat ":返回" angzeigen der Werte mit Bedingung:";case "GridViewFilterSelectAll":返回"Alles anzeigen";case "GridViewFilterContains":返回"Enthält";case "GridViewFilterEndsWith":返回" end mit";case "GridViewFilterIsContainedIn":返回Enthalten in;case "GridViewFilterIsEqualTo":返回"Gleich";case "GridViewFilterIsGreaterThan":返回"Grösser als ";case "GridViewFilterIsGreaterThanOrEqualTo":返回"Grösser oder gleich"; case "GridViewFilterIsLessThan": return "Kleiner als"; case "GridViewFilterIsLessThanOrEqualTo": return "Kleiner oder gleich"; case "GridViewFilterIsNotEqualTo": return "Ungleich"; case "GridViewFilterStartsWith": return "Beginnt mit"; case "GridViewFilterAnd": return "Und"; case "GridViewFilter": return "Filter"; } return base.GetStringOverride(key); }
Public Class CustomLocalizationManager继承LocalizationManager Public override Function getstringgoverride (key As String) As String选择Case key Case "GridViewGroupPanelText"返回"Zum gruppieren ziehen Sie den Spaltenkopf in diesen Bereich."---------------------- RadGridView过滤器下拉项文本:“案件”GridViewClearFilter“返回”过滤器löschen“案件”GridViewFilterShowRowsWithValueThat“返回”Anzeigen der Werte Bedingung:“案件”GridViewFilterSelectAll“返回”Alles Anzeigen“案件”GridViewFilterEndsWith“返回”endmit“案件”GridViewFilterIsContainedIn“返回”Enthalten在“案件”GridViewFilterIsEqualTo“返回”Gleich“案件”GridViewFilterIsGreaterThan“返回"Grösser als" Case "GridViewFilterIsGreaterThanOrEqualTo" Return "Grösser oder gleich" Case "GridViewFilterIsGreaterThanOrEqualTo" Return "Kleiner als" Case "GridViewFilterIsNotEqualTo" Return "Ungleich" Case "GridViewFilterStartsWith" Return " beginmit " Case "GridViewFilterAnd" Return "Und" Case "GridViewFilter" Return "Filter" End Select Return mybase . getstringgoverride (key) End Function End Class
当然,如果你不想在源代码中硬编码你的翻译,你总是可以使用资源文件:
例4:在getstringgoverride()方法中使用资源文件
public override string GetStringOverride(string key) {switch(key) {//---------------------- case "GridViewClearFilter":返回GridViewResources.GridViewClearFilter;//---------------------- } 返回base.GetStringOverride(关键);}
GetStringOverride(ByVal key As String) As String选择Case key '----------------------' Case "GridViewClearFilter"返回GridViewResources。GridViewClearFilter '----------------------'结束选择Return mybase . getstringgoverride (key)结束
剩下要做的就是将我们的CustomLocalizationManager设置为LocalizationManager的static Manager属性。请注意,需要在调用受影响控件的InitializeComponent方法之前执行此分配。
例5:应用自定义LocalizationManager
LocalizationManager。Manager = new CustomLocalizationManager();InitializeComponent ();
LocalizationManager。Manager = New CustomLocalizationManager() InitializeComponent()
LocalizableResourceExtension
LocalizableResourceExtension是一个方便的标记扩展,它根据给定的键返回本地化字符串。
例6:使用LocalizableResourceExtension
. {telerik:LocalizableResource Key= " GridViewClearFilter
例7:获取自定义本地化字符串
. {telerik:LocalizableResource Key=EmployeeString}
动态定位
LocalizationManager类还公开了一个静态布尔值UseDynamicLocalization属性,您可以设置为真正的如果在运行时发生区域性更改,则更新控件。
例8:获取自定义本地化字符串
LocalizationManager。UseDynamicLocalization = true;
LocalizationManager。UseDynamicLocalization = True
使用此设置,更改文化的LocalizationManager将更新使用LocalizableResource扩展本地化的任何字符串。
例9:应用自定义LocalizationManager
LocalizationManager.Manager.Culture = new CultureInfo("de");
LocalizationManager.Manager.Culture = New CultureInfo("de")
请注意,并非所有来自WPF套件UI的控件都支持开箱即用的动态本地化。然而,你可以,编辑控件模板并尽可能使用LocalizableResourceExtension。