65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.73/5 (17投票s)

2010 年 3 月 23 日

CPOL

5分钟阅读

viewsIcon

115699

downloadIcon

9672

使用 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 中的引用是隐含的(如与用户控件的讨论)。显然,微软的控件考虑周全,并设计成能高效地协同工作。例如,SQLDataAdapterDataSetDataGrid 控件彼此之间配合得非常紧密。您的自定义控件更有可能专注于一个特定的功能,而不用担心如此程度的交互。那么,让我们开始构建我们的控件,将其注册到 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 函数来轻松地使语言可配置。

历史

经过长时间的间隔,我本月终于能够再次投入一些时间来改进此控件。

这是我之前文章的更新。主要更新包括

  1. 修复了同一页面上控件多个实例的问题
  2. 增加了屏幕虚拟键盘的配置
  3. 使目标音译语言可配置
  4. 为可配置的虚拟键盘布局提供了配置
© . All rights reserved.