diff options
Diffstat (limited to 'files/zh-cn/mozilla/tech/xul/tutorial/localization/index.html')
-rw-r--r-- | files/zh-cn/mozilla/tech/xul/tutorial/localization/index.html | 296 |
1 files changed, 0 insertions, 296 deletions
diff --git a/files/zh-cn/mozilla/tech/xul/tutorial/localization/index.html b/files/zh-cn/mozilla/tech/xul/tutorial/localization/index.html deleted file mode 100644 index ffa7dd99de..0000000000 --- a/files/zh-cn/mozilla/tech/xul/tutorial/localization/index.html +++ /dev/null @@ -1,296 +0,0 @@ ---- -title: 本地化 -slug: Mozilla/Tech/XUL/Tutorial/Localization -translation_of: Archive/Mozilla/XUL/Tutorial/Localization ---- -<p> </p> -<div class="prevnext"> - <p><span style="float: left;">« <a href="../../../../en/XUL_Tutorial/Creating_a_Skin" rel="internal">Previous</a></span> <span style="float: right;"><a href="../../../../en/XUL_Tutorial/Property_Files" rel="internal">Next</a> »</span></p> -</div> -<p> </p> -<p> </p> -<p>XUL 和 XML 提供的实体(entities)是一个本地化的好方法。</p> -<div id="section_1"> - <h3 class="editable" id="实体"><span>实体</span></h3> - <div class="editIcon"> - <a href="/../../../../en/XUL_Tutorial/Localization#" style="" title="Edit section"><span class="icon"><img alt="Edit section" class="sectionedit" src="../../../../skins/common/icons/icon-trans.gif"></span></a></div> - <p> 不少软件都希望将界面上的语言尽可能简单的翻译为另外的语言。通常他们会为每一种语言创建一份字符串列表,来代替在代码中进行硬编码。代码中的每一段文本都代表字符串列表中的一项, <a href="../../../../en/XML" rel="internal">XML</a> 提供的实体正好实现这一目的。</p> - <p> 如果你写过 <a href="../../../../en/HTML" rel="internal">HTML</a> 代码,你应该对实体很熟悉 , 像这样的代码 <code>&lt;</code> 和 <code>&gt;</code> 是作为“小于”和“大于”在文本中的替代出现的。XML 的语法允许你定义用户实体。你可以使用这些实体代替它实际的值,当然这个值可以是一段文本。实体可以用在任何文本应该出现的地方,包括属性。下面的例子在一个按钮中使用了实体。</p> - <pre><button label="&findLabel;"/> -</pre> - <p> 出现在按钮上的文本将是 <code>&findLabel;</code> 所代表的值。对每一种所要支持的语言需要创建一个文件包含对实体的定义。在英语中,<code>&findLabel;</code> 实体可能代表文本 "Find"。</p> -</div> -<div id="section_2"> - <h3 class="editable" id="DTD_文件"><span>DTD 文件 </span></h3> - <div class="editIcon"> - <a href="/../../../../en/XUL_Tutorial/Localization#" style="" title="Edit section"><span class="icon"><img alt="Edit section" class="sectionedit" src="../../../../skins/common/icons/icon-trans.gif"></span></a></div> - <p> 实体在 <em>Document Type Definition</em> (DTD) 文件中定义。这类文件往往用于特定 XML 文件的语法和语义的定义,当然也可以用来定义实体。在 Mozilla 的 chrome 体系中,你会在<code> locales</code> 子目录中找到 DTD 文件。对应一个XUL 文件,一般会有一个 DTD 文件 (extension <code>.dtd</code>)。</p> - <p> 如果你查看 chrome 目录,你会看到一个针对你所用语言的压缩包 (<code>en-US.jar</code> 默认是英语的语言包) 。你也可能会找到多种语言的语言包:美式英语 (en-US) 、法语 (fr)等。在这些压缩包中,你会发现它保存着每个窗口的本地化文本。这种压缩包的结构与 <a href="../../../../en/XUL_Tutorial/Creating_a_Skin" rel="internal">skins</a> 是很相似的。</p> - <p> 你可以把你定义实体的 DTD 文件放置到语言包里,一般的,你应该为每一个 XUL 文件建立一个 DTD 文件,通常使用相同的文件名但以 <code>.dtd</code> 作为后缀。因此对应我们的 findfile 对话框,我们需要一个 <code>findfile.dtd</code> 文件。</p> - <p> 对于非安装的 chrome 文件,你可以简单的把 DTD 文件放在与 XUL 相同的目录中。</p> - <div class="note"> - <strong>注意:</strong> 你需要将含有非 ASCII 字符的 DTD 文件的字符编码设为 UTF-8。也就是说你应该按照 UTF-8 格式 (<a class="external" href="http://www.mozdev.org/notes/l10n/unicode/editors-en.html" rel="external nofollow" title="http://www.mozdev.org/notes/l10n/unicode/editors-en.html">without BOM</a>)保存。参见 <a class="external" href="http://www.mozilla.org/projects/l10n/mlp_chrome.html#text" rel="external nofollow" title="http://www.mozilla.org/projects/l10n/mlp_chrome.html#text">Mozilla Language Packs</a>.</div> - <p> 一旦为你的 XUL 文件创立 DTD 文件,你应该在 XUL 文件上添加一行以声明使用 DTD 文件。否则会发生找不到实体的错误,在 XUL 文件的头部加如下一行。</p> - <pre><!DOCTYPE window SYSTEM "chrome://findfile/locale/findfile.dtd"> -</pre> - <p> 这一行表示这个 URL 被当作一个 DTD 使用。在这个例子中,我们引入了我们需要的 <code>findfile.dtd</code> 文件,这一行通常放在 <code><span class="lang lang-en"><a href="../../../../en/XUL/window" rel="internal">window</a> <span style="font-family: Verdana,Tahoma,sans-serif;">元素之前。</span></span></code></p> - <p> 你同样需要在 <a href="../../../../en/Chrome_Registration#locale" rel="internal">chrome.manifest</a> 文件中添加本地化信息,如下:</p> - <pre class="eval">locale findfile en-US locale/ -</pre> -</div> -<div id="section_3"> - <h3 class="editable" id="申明实体"><span>申明实体 </span></h3> - <div class="editIcon"> - <a href="/../../../../en/XUL_Tutorial/Localization#" title="Edit section"><span class="icon"><img alt="Edit section" class="sectionedit" src="../../../../skins/common/icons/icon-trans.gif"></span></a></div> - <p> 实体的申明使用如下语法:</p> - <pre><!ENTITY findLabel "Find"> -</pre> - <p> 上例创建了一个名为 <code>findLabel</code> 值为 "Find" 的实体,这意味着在文本中的任意位置出现的 "&findLabel;" 都将会被 "Find" 替代。注意实体申明无需反斜杠结束。在不同语言的 DTD 文件中,文件使用的不同的语言替代即可。</p> - <pre class="eval"><strong>日文:</strong> -<!ENTITY findLabel "検索"> -</pre> - <p> 例如,下面的文字:</p> - <pre><description value="&findLabel;"/> -</pre> - <p>被翻译为:</p> - <pre class="eval"><strong>英文版:</strong> -<description value="Find"/> - -<strong>日文版:</strong> -<description value="検索"/> -</pre> - <p> 你应该为你在界面中出现的每一个标签或字符串申明一个实体,在XUL文件中不应出现任何的显示文本。</p> - <p> 补充来说你可以在任何因语言不同而不同的的地方使用实体。以 <a href="../../../../en/XUL_Tutorial/Keyboard_Shortcuts" rel="internal">Access keys 及 keyboard shortcuts </a>为例。</p> - <pre class="eval"> <strong>XUL</strong> - <menuitem label="&undo.label;" accesskey="&undo.key;"/> - <strong>DTD</strong> - <!ENTITY undo.label "Undo"> - <!ENTITY undo.key "u"> -</pre> - <p> 上面的例子使用了两个实体,一个由于 Undo 菜单项的标签,第二个用于快捷键。</p> - <div class="highlight"> - <div id="section_4"> - <h3 class="editable" id="改写_Find_Files_的例子"><span>改写 Find Files 的例子</span></h3> - <div class="editIcon"> - <a href="/../../../../en/XUL_Tutorial/Localization#" title="Edit section"><span class="icon"><img alt="Edit section" class="sectionedit" src="../../../../skins/common/icons/icon-trans.gif"></span></a></div> - <p> 让我们看一看如何使用DTD文件修改我们的find files 对话框并将所有文本放在一起。整个文件列在下面。</p> - <pre class="eval"><?xml version="1.0"?> - -<?xml-stylesheet href="<a class="external" rel="freelink">chrome://global/skin/global.css</a>" type="text/css"?> -<?xml-stylesheet href="findfile.css" type="text/css"?> - -<span class="highlightred"><!DOCTYPE window SYSTEM "<a class="external" rel="freelink">chrome://findfile/locale/findfile.dtd</a>"></span> - -<window - id="findfile-window" - title="<span class="highlightred">&findWindow.title;</span>" - persist="screenX screenY width height" - orient="horizontal" - onload="initSearchList()" - xmlns="<a class="external" href="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" rel="freelink">http://www.mozilla.org/keymaster/gat...re.is.only.xul</a>"> - -<script src="findfile.js"/> - -<popupset> - <menupopup id="editpopup"> - <menuitem label="<span class="highlightred">&cutCmd.label;</span>" accesskey="<span class="highlightred">&cutCmd.accesskey;</span>"/> - <menuitem label="<span class="highlightred">&copyCmd.label;</span>" accesskey="<span class="highlightred">&copyCmd.accesskey;</span>"/> - <menuitem label="<span class="highlightred">&pasteCmd.label;</span>" accesskey="<span class="highlightred">&pasteCmd.accesskey;</span>" disabled="true"/> - </menupopup> -</popupset> - -<keyset> - <key id="cut_cmd" modifiers="accel" key="<span class="highlightred">&cutCmd.commandkey;</span>"/> - <key id="copy_cmd" modifiers="accel" key="<span class="highlightred">&copyCmd.commandkey;</span>"/> - <key id="paste_cmd" modifiers="accel" key="<span class="highlightred">&pasteCmd.commandkey;</span>"/> - <key id="close_cmd" keycode="VK_ESCAPE" oncommand="window.close();"/> -</keyset> - -<vbox flex="1"> - - <toolbox> - - <menubar id="findfiles-menubar"> - <menu id="file-menu" label="<span class="highlightred">&fileMenu.label;</span>" - accesskey="<span class="highlightred">&fileMenu.accesskey;</span>"> - <menupopup id="file-popup"> - <menuitem label="<span class="highlightred">&openCmd.label;</span>" - accesskey="<span class="highlightred">&openCmd.accesskey;</span>"/> - <menuitem label="<span class="highlightred">&saveCmd.label;</span>" - accesskey="<span class="highlightred">&saveCmd.accesskey;</span>"/> - <menuseparator/> - <menuitem label="<span class="highlightred">&closeCmd.label;</span>" - accesskey="<span class="highlightred">&closeCmd.accesskey;" key="close_cmd" oncommand="window.close();</span>"/> - </menupopup> - </menu> - <menu id="edit-menu" label="<span class="highlightred">&editMenu.label;</span>" - accesskey="<span class="highlightred">&editMenu.accesskey;</span>"> - <menupopup id="edit-popup"> - <menuitem label="<span class="highlightred">&cutCmd.label;</span>" - accesskey="<span class="highlightred">&cutCmd.accesskey;</span>" key="cut_cmd"/> - <menuitem label="<span class="highlightred">&copyCmd.label;</span>" - accesskey="<span class="highlightred">&copyCmd.accesskey;</span>" key="copy_cmd"/> - <menuitem label="<span class="highlightred">&pasteCmd.label;</span>" - accesskey="<span class="highlightred">&pasteCmd.accesskey;</span>" key="paste_cmd" disabled="true"/> - </menupopup> - </menu> - </menubar> - - <toolbar id="findfiles-toolbar"> - <toolbarbutton id="opensearch" label="<span class="highlightred">&openCmdToolbar.label;</span>"/> - <toolbarbutton id="savesearch" label="<span class="highlightred">&saveCmdToolbar.label;</span>"/> - </toolbar> - </toolbox> - - <tabbox> - <tabs> - <tab label="<span class="highlightred">&searchTab;</span>" selected="true"/> - <tab label="<span class="highlightred">&optionsTab;</span>"/> - </tabs> - - <tabpanels> - - <tabpanel id="searchpanel" orient="vertical" context="editpopup"> - - <description> - <span class="highlightred">&findDescription;</span> - </description> - - <spacer class="titlespace"/> - - <groupbox orient="horizontal"> - <caption label="<span class="highlightred">&findCriteria;</span>"/> - - <menulist id="searchtype"> - <menupopup> - <menuitem label="<span class="highlightred">&type.name;</span>"/> - <menuitem label="<span class="highlightred">&type.size;</span>"/> - <menuitem label="<span class="highlightred">&type.date;</span>"/> - </menupopup> - </menulist> - <spacer class="springspace"/> - <menulist id="searchmode"> - <menupopup> - <menuitem label="<span class="highlightred">&mode.is;</span>"/> - <menuitem label="<span class="highlightred">&mode.isnot;</span>"/> - </menupopup> - </menulist> - <spacer class="springspace"/> - - <menulist id="find-text" flex="1" - editable="true" - datasources="<a class="external" rel="freelink">file:///mozilla/recents.rdf</a>" - ref="<a class="external" href="http://www.xulplanet.com/rdf/recent/all" rel="freelink">http://www.xulplanet.com/rdf/recent/all</a>"> - <template> - <menupopup> - <menuitem label="rdf:<a class="external" href="http://www.xulplanet.com/rdf/recent#Label" rel="freelink">http://www.xulplanet.com/rdf/recent#Label</a>" uri="rdf:*"/> - </menupopup> - </template> - </menulist> - - </groupbox> - - </tabpanel> - - <tabpanel id="optionspanel" orient="vertical"> - <checkbox id="casecheck" label="<span class="highlightred">&casesensitive;</span>"/> - <checkbox id="wordscheck" label="<span class="highlightred">&matchfilename;</span>"/> - </tabpanel> - - </tabpanels> - </tabbox> - - <tree id="results" style="display: none;" flex="1"> - <treecols> - <treecol id="name" label="<span class="highlightred">&results.filename;</span>" flex="1"/> - <treecol id="location" label="<span class="highlightred">&results.location;</span>" flex="2"/> - <treecol id="size" label="<span class="highlightred">&results.size;</span>" flex="1"/> - </treecols> - - <treechildren> - <treeitem> - <treerow> - <treecell label="mozilla"/> - <treecell label="/usr/local"/> - <treecell label="<span class="highlightred">&bytes.before;</span>2520<span class="highlightred">&bytes.after;</span>"/> - </treerow> - </treeitem> - </treechildren> - </tree> - - <splitter id="splitbar" resizeafter="grow" style="display: none;"/> - - <spacer class="titlespace"/> - - <hbox> - <progressmeter id="progmeter" value="50%" style="display: none;"/> - <spacer flex="1"/> - <button id="find-button" label="<span class="highlightred">&button.find;</span>" - oncommand="doFind()"/> - <button id="cancel-button" label="<span class="highlightred">&button.cancel;</span>" - oncommand="window.close();"/> - </hbox> -</vbox> - -</window> -</pre> - <p> 每一个字符串均被实体引用代替。一个 DTD 文件被包含在XUL文件的开头。每一个被引用的实体必须在DTD文件中申明,如果发现引用的实体没有申明,则窗口不会显示。</p> - <p> 注意实体的名字并不重要,在上面的例子里实体的名字被分成几段来写,请你不要这样,请按照其他代码的书写习惯来写实体引用。</p> - <p> 你可能已经注意到里字符串 '2520 bytes' 被两个实体代替。这是因为在别的语言中可能会有不同的语法要求。比如,可能要求数字写在后面而把 'bytes' 写在前面。当然对于 KB 、MB 会有更复杂的顺序要求。</p> - <p> <font>键盘访问键</font>及快捷键也被翻译为实体因为对不同的语言这些也会不同。</p> - <p> 下面是 DTD 文件 - findfile.dtd:</p> - <pre><!ENTITY findWindow.title "Find Files"> -<!ENTITY fileMenu.label "File"> -<!ENTITY editMenu.label "Edit"> -<!ENTITY fileMenu.accesskey "f"> -<!ENTITY editMenu.accesskey "e"> -<!ENTITY openCmd.label "Open Search..."> -<!ENTITY saveCmd.label "Save Search..."> -<!ENTITY closeCmd.label "Close"> -<!ENTITY openCmd.accesskey "o"> -<!ENTITY saveCmd.accesskey "s"> -<!ENTITY closeCmd.accesskey "c"> -<!ENTITY cutCmd.label "Cut"> -<!ENTITY copyCmd.label "Copy"> -<!ENTITY pasteCmd.label "Paste"> -<!ENTITY cutCmd.accesskey "t"> -<!ENTITY copyCmd.accesskey "c"> -<!ENTITY pasteCmd.accesskey "p"> -<!ENTITY cutCmd.commandkey "X"> -<!ENTITY copyCmd.commandkey "C"> -<!ENTITY pasteCmd.commandkey "V"> -<!ENTITY openCmdToolbar.label "Open"> -<!ENTITY saveCmdToolbar.label "Save"> -<!ENTITY searchTab "Search"> -<!ENTITY optionsTab "Options"> -<!ENTITY findDescription "Enter your search criteria below and select the Find button to begin the search."> -<!ENTITY findCriteria "Search Criteria"> -<!ENTITY type.name "Name"> -<!ENTITY type.size "Size"> -<!ENTITY type.date "Date Modified"> -<!ENTITY mode.is "Is"> -<!ENTITY mode.isnot "Is Not"> -<!ENTITY casesensitive "Case Sensitive Search"> -<!ENTITY matchfilename "Match Entire Filename"> -<!ENTITY results.filename "Filename"> -<!ENTITY results.location "Location"> -<!ENTITY results.size "Size"> -<!ENTITY bytes.before ""> -<!ENTITY bytes.after "bytes"> -<!ENTITY button.find "Find"> -<!ENTITY button.cancel "Cancel"> -</pre> - <p> 现在,为一个新语言添加文本仅需创建一个新的DTD文件。使用 chrome 系统把 DTD 文件加到另一个 <code> locales</code> 中,这样同一个 XUL 文件就可以使用不同的语言。</p> - <p>Find files example so far: <span class="lang lang-en"><a class="external" href="http://developer.mozilla.org/samples/xultu/examples//findfile/findfile-locale.xul.txt" rel="external nofollow" title="http://developer.mozilla.org/samples/xultu/examples//findfile/findfile-locale.xul.txt">Source</a> </span></p> - </div> - </div> - <p> </p> - <p> 下一章,看看 <a href="../../../../en/XUL_Tutorial/Property_Files" rel="internal">property files</a>.</p> - <p> </p> - <div class="prevnext"> - <p><span style="float: left;">« <a href="../../../../en/XUL_Tutorial/Creating_a_Skin" rel="internal">Previous</a></span> <span style="float: right;"><a href="../../../../en/XUL_Tutorial/Property_Files" rel="internal">Next</a> »</span></p> - </div> - <p> </p> - <p> </p> -</div> -<p> </p> |