📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

文字列「__FORCETOC__」を「{{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This pag…
 
(同じ利用者による、間の16版が非表示)
1行目: 1行目:
== 概要 ==
== 概要 ==
リリースマネージャとして、<code>lrelease</code>と<code>lupdate</code>の2つのツールが提供されている。<br>
Qtは、Qt WidgetおよびQt Quickをローカル言語に翻訳するための優れたサポートを提供する。<br>
リリースマネージャおよび翻訳者は、Qtツールを使用して翻訳業務を行うことができる。<br>
<br>
リリースマネージャと翻訳者の業務を、以下に示す。<br>
* リリースマネージャの業務
*: リリースマネージャは、開発者と翻訳者の作業を調整する。
*:* ソースコードと翻訳を同期させるための<code>lupdate</code>コマンド
*:* リリースされたソフトウェアで使用するランタイム翻訳ファイルを作成するための<code>lrelease</code>コマンド
*: <br>
* 翻訳者の業務
*: Qt Linguistツールを使用してソフトウェア内のテキストを翻訳する。
*: テキストエディタやワードプロセッサを使用する能力以上のコンピュータ知識は不要である。
<br><br>
 
== リリースマネージャ ==
==== リリースマネージャとは ====
リリースマネージャとは、開発者と翻訳者の業務を調整する人である。<br>
<br>
リリースマネージャが使用するツールとして、<code>lrelease</code>と<code>lupdate</code>の2つのツールが提供されている。<br>
これらのツールは、QtプロジェクトファイルおよびCMakeプロジェクトファイルの処理、または、ファイルシステム上で直接操作することができる。<br>
これらのツールは、QtプロジェクトファイルおよびCMakeプロジェクトファイルの処理、または、ファイルシステム上で直接操作することができる。<br>
<br>
<br>
翻訳ファイルは、ソフトウェアにある全てのユーザー可視テキスト、[Ctrl]キーアクセラレータ、そのテキストの翻訳から構成される。<br>
翻訳ファイルは、ソフトウェアにある全てのユーザー可視テキスト、[Ctrl]キーアクセラレータ、そのテキストの翻訳から構成される。<br>
<br>
<br>
翻訳ファイルを作成する手順は、以下の通りである。<br>
翻訳ファイル(TSファイル)を作成する手順は、以下の通りである。<br>
* <code>lupdate</code>コマンドを実行して、ユーザから見えるテキストを全て含み、翻訳が無い最初の翻訳ファイル群((TSファイル群)を生成する。
# <code>lupdate</code>コマンドを実行して、ユーザから見えるテキストを全て含み、翻訳が無い最初の翻訳ファイル群((TSファイル群)を生成する。
* TSファイルを翻訳者に渡して、翻訳者はQt Linguistを使用して翻訳を追加する。<br>Qt Linguistは、変更または削除されたソーステキストを処理する。
# TSファイルを翻訳者に渡して、翻訳者はQt Linguistを使用して翻訳を追加する。<br>Qt Linguistツールを使用して、変更または削除されたソーステキストを処理する。
* <code>lupdate</code>コマンドは、データを破壊することなく、ソフトウェアのユーザビジュアルテキストと翻訳を同期させる。
# <code>lupdate</code>コマンドは、データを破壊することなく、ソフトウェアのユーザビジュアルテキストと翻訳を同期させる。
* ソフトウェアをリリースする場合、<code>lrelease</code>を実行して、TSファイルを読み込みソフトウェアで使用するQMファイルを実行時に生成する。
# ソフトウェアをリリースする場合、<code>lrelease</code>を実行して、TSファイルを読み込みソフトウェアで使用するQMファイルを実行時に生成する。
<br>
<br>
<code>lupdate</code>コマンドを使用する場合は、コンパイルする翻訳ファイル(TSファイル)を、QtプロジェクトファイルおよびCMakeプロジェクトファイルに記述する必要がある。<br>
<code>lupdate</code>コマンドを使用する場合は、コンパイルする翻訳ファイル(TSファイル)を、QtプロジェクトファイルおよびCMakeプロジェクトファイルに記述する必要がある。<br>
<br><br>
<br>


== lreleaseコマンド ==
==== lreleaseコマンド ====
<code>lrelease</code>コマンドは、TSファイルをQMファイルに変換・生成する。<br>
<code>lrelease</code>コマンドは、TSファイルをQMファイルに変換・生成する。<br>
  lrelease <Qtプロジェクトファイルのパス>
  lrelease <Qtプロジェクトファイルのパス>
32行目: 50行目:
<br>
<br>
その他のオプションを知りたい場合は、<code>lrelease -help</code>コマンドを実行すること。<br>
その他のオプションを知りたい場合は、<code>lrelease -help</code>コマンドを実行すること。<br>
<br><br>
<br>
 
==== lupdateコマンド ====
== lupdateコマンド ==
<code>lupdate</code>コマンドは、指定されたソースファイル、ヘッダファイル、Qtデザイナーインターフェイスファイルの中から翻訳可能な文字列を見つけて、<br>
<code>lupdate</code>コマンドは、指定されたソースファイル、ヘッダファイル、Qtデザイナーインターフェイスファイルの中から翻訳可能な文字列を見つけて、<br>
TSファイル(翻訳ファイル)からQMファイルへ生成または更新する。<br>
TSファイル(翻訳ファイル)からQMファイルへ生成または更新する。<br>
77行目: 94行目:
<br>
<br>
その他のオプションを知りたい場合は、<code>lupdate -help</code>コマンドを実行すること。<br>
その他のオプションを知りたい場合は、<code>lupdate -help</code>コマンドを実行すること。<br>
<br><br>
<br>
 
==== 未完成の翻訳 ====
== 未完成の翻訳 ==
<code>lrelease</code>コマンドおよび<code>lupdate</code>コマンドは、TSファイルの翻訳が不完全な場合でも使用することができる。<br>
<code>lrelease</code>コマンドおよび<code>lupdate</code>コマンドは、TSファイルの翻訳が不完全な場合でも使用することができる。<br>
その場合、不足している翻訳箇所は、実行時にネイティブ言語のフレーズに置き換えられる。<br>
その場合、不足している翻訳箇所は、実行時にネイティブ言語のフレーズに置き換えられる。<br>
99行目: 115行目:
  TRANSLATIONS += mysoftware_en.ts \
  TRANSLATIONS += mysoftware_en.ts \
                 mysoftware_ja.ts
                 mysoftware_ja.ts
<br>
翻訳ファイル名でロケールを使用すると、Qtソフトウェアの実行時にどの言語を読み込むかを決めることができる。<br>
詳細については、[https://doc.qt.io/qt-5/qlocale.html QLocaleクラス]を参照すること。<br>
<br>
<br>
<code>lupdate</code>コマンドは、ソフトウェアからユーザーインターフェイス文字列を抽出する。<br>
<code>lupdate</code>コマンドは、ソフトウェアからユーザーインターフェイス文字列を抽出する。<br>
122行目: 141行目:
  label->setText(tr("F\374r \310lise"));
  label->setText(tr("F\374r \310lise"));
<br>
<br>
==== ソフトウェアの国際化 ====
==== ソフトウェアの国際化 ====
Qtでは、開発者以外の担当者が、様々な言語や地域に対応できるように、翻訳をできるだけ簡単に行えるようにしている。<br>
Qtでは、開発者以外の担当者が、様々な言語や地域に対応できるように、翻訳をできるだけ簡単に行えるようにしている。<br>
254行目: 274行目:
# Qtソフトウェアを実行して、文言が翻訳されているかどうかを確認する。
# Qtソフトウェアを実行して、文言が翻訳されているかどうかを確認する。
<br><br>
<br><br>
== TSファイルのフォーマット ==
Qt Linguistが使用するTSファイルのフォーマットは、DTDにより記述されている。<br>
DTDの詳細を知りたい場合は、https://www.w3.org/TR/1998/REC-xml-19980210 を確認すること。<br>
<br>
<u>このフォーマットは、今後のQtのリリースで変更される可能性があることに注意する。</u><br>
<br>
<syntaxhighlight lang="dtd">
<!--
!
! Some notes to the DTD:
!
! The location element is set as optional since it was introduced first in Qt 4.2.
! The userdata element is set as optional since it was introduced first in Qt 4.4.
! The vanished message type was introduced first in Qt 5.2.
!
-->
<!--
! Macro used in order to escape byte entities not allowed in an xml document
! for instance, only #x9, #xA and #xD are allowed characters below #x20.
-->
<!ENTITY % evilstring '(#PCDATA | byte)*' >
<!ELEMENT byte EMPTY>
<!-- value contains decimal (e.g. 1000) or hex (e.g. x3e8) unicode encoding of one char -->
<!ATTLIST byte value CDATA #REQUIRED>
<!--
! This element wildcard is no valid DTD. No better solution available.
! extra elements may appear in TS and message elements. Each element may appear
! only once within each scope. The contents are preserved verbatim; any
! attributes are dropped. Currently recognized extra tags include:
!  extra-po-msgid_plural, extra-po-old_msgid_plural
!  extra-po-flags (comma-space separated list)
!  extra-loc-layout_id
!  extra-loc-feature
!  extra-loc-blank
-->
<!ELEMENT extra-* %evilstring; >
<!ELEMENT TS (defaultcodec?, extra-**, dependencies?, (context|message)+) >
<!ATTLIST TS
          version CDATA #IMPLIED
          sourcelanguage CDATA #IMPLIED
          language CDATA #IMPLIED>
<!-- The encoding to use in the QM file by default. Default is ISO-8859-1. -->
<!ELEMENT defaultcodec (#PCDATA) >
<!ELEMENT context (name, comment?, (context|message)+) >
<!ATTLIST context
          encoding CDATA #IMPLIED>
<!ELEMENT dependencies (dependency+) >
<!ATTLIST dependency
          catalog CDATA #IMPLIED>
<!ELEMENT name %evilstring; >
<!-- This is "disambiguation" in the (new) API, or "msgctxt" in gettext speak -->
<!ELEMENT comment %evilstring; >
<!-- Previous content of comment (result of merge) -->
<!ELEMENT oldcomment %evilstring; >
<!-- The real comment (added by developer/designer) -->
<!ELEMENT extracomment %evilstring; >
<!-- Comment added by translator -->
<!ELEMENT translatorcomment %evilstring; >
<!ELEMENT message (location*, source?, oldsource?, comment?, oldcomment?, extracomment?, translatorcomment?, translation?, userdata?, extra-**) >
<!--
  ! If utf8 is "true", the defaultcodec is overridden and the message is encoded
  ! in UTF-8 in the QM file. If it is "both", both source encodings are stored
  ! in the QM file.
-->
<!ATTLIST message
          id CDATA #IMPLIED
          utf8 (true|false|both) "false"
          numerus (yes|no) "no">
<!ELEMENT location EMPTY>
<!--
  ! If the line is omitted, the location specifies only a file.
  !
  ! location supports relative specifications as well. Line numbers are
  ! relative (explicitly positive or negative) to the last reference to a
  ! given filename; each file starts with current line 0. If the filename
  ! is omitted, the "current" one is used. For the 1st location in a message,
  ! "current" is the filename used for the 1st location of the previous message.
  ! For subsequent locations, it is the filename used for the previous location.
  ! A single TS file has either all absolute or all relative locations.
-->
<!ATTLIST location
          filename CDATA #IMPLIED
          line CDATA #IMPLIED>
<!ELEMENT source %evilstring;>
<!-- Previous content of source (result of merge) -->
<!ELEMENT oldsource %evilstring;>
<!--
  ! The following should really say one evilstring macro or several
  ! numerusform or lengthvariant elements, but the DTD can't express this.
-->
<!ELEMENT translation (#PCDATA|byte|numerusform|lengthvariant)* >
<!--
  ! If no type is set, the message is "finished".
  ! Length variants must be ordered by falling display length.
  ! variants may not be yes if the message has numerus yes.
-->
<!ATTLIST translation
          type (unfinished|vanished|obsolete) #IMPLIED
          variants (yes|no) "no">
<!-- Deprecated. Use extra-* -->
<!ELEMENT userdata (#PCDATA)* >
<!--
  ! The following should really say one evilstring macro or several
  ! lengthvariant elements, but the DTD can't express this.
  ! Length variants must be ordered by falling display length.
-->
<!ELEMENT numerusform (#PCDATA|byte|lengthvariant)* >
<!ATTLIST numerusform
          variants (yes|no) "no">
<!ELEMENT lengthvariant %evilstring; >
</syntaxhighlight>
<br><br>
== テキストIDベースの翻訳 ==
テキストID翻訳機構は、ローカライゼーションのための産業用強度の高いシステムである。<br>
ソフトウェアの各テキスト(文言)には一意の識別子(テキストID)が割り当てられており、これらの識別子はプレーンテキストの代わりにソースコード内で直接使用される。<br>
このため、ユーザーインターフェースの開発者には少し手間が掛かるが、大量の翻訳済みテキストの管理が非常に容易になる。<br>
<br>
<u>※注意</u><br>
<u>1つのソフトウェアでは、プレーンテキストベースの機能のみ、または、テキストIDベースの機能のみを使用する必要がある。</u><br>
<u>これらを混在させると、翻訳されるテキストのセットが不完全なものになってしまうことに注意する。</u><br>
<br>
==== テキストIDを使用したローカライゼーション ====
プレーンテキストではなくテキストIDを使用する場合、ソフトウェアのローカライゼーションの一般的な方法は同じであるが、細部が少し異なる。<br>
<br>
* テキストIDベースの翻訳システム用の関数とマクロは、プレーンテキストシステムとは異なる。<br><code>qsTr</code>メソッドの代わりに<code>qsTrId</code>メソッド、<code>QT_TR_NOOP</code>メソッドの代わりに<code>QT_TRID_NOOP</code>マクロを使用する。
*: <br>
* プレーンテキスト文字列ではなく、テキストIDをユーザインターフェース文字列として使用する。
*: 例. <code>qsTrId("id-back-not-front")</code>
*: <br>
* テキストIDを持つコンテキストパラメータを指定することはできない。<br>同じ綴りで異なる意味を持つ単語がある場合、これらは別々のテキストIDを必要とする。
*: 例. <code>qsTrId("id-back-backstep")</code>は、バックステップの"Back"とオブジェクトの背面である"Back"を区別する。
*: <br>
* 開発において、ユーザインターフェースに表示されるテキスト(文言)は、<code>//%</code>のコメントで示される。<br>これを付加しない場合は、ユーザインターフェイスにテキストIDが表示される。<br><br>これは、パラメータを持つテキストがある場合に特に重要である。<br>コメントには、文字列中のパラメータインジケータを含める必要がある。
*: 例. <code>//% "ファイル数: %1"</code>
*: <br>
* 翻訳者に追加情報を提供する<code>//:</code>コメントは、プレーンテキストシステムでは任意である。<br><u>しかし、テキストIDベースのシステムでは、この追加情報が必須となる。</u><br>これは、追加情報が無い場合はテキストIDしか得られず、翻訳者はさらなる文脈なしに翻訳することができないかもしれないからである。<br><br>長い説明的なテキストIDを使用してコメントを使用しないこともできるが、コメントの方が理解しやすい場合がある。
<br>
下表に、テキストIDベースとプレーンテキストベースの翻訳を比較したものを示す。<br>
<center>
{| class="wikitable" | style="background-color:#fefefe;"
|+ テキストIDベースとプレーンテキストベースの翻訳の比較
|-
! style="background-color:#66CCFF;" | テキストIDベース
! style="background-color:#66CCFF;" | プレーンテキストベース
|-
|
<syntaxhighlight lang="qml">
Text {
    id: backTxt;
    //: The back of the object, not the front
    //% "Back"
    //~ Context Not related to back-stepping
    text: qsTrId("id-back-not-front");
}
</syntaxhighlight>
|
<syntaxhighlight lang="qml">
Text {
    id: backTxt;
    //: The back of the object, not the front
    //~ Context Not related to back-stepping
    text: qsTr("Back","Not front")
}
</syntaxhighlight>
|}
</center>
<br>
==== テキストIDを使用したローカライズ ====
テキストIDを使用したローカライズは、プレーンテキストの場合とほぼ同じ手順で行う。<br>
<br>
<code>lupdate</code>コマンドを使用して、TSファイルへの翻訳を行う。<br>
lupdate <Qtプロジェクトファイル>.pro
<br>
<u>※注意</u><br>
<u>翻訳ファイルのソース値はプレーンテキストではなく、テキストIDであることに注意する。</u><br>
<u>つまり、翻訳者が正しい翻訳を行うためには、説明的なテキストID、または、追加コメント、またはその両方が必要である。</u><br>
<br>
テキストIDベースのユーザインターフェイスでは、TSファイルに以下に示すようなコンテンツが含まれる。<br>
<syntaxhighlight lang="dtd">
<message id="id-back-not-front">
    <source>Back</source>
    <extracomment>The back of the object, not the front</extracomment>
    <translation type="unfinished"></translation>
    <extra-Context>Not related to back-stepping</extra-Context>
</message>
</syntaxhighlight>
<br>
<u><code>lrelease</code>コマンドを使用する場合、翻訳されたテキストのキーがプレーンテキストではなく、テキストIDに基づくことを指定する必要がある。</u><br>
<code>qsTr</code>メソッドを使用して、ソースコード内の文字列を指定した場合、<code>id</code>属性が設定されていないため、<code>lrelease</code>コマンドでは無視される。<br>
<br>
<code>lrelease</code>コマンドは、ソフトウェアのためにコンパイルされた全ての翻訳であるQMファイルを生成する。<br>
lrelease -idbased <Qtプロジェクトファイル>.pro
<br>
しかし、与えられたテキストに対して利用可能な翻訳が存在しない場合(一般的には開発の後半まで)、ユーザインターフェースにはテキストIDが表示される。<br>
ソフトウェアの評価試験向けに、<code>lrelease</code>コマンドにおいて、<code>//% <コメント></code>文を翻訳テキストとして使用して、<br>
未翻訳のテキストを確認できるように、任意のインジケータでマークすることができる。<br>
<br>
以下の例では、QMファイルを変換して、未翻訳のテキストの前に"!"を付加している。<br>
lrelease -idbased -markuntranslated ! <Qtプロジェクトファイル>.pro
<br>
==== 高度な使用方法 ====
多数のロケールを対象とするプロジェクトでは、Qtプロジェクトファイルから変数<code>TRANSLATIONS</code>を削除して、代わりに別のスクリプトで翻訳を管理することができる。<br>
このスクリプトは、希望するターゲットごとに<code>lrelease</code>コマンドおよび<code>lupdate</code>を呼び出すことができる。<br>
<br>
以下の例は、<code>lupdate</code>コマンドを実行するスクリプトである。<br>
lupdate -recursive <Qtプロジェクトのディレクトリ> -ts <Qtプロジェクトのディレクトリ>/i18n/MySoftware-text_en_ja.ts
lupdate -recursive <Qtプロジェクトのディレクトリ> -ts <Qtプロジェクトのディレクトリ>/i18n/MySoftware-text_en_fr.ts
# ...略
<br><br>
== Qt Linguistの使用方法 ==
==== Qt Linguistとは ====
Qt Linguistは、Qtソフトウェアに翻訳を追加するためのツールである。<br>
Qtのインストール後、開発ホスト上の他のソフトウェアと同様に、Qt Linguistを起動することができる。<br>
<br>
Qt Linguistのメイン画面には、メニューバーの他に下図に示す複数のビューが存在する。<br>
[[ファイル:Qt Linguist 1.png|フレームなし|中央]]
<br>
# コンテキスト : [F6]キー
#: 翻訳する文字列が出現するコンテキストを一覧から選択する。
# 文字列 : [F7]キー
#: コンテキストで見つかった翻訳可能な文字列を表示する。
# ソースとフォーム : [F9]キー
#: 現在の文字列が使用されているコンテキストのソースコードにアクセスできる場合、そのコンテキストのソースコードを表示する。
# 翻訳エリアは、文字列を翻訳するためのものである。
# フレーズと推測 : [F10]キー
#: 現在の文字列の翻訳候補を表示する。
# 警告 : [F8]キー
#: 検証テストに失敗した翻訳された文字列を表示する。
<br>
翻訳エリア(1)は常に表示されている。<br>
他のビューを表示または非表示にする場合、[表示] - [ビュー]を選択する、または、上に挙げたキーボードショートカットを使用する。<br>
ビューのタイトルバーをドラッグして、翻訳エリアの周囲やメイン画面の外側にまでビューを配置することができる。<br>
<br>
==== 翻訳 ====
===== 翻訳の手順 =====
Qt Linguistで翻訳ファイル(TSファイル)を開いて翻訳する。<br>
<br>
TSファイルは、翻訳者が読むことができるXMLファイルである。<br>
TSファイルは、通常、<code>lupdate</code>コマンドにより、作成および更新される。<br>
TSファイルが存在しない場合は、[[Qtの設定 - Qt Linguist#リリースマネージャ]]にあるTSファイルを作成する手順を参照すること。<br>
<br>
Qt Linguistは、他のソフトウェアにより生成された国際的なXML Localization Interchange File Format(XLIFF)のファイルを翻訳するためにも使用することができる。<br>
しかし、標準的なQtプロジェクトでは、TSファイル形式のみが使用される。<br>
なお、XLIFF形式のファイルに対してサポートされている最小バージョンは1.1である。<br>
<br>
Qt Linguistは、翻訳エリアに言語を表示して、それに応じて複数形の入力フィールドの数を調整する。<br>
同時に翻訳する複数のTSファイルを開く場合、各言語ごとに翻訳者と翻訳者コメント欄が表示される。<br>
位置情報の設定については、[[Qtの設定 - Qt Linguist#ターゲットロケールの変更]]を参照すること。<br>
<br>
Qtソフトウェアの開発者が、<code>QObject::tr</code>メソッドを使用している場合、そのコメントは開発者コメント欄に表示される。<br>
<br>
Qt Linguistを使用して翻訳する手順を示す。<br>
# [ファイル] - [開く]を選択して、TSファイルを読み込む。
# [コンテキスト]ビューでコンテキストを選択して、そのコンテキストにある翻訳可能な文字列が[文字列]ビューに読み込まれる。
# 文字列を選択すると、翻訳領域の原文としてコピーされる。<br>原文テキスト内の空白が視覚化されるため、テキスト内に必要な空白を確認することができる。
# [翻訳]フィールドに、現在の文字列の翻訳を入力する。<br>また、[フレーズと推測]ビューから既存の翻訳をダブルクリックして選択することもできる。<br>フレーズはフレーズ集から読み込まれ、推測はTSファイル内の類似フレーズの既存の翻訳を使用する。
# 任意ではあるが、他の翻訳者が読むためのコメントを[翻訳者コメント]フィールドに入力することもできる。
# 翻訳を受け入れる場合は、[Ctrl] + [Enter]キーを同時押下する、または、[[ファイル:Qt Linguist 2.png]]アイコンを選択する、文字列リストで選択したソース文字列の左側にあるアイコンを選択する。
# [ファイル] - [保存]を選択して、作業内容を保存する。
<br>
文字列リストの全ての文字列に、[Accepted / Correct]アイコンまたは[Accepted / Warnings]アイコンが付くまで、この処理を繰り返す。<br>
その後、次のコンテキストを選択して翻訳を続行する。<br>
<br>
原文と訳文の単語数と文字数を表示する場合は、[表示] - [統計]を選択する。<br>
<br>
[ファイル]メニューバー - [リリース]を選択することにより、現在の翻訳ファイル(TSファイル)と同じベースネームのQMファイルを作成する。<br>
なお、リリースマネージャのコマンドラインツールである<code>lrelease</code>コマンドは、全ての翻訳ファイル(TSファイル)に対して同じ機能を実行している。<br>
<br>
翻訳ファイルと翻訳を印刷する場合は、[ファイル]メニューバー - [印刷]を選択する。<br>
<br>
===== 翻訳を途中で終了する =====
途中まで翻訳したファイルを残す場合は、[Ctrl] + [L]キーを同時押下して、次の未完成の翻訳に移動する。(Next Unfinished)<br>
次の翻訳に移る場合は、[Shift] + [Ctrl] + [L]キーを同時押下する。<br>
[翻訳]メニューバーにあるメニューを選択して移動することもできる。<br>
<br>
異なるコンテキストに移動する場合は、メイン画面左にある[コンテキスト]ビューから作業するコンテキストを選択して、[文字列]ビューからソーステキストを選択する。<br>
<br>
===== 文脈によって複数の翻訳が必要なフレーズ =====
同じフレーズが2つ以上のコンテキストに矛盾なく現れることがある。<br>
<br>
あるフレーズがあるコンテキストで翻訳されると、Qt Linguistは翻訳が行われたことを記録する。<br>
翻訳者が同じフレーズを後で使用する場合、Qt Linguistは前の翻訳を翻訳候補として[フレーズと推測]ビューで提供する。<br>
<br>
あるフレーズが特定のコンテキストに複数回出現する場合、[コンテキスト]ビューには1度だけ表示されて、そのコンテキスト内の全てのフレーズに翻訳が適用される。<br>
同じフレーズを同じコンテキスト内で別の言語に翻訳する必要がある場合、開発者はそのフレーズの各出現箇所に区別するためのコメントを記述する必要がある。<br>
このようなコメントを使用する場合、重複するフレーズは[コンテキスト]ビューに表示される。<br>
<br>
開発者のコメントは、翻訳エリア内で水色の背景で表示される。<br>
<br>
===== 番号付き引数と複数形の処理 =====
いくつかのフレーズには、番号付き引数が存在する。<br>
<br>
番号付き引数は、実行時にテキストに置き換えられるプレースホルダーであり、ソース文字列の中で%記号の後に数字が続く形で表示される。<br>
<br>
例えば、ファイル%1を処理した後にファイル%2が次に処理される時、この翻訳される文字列では、%1と%2は番号付きの引数である。<br>
実行時に、%1と%2はそれぞれ最初のファイル名と2番目のファイル名に置き換えられる。<br>
同じ番号の引数が翻訳に現れなければならないが、必ずしも同じ順番である必要はない。<br>
ドイツ語への翻訳では、Datei %2 wird bearbeitet, wenn Datei %1 fertig istのように、フレーズを逆にすることができる。<br>
両方の番号の引数は翻訳に現れるが、順序は逆である。<br>
iは、引数iがソース文字列の引数列のどこに現れるかに関係なく、常に翻訳文字列の同じテキストに置き換えられる。<br>
<br>
番号付き引数の使用は、しばしば原文での複数形の使用を伴うことが多い。<br>
多くの言語では、テキストの形式は表示される値により異なり、複数の翻訳が必要になる。<br>
開発者がソースコードの文字列を正しい方法でマークアップすることにより、翻訳領域で可能な複数形のそれぞれに対するフィールドが利用できる。<br>
<br>
詳細を知りたい場合は、[https://doc.qt.io/qt-5/i18n-source-translation.html#handling-plurals 翻訳のためのソースコードの記述方法]を参照すること。<br>
<br>
===== ターゲットロケールの変更 =====
ロケール情報は、Qt Liguistの[編集] - [翻訳ファイルの設定]から明示的に設定することができる。<br>
<br>
翻訳元ファイルを開いた時、翻訳先の言語と国が明示的に設定されていない場合、Qt Linguistは翻訳元のファイル名からそれらを差し引こうとする。<br>
このため、翻訳ファイルは、次のファイル名に関する規約を守る必要がある。<br>
TSファイル名の規則:
<ソフトウェア名>_<翻訳先の言語><_国名 (国名は任意)>.ts
<翻訳先の言語>は、ISO 639の言語コード(小文字)である
<_国名>は、ISO 3166の2文字の国コード(大文字)である。
<br>
翻訳先の言語と国を解決するための上記の試みが失敗する場合は、[翻訳ファイルの設定]ウィンドウが開く。<br>
* 例1. app_de.ts
*: 翻訳先の言語をドイツ語に設定する。
*: <br>
* 例2. app_de_ch.ts
*: 翻訳先の言語をドイツ語、ターゲット国をスイスに設定する。
<br>
これは、現在のロケールの翻訳を自動的に読み込むことにも役立つ。<br>
詳細については、[[Qtの設定 - Qt Linguist#Qt Linguistのマニュアル : 開発者向け]]を参照すること。<br>
<br><br>
==== 翻訳するコンテクストの選択 ====
[コンテキスト]ビューには、翻訳する文字列が現れるコンテキストが一覧表示される。(アルファベット順)<br>
<br>
各コンテキストは、<code>QObject</code>クラスのサブクラス名である。<br>
<code>QObject</code>クラス自体のコンテキストもあり、そこにはstaticメソッドである<code>QObject::tr()</code>に渡される文字列が含まれる。<br>
また、<code><unnamed context></code>というものもあり、これは、<code>QObject</code>クラスのサブクラスではない文字列が含まれる。<br>
<br>
下表に、各コンテキストに対する現在の翻訳状態とそのアイコンを示す。<br>
<center>
{| class="wikitable" | style="background-color:#fefefe;"
|-
! style="background-color:#66CCFF;" | 状態
! style="background-color:#66CCFF;" | アイコン
! style="background-color:#66CCFF;" | 説明
|-
| Accepted / Correct || [[ファイル:Qt Linguist 3.png|フレームなし|中央]] || コンテキスト内の全ての文字列が翻訳済みであり、全ての翻訳が検証に成功していることを表す。
|-
| Accepted / Warnings || [[ファイル:Qt Linguist 4.png|フレームなし|中央]] || コンテキスト内の全ての文字列は翻訳済み、あるいは、翻訳済みとマークされているが、<br>少なくとも1つ以上の翻訳が検証に失敗していることを表す。<br>[文字列]ビューから、どの文字列が検証に失敗しているかどうかを確認することができる。
|-
| Not Accepted || [[ファイル:Qt Linguist 5.png|フレームなし|中央]] || コンテキスト内の少なくとも1つの文字列が翻訳されていない、または、翻訳済みとマークされていないことを表す。
|-
| Obsolete || [[ファイル:Qt Linguist 6.png|フレームなし|中央]] || 翻訳された文字列は、コンテキストには現れない。<br>これは、コンテキスト自体がQtソフトウェアに存在しないことを意味する。
|}
</center>
<br>
[コンテキスト]ビューの[項目数]列には、コンテキスト内の翻訳可能な文字列の総数と翻訳された文字列の数が、スラッシュ(/)で区切って表示される。<br>
数値が等しい場合、コンテキスト内の翻訳可能な文字列は、全て翻訳されている。<br>
<br>
==== 翻訳する文字列の選択 ====
[文字列]ビューには、現在のコンテキストで見つかった翻訳可能な全ての文字列と、その翻訳受け入れ状態の一覧が表示される。<br>
文字列を選択する場合、その文字列が翻訳領域の現在の文字列になる。<br>
<br>
文字列の左にあるアイコンを選択すると、その文字列の翻訳受け入れ状態を変更することができる。<br>
緑または黄色のチェックマークは、その文字列が翻訳されて翻訳が承認されたことを意味する。<br>
[?]マークは、翻訳が受理されていない、または、その文字列に翻訳が存在しないことを意味する。<br>
<br>
下表に、各文字列に対する現在の翻訳状態とそのアイコンを示す。<br>
<center>
{| class="wikitable" | style="background-color:#fefefe;"
|-
! style="background-color:#66CCFF;" | 状態
! style="background-color:#66CCFF;" | アイコン
! style="background-color:#66CCFF;" | 説明
|-
| Accepted / Correct || [[ファイル:Qt Linguist 3.png|フレームなし|中央]] || 文字列に訳語がある。(空の可能性もある)<br>ユーザが翻訳を受け入れて、その翻訳が全ての検証に合格していることを表す。<br><br>訳文が空の場合、ユーザは訳文を空のままにすることを選択したことになる。<br>アイコンを選択すると、翻訳の受け入れが取り消されて、[コンテキスト]ビューの[項目数]列にある受け入れられた翻訳の数が1つ減る。<br><br>文字列に翻訳がある場合は<code>Not Accepted</code>、文字列の翻訳が空の場合は<code>No Translation</code>に状態がリセットされる。<br><br><code>lupdate</code>コマンドにより文字列の内容を変更した場合、その受け入れ状態は自動的に<code>Not Accepted</code>にリセットされる。
|-
| Accepted / Warnings || [[ファイル:Qt Linguist 4.png|フレームなし|中央]] || ユーザが翻訳を承認したが、翻訳が全ての検証に合格していないことを表す。<br>検証の不合格は、[警告]ビューに表示される。<br><br>アイコンを選択して、翻訳文の受理を取り消すこともできる。<br>その時、状態が[検証失敗]にリセットされて、[コンテキスト]ビューの[項目数]列の受け入れ翻訳数が1つ減る。
|-
| Not Accepted || [[ファイル:Qt Linguist 5.png|フレームなし|中央]] || この文字列には、全ての検証に合格した翻訳があるが、ユーザはまだその翻訳を受け入れていないことを表す。<br>アイコンを選択する、または、[Ctrl] + [Enter]キーを同時押下して、翻訳を承認する。<br>この時、状態が[Accepted / Correct]にリセットされて、[Context]ビューの[項目数]列の受理された翻訳文の数が1つ増える。
|-
| No Translation || [[ファイル:Qt Linguist 7.png|フレームなし|中央]] || この文字列には訳語が存在しないことを表す。<br>アイコンを選択することにより、空の翻訳を受け入れることができる。<br>この時、状態が[Accepted / Correct]にリセットされて、[Context]ビューの[項目数]列の受理された翻訳文の数が1つ増える。
|-
| Validation Failures || [[ファイル:Qt Linguist 8.png|フレームなし|中央]] || 文字列には訳語が存在するが、その翻訳が全ての検証に合格していないことを表す。<br>検証に失敗した場合は、[警告]ビューに表示される。<br><br>アイコンを選択する、または、[Ctrl] + [Return]キーを同時押下して、検証に失敗した場合でも翻訳を受け入れることができる。<br>この時、状態は[Accepted / Warnings]にリセットされる。<br><br><u>ただし、検証失敗の原因を修正するために、翻訳を編集することを推奨する。</u><br><br>全ての失敗が修正された時、状態は自動的に[Not Accepted]にリセットされる。
|-
| Obsolete || [[ファイル:Qt Linguist 6.png|フレームなし|中央]] || この文字列は廃止された(コンテキストで使用されなくなった)ことを表す。<br>廃止されたメッセージをファイルから削除する方法については、[[Qtの設定 - Qt Linguist#リリースマネージャ]]を参照すること。
|}
</center>
<br>
==== 文字列のコンテキストの表示 ====
翻訳可能な文字列を含むソースコードファイルがQt Linguistで利用可能な場合、[ソースとフォーム]ビューは[文字列]ビューに現在の文字列のソースコンテキストを表示する。<br>
現在の文字列を含むソースコードの行が表示されて、ハイライトされる。<br>
<br>
ソースコードの文字列を含むファイルが見つからない場合は、予想される絶対ファイルパスが表示される。<br>
<br>
ソースコンテキストに間違ったソースコードの行が表示された場合、恐らく翻訳ファイルとソースコードファイルの同期が取れていないことを意味する。<br>
翻訳ファイルとソースコードファイルを再同期する方法については、[[Qtの設定 - Qt Linguist#lupdateコマンド]]を参照すること。<br>
<br>
Qt Designerで作成されたフォームは、特別なUIファイルに保存される。<br>
Qt Linguistは、翻訳処理中にUIファイルが利用可能であれば、UIファイルを利用して、これまでに行われた翻訳をフォーム自体に表示させることができる。<br>
<br>
==== 翻訳の再利用 ====
===== 翻訳の再利用とは =====
翻訳されたテキストが原文と類似している場合、[翻訳]メニューバー - [ソーステキストからコピー]([Ctrl] + [B]キー)を選択して、ソーステキストを翻訳領域にコピーする。<br>
<br>
Qt Linguistでは、一貫性を確保するために、共通の翻訳セットを提供するフレーズブックを使用する。<br>
フレーズブックは、ソースフレーズ、ターゲット(翻訳)フレーズ、オプションの定義のセットである。<br>
<br>
通常、1つの言語とQtソフトウェアファミリーにつき、1つのフレーズブックが作成される。<br>
フレーズブックは、Qtソフトウェアファミリーの翻訳をフレーズブックで1度作成すればよいため、重複作業を避けるためにも使用できる。<br>
<br>
[文字列]ビューの現在の文字列において、読み込まれた1つまたは複数のフレーズブックに表示されている場合、<br>
[フレーズと推測]ビューに現在の文字列とそのフレーズブックの翻訳の一覧が表示される。<br>
現在の文字列が、既に翻訳されている他の文字列と同じ、または、類似している場合、その他の文字列とその翻訳もこのビューに表示される。<br>
<br>
[フレーズと推測]ビューから翻訳エリアに翻訳をコピーする場合は、[翻訳]をダブルクリックする、または、[翻訳]を選択して[Enter]キーを押下する。<br>
<br>
===== 一括翻訳 =====
Qt Linguistの一括翻訳機能を使用して、フレーズブックにあるソーステキストを自動的に翻訳することができる。<br>
一括翻訳プロセスにおいて、どのフレーズブックをどのような順序で使用するかを設定するには、[編集]メニューバー - [一括翻訳]を選択する。<br>
<br>
現在翻訳されていない項目のみを考慮するかどうか、また、一括翻訳された項目を[Accepted]としてマークするかどうかを指定することができる。<br>
<br>
===== フレーズブックの作成と編集 =====
フレーズブックのファイルは、標準フレーズとその翻訳を含む人が読むことのできるXMLファイルである。<br>
このファイルは、Qt Linguistにより作成および更新されて、多くのプロジェクトやソフトウェアで使用することができる。<br>
<br>
新しいフレーズブックを作成する場合は、[フレーズ]メニューバー - [新しいフレーズブック]を選択する。<br>
<br>
フレーズブックを開く場合は、[フレーズ]メニューバー - [フレーズブック開く]を選択して、Qtフレーズブックファイル(.qph)を選択する。<br>
開いているフレーズブックを表示および変更する場合は、[フレーズ]メニューバー - [フレーズブックを編集]を選択する。
新しいフレーズを追加する場合は、フレーズブックダイアログの[新しい項目]ボタンを押下して、新しいソースフレーズ、訳語、任意の定義を入力する。<br>
これは、同じソースフレーズの異なる翻訳を区別することに対して便利である。<br>
<br>
作業中の翻訳を現在のフレーズブックに追加する場合は、[フレーズ]メニューバー - [フレーズブックに追加]を選択する。<br>
複数のフレーズブックが読み込まれている場合は、1つ選択する必要がある。<br>
<br>
[フレーズと推測]ビューに表示されているフレーズブックのエントリーでエラーを検出した場合、そのエントリを右クリックして[編集]を選択することにより、その場で編集することもできる。<br>
編集後、[Enter]キーを押下して編集モードを終了する。<br>
<br>
フレーズを削除する場合は、[ソースフレーズ]リストからフレーズを選択して、[エントリーを削除]を選択する。<br>
<br>
フレーズブックを印刷する場合は、[フレーズ]メニューバー - [フレーズブックを印刷]を選択する。<br>
<br>
==== 翻訳の検証 ====
Qt Linguistは、翻訳に対して、以下の検証機能を提供する。<br>
* アクセラレータ検証では、原文のフレーズにアンパサンドがある場合に翻訳フレーズが検出されて、その逆も検出される。
* 句読点検証では、ソースフレーズと翻訳フレーズの終端句の違いが重要である場合に、その違いを検出する。<br>例えば、ソースフレーズの末尾に省略記号、感嘆符、疑問符があり、翻訳フレーズには無い場合、または、その逆の場合に警告が表示される。
* フレーズ検証は、フレーズ集にもある原文のフレーズにおいて、フレーズ集に記載されている訳語と異なるものを検出する。
* プレースマーカー検証は、原文と訳文の両方で同じ変数(%1、%2等)が使用されているかどうかを検出する。
<br>
検証の有効 / 無効を切り替える場合は、[検証]を選択する、または、ツールバーのボタンを選択する。<br>
<br>
検証で不合格になった文字列には、[文字列]ビューで[検証不合格]アイコンが表示される。<br>
受理された文字列には、[Accepted / Warnings]のマーク([[ファイル:Qt Linguist 4.png]])が付く。<br>
<br>
検証を無効にして、後で有効にする場合、Qt Linguistは全てのフレーズを再検証して、検証に失敗したフレーズをマークする。<br>
<br>
現在の文字列に入力した翻訳において、検証のいずれかに失敗した場合は、その失敗が警告ビューにリストアップされる。<br>
これらの失敗におけるメッセージは、メイン画面下部にあるステータスバーにも表示される。<br>
<br>
==== 複数言語の同時翻訳 ====
Qt Linguistは、複数の翻訳ファイルを同時に読み込んで編集することができる。<br>
<br>
下図は、英語と日本語の翻訳ファイルを読み込んだ状態である。<br>
<br>
翻訳エリアには、英語と日本語のテキスト編集エリアがあり、これらは色分けされている。<br>
[コンテキスト]ビューと[文字列]ビューでは、ステータス欄が1つから2つになり、同じ色で色分けされている。<br>
<br>
[コンテキスト]ビューの[項目数]列には、両方の言語の値が組み合わされている。<br>
翻訳可能な文字列の数が受理された文字列の数と一致しない場合、どちらかの言語または両方の言語に、翻訳または受理が必要な文字列がある。<br>
[文字列]ビューには、各言語の各文字列の翻訳受け入れ状態が表示される。<br>
<br><br>
{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}


__FORCETOC__
__FORCETOC__
[[カテゴリ:Qt]]
[[カテゴリ:Qt]]