Hindi/Marathi 音译 ASP.NET 自定义控件






4.73/5 (17投票s)
使用 Google 音译 API 在 ASP.NET 中创建 Hindi 音译控件
引言
什么是 ASP.NET 自定义控件
与用户控件不同,自定义控件被精简为一个编译后的类。界面(HTML 和 JavaScript)是通过编程方式编写的,而不是在 IDE 中进行可视化创建。您可以将 .NET 编程模型的丰富性与所需的任何复杂界面融合到您的代码中。由于自定义控件包含在一个类中,因此您可以访问 .NET Framework 的所有功能,可以定义属性,也可以实现函数。事实上,ASP.NET 和 Visual Studio.NET 随附的服务器控件本质上就是自定义控件。它们是编译后的类,当放置在页面上时,它们会相互交互,与页面交互(利用 OnLoad
等事件),生成 HTML 和脚本,并提供 ASP.NET 技术背后的强大功能。
微软预构建的服务器控件与我们的自定义控件之间的唯一区别在于,它们预先在 IDE 中注册供使用(System.Web.dll 文件已在工具箱中注册),并且 HTML 中的引用是隐含的(如与用户控件的讨论)。显然,微软的控件考虑周全,并设计成能高效地协同工作。例如,SQLDataAdapter
、DataSet
和 DataGrid
控件彼此之间配合得非常紧密。您的自定义控件更有可能专注于一个特定的功能,而不用担心如此程度的交互。那么,让我们开始构建我们的控件,将其注册到 IDE 以便使用(我们甚至将为工具箱定义一个图标),并将控件放置在页面上进行渲染。
这是使用 Google 音译 API 和键盘 API 将文本从英语音译为 Hindi 的自定义控件。
使用 Google 音译 API 在 ASP.NET 中创建 Hindi 音译控件。
完整的自定义控件源代码以及 bin 文件夹中的 DLL 都包含在内。
注意:此控件使用 Google 音译 API,因此需要 Internet 连接才能访问 Google JavaScript 库。
使用 Google 音译 API 在 ASP.NET 中创建音译服务器控件
您可以在页面上使用该控件。打开 VS.NET IDE 的新实例,点击 新建项目 按钮,然后在 Visual C# 项目 文件夹中选择 ASP.NET Web 应用程序。将项目命名为“UsingTransliteration
”并单击确定。IDE 将创建一个新的 Web 项目。
现在我们想将我们的控件注册到工具箱,这样我们就可以简单地将其拖到设计器上。右键单击工具箱并选择 自定义工具箱。选择 .NET 组件选项卡(因为我们的控件是一个 .NET 程序集,而不是 COM 组件),然后单击 浏览 按钮。导航到我们创建的“TransliterateTextboxControl
”项目,然后向下钻取到 bin/debug 文件夹(如果您在“release”配置中构建了自定义控件项目,您也会看到一个“release”文件夹)。在那里您应该找到我们的 TransliterateTextboxControl.dll 组件。选择 TransliterateTextboxControl.dll 文件并单击 确定。现在您应该在工具箱中看到带有我们自定义图标的控件。
将控件拖到已打开的 Web 窗体的正文上,然后单击 在浏览器中查看。您应该会收到一个解析器错误,说明一个依赖项未找到。这是因为虽然我们已将控件添加到工具箱,但 CLR 无法访问该代码。我们必须在项目中设置对该组件的引用并导入该类。为此,请在解决方案资源管理器中右键单击 引用 文件夹,然后单击 添加引用。显示的列表显示 IDE 识别的 .NET 组件。我们的组件尚未在此列表中,因此请单击 浏览 按钮。再次找到我们前面讨论过的名为 TransliterateTextboxControl.dll 的 .NET 组件。单击 打开,然后单击 确定。现在我们在 引用 文件夹中有了对我们控件的引用。刷新浏览器以查看控件是否呈现(由于控件已编译为 DLL 文件,因此无需重新编译)。
在 .aspx 文件中,它看起来会是这样的
<%@ Register Assembly="TransliterateTextboxControl"
Namespace="TransliterateTextboxControl" TagPrefix="cc1" %>
<cc1:TransliterateTextbox ID="TransliterateTextbox1"
runat="server" EnableKeyboard="true" KeyboardLayout="GUJARATI_PHONETIC"
DestinationLanguage="HINDI" Height="84px" Width="501px" Text="">
</cc1:TransliterateTextbox>
DestinationLanguage :: 目标音译语言也可以配置,因此您可以在以下支持的音译语言之间进行选择。
[ENGLISH, AMHARIC, ARABIC, BENGALI, GREEK, GUJARATI, HINDI, KANNADA,
MALAYALAM, MARATHI, NEPALI, PERSIAN, PUNJABI, RUSSIAN, SANSKRIT, SERBIAN,
TAMIL, TELUGU, TIGRINYA, URDU]
KeyboardLayout :: 另外,如果启用了虚拟键盘,您可以将虚拟键盘的布局配置为以下可能布局。
[ALBANIAN,ARABIC,ARMENIAN_EASTERN,ARMENIAN_WESTERN,BASQUE,BELARUSIAN,
BENGALI_PHONETIC,BOSNIAN,BRAZILIAN_PORTUGUESE,BULGARIAN,CATALAN,
CROATIAN,CZECH,CZECH_QWERTZ,DANISH,DARI,DUTCH,DEVANAGARI_PHONETIC,
ENGLISH,ESTONIAN,ETHIOPIC,FINNISH,FRENCH,GALICIAN,GEORGIAN_QWERTY,
GEORGIAN_TYPEWRITER,GERMAN,GREEK,GUJARATI_PHONETIC,GURMUKHI_PHONETIC,HEBREW,
HINDI,HUNGARIAN_101,ICELANDIC,ITALIAN,KANNADA_PHONETIC,KAZAKH,KHMER,
KOREAN,KYRGYZ,LAO,LATVIAN,LITHUANIAN,MACEDONIAN,MALAYALAM_PHONETIC,MALTESE,
MONGOLIAN_CYRILLIC,MONTENEGRIN,NORWEGIAN,ORIYA_PHONETIC,PAN_AFRICA_LATIN,
PASHTO,PERSIAN,POLISH,PORTUGUESE,ROMANI,ROMANIAN,RUSSIAN,SANSKRIT_PHONETIC,
SERBIAN_CYRILLIC,SERBIAN_LATIN,SINHALA,SLOVAK,SLOVAK_QWERTY,
SLOVENIAN,SOUTHERN_UZBEK,SPANISH,SWEDISH,TAMIL_PHONETIC,TATAR,
TELUGU_PHONETIC,THAI,TURKISH_F,TURKISH_Q,UIGHUR,UKRAINIAN_101,
URDU,UZBEK_LATIN,UZBEK_CYRILLIC_PHONETIC,UZBEK_CYRILLIC_TYPEWRITTER,
VIETNAMESE_TCVN,VIETNAMESE_TELEX,VIETNAMESE_VIQR]
现在您可以像普通文本框一样使用该控件,因为它继承了 ASP.NET 中基本文本框控件的所有成员。
您还可以动态创建 TransliterateTextbox
的实例。
// TransliterateTextboxControl.TransliterateTextbox TT =
// new TransliterateTextboxControl.TransliterateTextbox();
您可以通过以下方式获取音译后的文本
// string transliteratedText = TT.Text;
您可以通过按 Ctrl+g 来启用/禁用音译。
您还可以通过按 Ctrl+m 来显示/隐藏虚拟键盘。
我们也可以在同一页面上有多个此控件的实例,每个实例都有不同的目标音译语言和不同的虚拟键盘布局。
虚拟键盘的布局会在每个文本框获得焦点时相应地改变。
关注点
控件无法处理多个实例的原因是,每次实例化新控件时,之前实例的 JavaScript 都会被覆盖。
为了解决这个问题,我选择了将脚本标识符和独立 JavaScript 函数与控件的 clientID
连接起来的方式。
init_script.Append("function OnLoad_" + this.ClientID + "() {");
...
..
RegisterStartupScript(Type.GetType("System.String"),
"init_" + this.ClientID,init_script.ToString(), true);
...
..
这样就避免了附加 JavaScript 和 ClientScriptManager
生成的 JavaScript 的覆盖。
您还可以轻松地使此代码可配置,以处理不同的音译语言。同样,我们也可以使用 Google API 创建翻译控件。
感谢 Google.....
此控件的下一个更新将是使语言可配置…………敬请关注!您可以通过在控件中添加一个属性并将相关的语言代码附加到 API 函数来轻松地使语言可配置。
历史
经过长时间的间隔,我本月终于能够再次投入一些时间来改进此控件。
这是我之前文章的更新。主要更新包括
- 修复了同一页面上控件多个实例的问题
- 增加了屏幕虚拟键盘的配置
- 使目标音译语言可配置
- 为可配置的虚拟键盘布局提供了配置