商信互联
在本地化工具利用了微软翻译的翻译服务提供商。但是,我们的本地化工具的显着特征之一就是可以使用自定义翻译服务。这意味着您可以使用其他翻译器。在此示例中,演示了自定义翻译提供程序实现。
若要创建自定义翻译提供程序,您需要创建并注册一个实现ITranslatorProvider接口的类。作为从头开始实现的替代方法,您可以创建TranslatorProviderBase类的后代,该类已经包含很多功能。此类还基于在线翻译服务,以块为单位收集本地化的值,以缩短翻译。在此示例中,我们将利用第二种方法。
TranslatorProviderBase类的后代应实现ITranslatorProvider接口的某些方法和属性,而基类未实现。
此外,需要重写ITranslatorProvider.Translate方法。
执行以下步骤来实现翻译提供程序。
将以下类添加到与平台无关的模块项目(例如MySolution.Module)中,或将新模块添加到您的解决方案中并在其中实现该类。
using DevExpress.ExpressApp.Utils;
// ...
public class MyTranslatorProvider : TranslatorProviderBase {
public MyTranslatorProvider() : base("<br />", 5000) { }
#region ITranslatorProvider Members
public override string Caption {
get { return "My Translate Provider"; }
}
public override string Description {
get { return "My Description"; }
}
public override string[] GetLanguages() {
string[] supportedLanguages = {"en", "fr", "de", "ru"};
return supportedLanguages;
}
public override string Translate(string text, string sourceLanguageCode,
string desinationLanguageCode) {
string result = "";
// Place the code that translates 'text' from 'sourceLanguageCode' to 'desinationLanguageCode' here
return result;
}
#endregion
}
Imports DevExpress.ExpressApp.Utils
' ...
Public Class MyTranslatorProvider
Inherits TranslatorProviderBase
Public Sub New()
MyBase.New("<br />", 5000)
End Sub
#Region "ITranslatorProvider Members"
Public Overrides ReadOnly Property Caption() As String
Get
Return "My Translate Provider"
End Get
End Property
Public Overrides ReadOnly Property Description() As String
Get
Return "My Description"
End Get
End Property
Public Overrides Function GetLanguages() As String()
Dim supportedLanguages() As String = {"en", "fr", "de", "ru"}
Return supportedLanguages
End Function
Public Overrides Function Translate(ByVal text As String, ByVal sourceLanguageCode As String, ByVal desinationLanguageCode As String) As String
Dim result As String = ""
' Place the code that translates 'text' from 'sourceLanguageCode' to 'desinationLanguageCode' here
Return result
End Function
#End Region
End Class
将最大块长度和分隔符传递给基类构造函数。
如果需要将本地化的值分为几个部分分别进行本地化,则也可以覆盖辅助CalculateSentences方法。例如,当翻译服务错误地处理特殊符号时,以及在您需要排除引号和其他特殊符号中包含的字符串时,这是必需的。所述TranslatorProviderBase类收集本地化的值,并把它们分成基于小零件CalculateSentences方法,然后从这些更小的部分和过程将它们与构成块翻译方法。
若要查看完整的示例,请参阅内置的BingTranslatorProvider的资源,该资源位于C:\ Program Files(x86)\ DevExpress 19.2 \ Components \ Sources \ DevExpress.ExpressApp \ DevExpress.ExpressApp.Win \ Core \ ModelEditor \ Localization \ TranslatorProviders.cs
修改模块的构造函数,以注册自定义翻译提供程序类。
public sealed partial class MySolutionModule : ModuleBase {
public MySolutionModule() {
InitializeComponent();
TranslatorProvider.RegisterProvider(new MyTranslatorProvider());
}
}
Public NotInheritable Partial Class MySolutionModule
Inherits ModuleBase
Public Sub New()
InitializeComponent()
TranslatorProvider.RegisterProvider(New MyTranslatorProvider())
End Sub
End Class