22 TransX Utilityの使用
TransX Utilityを使用してXMLデータをデータベースに転送する方法について説明します。
22.1 TransX Utilityの概要
TransX Utilityについて説明します。
TransX Utilityを使用すると、XMLデータをデータベースに転送できます。TransXは翻訳済のシード・データおよびメッセージをデータベース・スキーマにロードするXML SQL Utility(XSU)のアプリケーションです。
TransXは、多言語Extensible Markup Language (XML)を処理する場合に特に有用です。TransXを使用すると、複数の言語でデータをデータベースに追加できます。ユーティリティは次のことを行います。
-
変数の変更、開始順序、および複数の挿入操作またはセッションを必要とするその他のStructured Query Language (SQL)文を自動的に管理します。したがって、翻訳ベンダーは、不慣れなSQLやProcedural Language/Structured Query Language (PL/SQL)スクリプトを扱う必要がありません。
-
文字エンコーディングを自動化します。したがって、データ・ファイルがXML標準に準拠している場合、不適切なエンコーディングによるロード時のエラーは発生しません。
-
翻訳する文字列を準備し、翻訳し、データベースにロードすることで、グローバリゼーションのコストを削減します。
-
翻訳データ形式エラーを最小限に抑え、データベース内の事前に指定された場所に翻訳コンテンツを正確にロードします。データが事前定義済の形式であるとき、TransX Utilityはその形式を検証します。
-
様々なグローバリゼーション・サポートの設定による構文エラーが発生しません。
-
ピース単位の
NCHAR
データに対するUNISTR
コンストラクタは不要です。
注意:
TransXは認証されたユーザーとして実行されます。注意深くデータ・ファイルをレビューして、信頼されたソースからのみデータ・ファイルをロードしてください。
22.1.1 TransX Utilityの使用の前提条件
TransX Utilityの使用の前提条件について説明します。
TransXはXSUのアプリケーションであるため、この章ではXML SQL Utility(XSU)を十分理解していることを前提とします。
関連項目
22.1.2 TransX Utilityの機能
このトピックでは、多言語データ・ロードの簡略化、簡易データ形式のサポート、およびその他のTransX Utilityの機能について説明します。
22.1.2.1 多言語データ・ロードの簡略化
従来の翻訳データのロード方法では、ロードするファイルを切り替えるときに環境変数NLS_LANG
を変更していました。これにより、クライアント・アプリケーションとデータベース・サーバーで使用される言語および地域が設定されます。また、クライアント・プログラムによって入力または表示されるデータで使用される、クライアントの文字セットも設定されます。
多言語データまたはデータの翻訳をデータベースに挿入またはエンコードする場合は、各XMLファイルを検証する必要があります。
従来の方法では、各ロード・ファイルは、それぞれの言語に適したキャラクタ・セットでエンコードされます。翻訳は、元のファイルと同じファイル形式(通常はSQLスクリプト)で実行する必要があるため、この操作が必要でした。NLS_LANG
の設定は、ファイルが言語に対応したキャラクタ・セットに適した形でロードされると同時に変更されます。この方法は、時間がかかるだけでなく、エンコーディング・メタデータがデータ自体と区別されるため、エラーが発生しやすくなります。
TransX Utilityでは、データセットと呼ばれる事前定義済の形式を持つXML文書を使用します。データセットにはエンコーディング情報およびデータが含まれ、NLS_LANG
の設定を変更せずに多言語データを転送できます。TransX Utilityを使用すると、開発グループおよび翻訳グループは、データベースへのXMLデータのロード時に正しいキャラクタ・セットを維持する必要がなくなります。
関連項目:
NLS_LANG
環境変数の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください
22.1.2.2 簡易データ形式のサポートおよびインタフェース
TransX Utilityには、コマンドライン・インタフェースおよびプログラム可能なアプリケーション・プログラミング・インタフェース(API)があります。このユーティリティは、データベースにロードされるシード・データを表す正規の方法であるデータ形式に準拠します。この形式は、わかりやすく、翻訳グループ用に簡略化されています。
フォーマット仕様は、データのロードを可能にするための、翻訳者によるデータの記述方法を定義します。データセットの値は、スカラー値で表現するか、定数、順序および問合せなどの式を使用して表現できます。
22.1.2.3 その他のTransX Utilityの機能
その他の有用なTransX Utility機能について説明します。
表22-1 TransX Utilityの機能
機能 | TransX Utility . . . |
---|---|
コマンドライン・インタフェース |
簡単に使用できるコマンドを提供します。 |
ユーザーAPI |
Java APIが表示されます。 |
検証 |
データ形式を検証し、エラーを報告します。 |
空白の処理 |
特に指定されていないかぎり、データセットに含まれる空白文字は有意とみなされません。 |
アンロード |
入力された問合せに基づいて、結果を標準データ形式にエクスポートします。 |
翻訳交換フォーマットとの親和性 |
翻訳交換フォーマットとの間で変換を行うことができます。 |
ローカライズされたユーザー・インタフェース |
多数の言語でメッセージを表示します。 |
22.2 TransX Utilityの使用: 概要
このトピックでは、TransX Utilityの使用方法について説明します。
22.2.1 TransX Utilityの使用: 基本プロセス
TransX APIの基本プロセスについて説明します。
TransXは次のAPIを介してアクセスできます。
-
oracle.xml.transx.loader
クラス: このクラスには、TransXインスタンスを取得するためのgetLoader()
があります。 -
oracle.xml.transx.TransX
インタフェース: TransXのAPIです。
図22-1に、TransX APIを使用してXMLをデータベースに転送するための基本プロセスを示します。
TransXアプリケーションの基本プロセスは、次のとおりです。
22.2.2 TransX Utilityのデモ・プログラムの実行
TransX Utilityのデモ・プログラムは、$ORACLE_HOME/xdk/demo/java/transx
にあります。
表22-3に、このユーティリティのテストに使用できるXMLファイルとプログラムを示します。
表22-3 TransX Utilityのサンプル・ファイル
ファイル | 説明 |
---|---|
|
TransXのデモの設定方法が記述されたテキスト・ファイル。 |
|
サンプル出力ファイル。次のコマンドは、emp表のすべてのデータを含む transx -s "jdbc:oracle:thin:@//myhost:1521/myservicename" user
-pw emp.xml emp
|
|
デモのために作成された表および順序を削除するSQLファイル。 |
|
JDBC接続を作成し、データベースに3つのデータセットをロードするサンプルJavaアプリケーション。 |
|
デモ・アプリケーションで使用する2つの表および順序を作成するSQLスクリプト。 |
|
サンプル・データセット。 |
サンプル・プログラムのコンパイル方法および実行方法は、README
に示されています。この場合、基本的なステップは次のようになります。
22.2.3 TransXコマンドライン・ユーティリティの使用
TransX Utilityは、Oracle Databaseにパッケージ化されています。デフォルトでは、Oracle Universal Installerを使用してディスク上にユーティリティがインストールされます。
「XDK for Javaコンポーネントの依存性」で説明しているように、TransXライブラリは$ORACLE_HOME/lib/xml.jar
(UNIXの場合)および%ORACLE_HOME%\lib\xml.jar
(Windowsの場合)です。
次の構文を使用して、オペレーティング・システムのコマンドラインからTransX Utilityを実行できます。
java oracle.xml.transx.loader
Oracle XML Developer's Kit (XDK)には、$ORACLE_HOME/bin/transx
(UNIXの場合)および%ORACLE_HOME%\bin\transx.bat
(Windowsの場合)というTransXのスクリプト・バージョンが含まれます。PATH
変数が正しく設定されている場合、次のようにTransXを実行できます。
transxoptions
parameters
transx.batoptions
parameters
たとえば、次のコマンドは有効な構文です。
transx -s "jdbc:oracle:thin:@//myhost:1521/myservicename" user -pw emp.xml emp
22.2.3.1 TransX Utilityのコマンドライン・オプション
TransX Utilityのコマンドライン・オプションについて説明します。
表22-4 TransX Utilityのコマンドライン・オプション
オプション | 意味 | 説明 |
---|---|---|
|
既存の行を更新します。 |
既存の行をスキップせず、更新します。更新操作の対象から列を除外するには、 |
|
特定の行がデータベースにすでに存在する場合に例外を戻します。 |
重複行が検出されると例外を発生させます。デフォルトでは、TransXは重複行をスキップします。データベースおよびデータセットの検索キー列(複数可)の値が同じ場合は、行が重複しているとみなします。 |
|
データベースのデータを、事前定義済の形式で出力します。 |
|
|
データベースのデータを、事前定義済の形式でファイルに保存します。 |
アンロードを実行します。TransX Utilityはデータベースへの問合せを行って、その結果を事前定義済のXML形式にフォーマットし、指定したファイル名で格納します。 |
|
ロードするXMLを出力します。 |
挿入するデータセットを正規のXSU形式で出力します。 |
|
更新のためXMLを出力します。 |
更新するデータセットを正規のXSU形式で出力します。 |
|
検証を省略します(デフォルトでは、データセットは解析時に検証されます)。 |
TransX Utilityが形式の検証(デフォルトでは実行される)をスキップします。 |
|
データ形式を検証し、ロードせずに終了します。 |
TransX Utilityが検証を行って終了します。 |
|
空白を保持します。 |
TransX Utilityが空白文字(\t、\r、\n、' 'など)を有意であるとみなします。文字列データ要素内の連続する空白文字は、デフォルトでは1つの空白文字に圧縮されます。 |
|
言語タグを大文字または小文字に設定します。 |
TransX UtilityはDLFの |
コマンドライン・オプションの例外は次のとおりです。
-
-u
と-e
は、相互に排他的です。 -
-v
は、次の例に示すとおり、後にデータを伴う唯一のオプションです。 -
-x
は、次の例に示すとおり、後に接続情報およびSQL問合せを伴う唯一のオプションです。
すべての引数を省略すると、表22-4に示した使用方法の情報が表示されます。
22.2.3.2 TransX Utilityコマンドライン・パラメータ
TransX Utilityのコマンドライン・パラメータについて説明します。
表22-5 TransXユーティリティのコマンドライン・パラメータ
パラメータ | 説明 |
---|---|
connect_string |
JDBC接続文字列。『Oracle Database JDBC開発者ガイド』を参照してください。 |
username |
データベース・ユーザー名(スキーマ)。 |
password |
データベース・ユーザーのパスワード、または「 |
datasource |
ファイル名またはURLで指定されたXML文書。 |
options |
表22-4を参照してください。 |
関連項目:
TransX
インタフェースの詳細は、Oracle Database XML Java APIリファレンスを参照してください
22.3 TransX Utilityを使用したデータのロード
Oracle TransX Utilityを使用して、多言語のデータをデータベースに移入できます。データベース・スキーマとの間でデータを送受信するには、このスキーマにマップするデータセットを作成します。TransXを使用してデータベースの翻訳済アプリケーション・メッセージを整理するシナリオについて説明します。
22.3.1 データベースへのメッセージの格納
データが特定の地域に固有のもので、共通の言語および文化的慣習を共有する場合は、ロケール固有の情報を取得できるリソース管理機能を使用してデータを編成する必要があります。多くの場合は、メンテナンスが簡単で柔軟性が高いため、データベースを使用してこのようなデータを格納します。
国際化されたシステムを構築するには、ローカライズ可能なリソースをビジネス・ロジックから切り離すことが不可欠です。このようなリソースの一般的な例として翻訳済のテキスト情報があります。
例22-1のような構造およびコンテンツを持つ表を作成し、データを挿入するとします。
エンド・ユーザーの優先言語に基づいてアプリケーションでメッセージを取得できるように、この表では列language_id
が定義されています。この列には、メッセージの言語を識別するための言語名の略称が含まれます。
例22-2に、表のサンプル・データを示します。
関連項目:
Oracleの言語の略称は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください
例22-1 表translated_messagesの構造
CREATE TABLE translated_messages ( MESSAGE_ID NUMBER(4) CONSTRAINT tm_mess_id_nn NOT NULL , LANGUAGE_ID VARCHAR2(42) , MESSAGE VARCHAR2(200) );
例22-2 translated_messagesの問合せ
MESSAGE_ID LANGUAGE_ID MESSAGE ---------- ----------- ---------------------------------- 1 us Welcome to System X 2 us Please enter username and password
22.3.2 事前定義済形式でのデータセットの作成
次の例は、translated_messages
表を表すXML文書を示しています。
「データ・ローディング・フォーマット(DLF)仕様」では、DLF言語の構文について詳しく説明しています。この言語を使用して、TransXへの入力を提供するDLF文書を作成します。
正規の形式でデータセット(入力データ)を指定すると、そのデータは、TransX Utilityによってデータベース内の指定された場所にロードされます。TransXは、データベース・オブジェクトを作成しません。したがって、データをロードする前に、表またはビューを作成する必要があります。
例22-3に、例22-1で作成したtranslated_messages
表を表すXML文書を示します。データセットは、この例ではtranslated_messages
というターゲット表の構造を反映しています。
例22-3 example.xml
<?xml version="1.0"?> <table name="translated_messages"> <!-- Specify the unique identifier --> <lookup-key> <column name="message_id" /> <column name="language_id" /> </lookup-key> <!-- Specify the columns into which data will be inserted --> <columns> <column name="message_id" type="number"/> <column name="language_id" type="string" constant="us" translate="yes"/> <column name="message" type="string" translate="yes"/> </columns> <!-- Specify the data to be inserted --> <dataset> <row> <col name="message_id">1</col> <col name="message" translation-note="dnt'X'">Welcome to System X</col> </row> <row> <col name="message_id">2</col> <col name="message">Please enter username and password</col> </row> <!-- ... --> </dataset> </table>
22.3.2.1 入力XML文書の形式
入力XML文書の形式について説明します。
例22-3のXML文書は、次のような宣言で開始します。
<?xml version="1.0"?>
ルート要素の<table>
は、表名を指定する属性を持ち、他のすべての要素を囲みます。
<table name="translated_messages"> ... </table>
「DLFの要素」で説明しているように、<table>
要素には3つのサブセクションがあります。
前述のセクションは、次のように例22-3の要素にマップします。
<lookup-key>...</lookup-key> <columns>...</columns> <dataset>...</dataset>
検索キーは、行がすでにデータベースに存在する場合、行を評価するために使用する列です。メッセージと言語識別子の対によって一意の文字列を識別する必要があるため、文書で対応する列をリストします。この場合、表translated_messages
のmessage_id
、language_id
およびmessage
列は、次のように<column>
要素の属性にマップされます。
<column name="message_id" type="number"/> <column name="language_id" type="string" constant="us" translate="yes"/> <column name="message" type="string" translate="yes"/>
列セクションは、データセット・セクションのデータ・ピースと表列のマッピングを指定するため、表構造をミラー化する必要があります。列名は、XMLデータセットおよびデータベースの全体を通じて一貫している必要があります。表22-6の<column>
属性を使用して、ロードするデータを記述できます。これらの属性は、「DLFの要素」で説明しているDLF属性のサブセットです。
表22-6 <column>の属性
属性 | 説明 | 例 |
---|---|---|
type |
データセットの列のデータ型を指定します。この属性は、データセットの |
<column name="col" type="string" /> |
constant |
定数値を指定します。各行に固定値を持つ列では、同じ値を繰り返す必要はありません。 |
<column name="col" type="string" constant="us" /> |
language |
language属性は、列が言語タグを格納する言語列であることを示します。constant属性と同様に機能します。ただし、列を宣言するロールは言語列です。 |
<column name="language" type="string" language="us" /> |
sequence |
この列に値を入力するために使用されるデータベース内の順序を指定します。 |
<column name="id" type="number" sequence="id_sq" /> |
translate |
この列またはパラメータのテキストを翻訳するかどうかを指定します。 |
<column name="msg" type="string" translate="yes"/> |
<column>
要素のconstant
属性は、<dataset>
セクション内のすべての行の対応する列に格納する値を指定します。この例では元の言語を使用しているため、language_id
列は値us
に設定されています。
言語列の定義
別の方法として、language_id
列で、constant
属性でなくlanguage
属性を使用することもできます。language
属性を持つDLFドキュメントでは、XML名前空間でlang
属性を使用できます。言語列では、プレースホルダ「%x」を使用して、ルート表要素の標準のxml:lang
属性から値を取得できます。このためtranslate="yes"
は不要です。値「%x」は変換する必要がありません。このDLFのロード結果は例10-3と同じです。
表23-10で説明しているように、type
属性の有効な値はstring
、number
、date
およびdateTime
です。これらの値はXMLスキーマ標準で定義されたデータ型に対応しているため、各データ・ピースはそれぞれのデータ型の定義に準拠する必要があります。特に、表22-7に示すようにdate
およびdateTime
データ型にInternational Organization for Standardization (ISO) 8601形式を使用することが重要です。
表22-7 dateおよびdateTimeの形式
データ型 | 形式 | 例 |
---|---|---|
date |
CCYY-MM-DD |
2009-05-20 |
dateTime |
CCYY-MM-DDThh:mm:ss |
2009-05-20T16:01:37 |
例22-5に、TransXデータセットのdateTime
データを持つ表の行の表現方法を示します。
例22-4 language属性を持つexample.xml
<?xml version="1.0"?>
<table xml:lang="us" name="translated_messages">
<!-- Specify the unique identifier -->
<lookup-key>
<column name="message_id" />
<column name="language_id" />
</lookup-key>
<!-- Specify the columns into which data will be inserted -->
<columns>
<column name="message_id" type="number"/>
<column name="language_id" type="string" language="%x"/>
<column name="message" type="string" translate="yes"/>
</columns>
<!-- Specify the data to be inserted -->
<dataset>
<row>
<col name="message_id">1</col>
<col name="message" translation-note="dnt'X'">Welcome to System X</col>
</row>
<row>
<col name="message_id">2</col>
<col name="message">Please enter username and password</col>
</row>
<!-- ... -->
</dataset>
</table>
例22-5 dateTime行
<row> <col name="article_id">12345678</col> <col name="author_id">10500</col> <col name="submission">2002-03-09T16:01:37</col> <col name="title">...</col> <!-- some columns follows --> </row>
22.3.2.2 データセットの翻訳の指定
translation
属性を使用して、列に翻訳済データが含まれるかどうかを指定できます。
これは、「DLFの属性」で説明しています。例22-3では、2つの<column>
要素が異なった方法でtranslate
属性を使用しています。language_id
列の属性は、constant
属性の値を翻訳する必要があることを指定します。
<column name="language_id" type="string" constant="us" translate="yes"/>
対照的に、次のtranslate
属性は、この列と一致する名前を持つ<dataset>
セクション内のデータの翻訳を要求します。
<column name="message" type="string" translate="yes"/>
たとえば、前述の要素は、<dataset>
セクション内の次のメッセージを翻訳する必要があることを指定します。
<col name="message" translation-note="dnt'X'">Welcome to System X</col>
<col name="message">Please enter username and password</col>
アプリケーションのメッセージを翻訳するとき、指定した語句を未翻訳のままにする必要がある場合もあります。前述の例に示したtranslation-note
属性は、この目的を果します。
Extensible Stylesheet Language Transformation (XSLT)プロセッサは、前の形式を別の形式に変換できます。これによって、ローカライゼーション・サービス・プロバイダ間で翻訳データを交換し、XMLベースの翻訳ツールで使用できます。この変換により、開発者は、リビジョンの追跡や翻訳可能な文字列の単位としての分類などのタスクを行う必要がありません。
例22-6に、翻訳後の例22-3の文書(の冒頭)を示します。
例22-7に、翻訳後の例22-4の文書を示します。先ほどの例と異なり、列定義は変更されません。
翻訳処理中にテキスト・エディタまたは従来のテキストベースの翻訳ツールを使用する場合は、文書のエンコーディングを保持することが重要です。翻訳後の文書は、元の文書とエンコーディングが異なる可能性があります。「DLFでのXML宣言」で説明しているように、翻訳済の文書のエンコーディングがUnicode以外の場合は、最初の行のXML宣言にエンコーディング宣言を追加します。Unicode以外のエンコーディングの宣言は、次のようになります。
<?xml version="1.0" encoding="ISO-8859-15"?>
翻訳処理で構文の整合性が損われていないことを確認するには、文書をXMLとして処理します。それ以外の場合は、コマンドライン・インタフェースの-v
オプションを指定して、形式を確認できます。構文エラーが存在する場合は、エラーの場所と説明が出力されます。データ転送を正常に実行するには、エラーを修正する必要があります。
例22-6 example_es.xml
<?xml version="1.0"?> <table xml:lang="es" name="translated_messages"> <!-- Specify the unique identifier --> <lookup-key> <column name="message_id" /> <column name="language_id" /> </lookup-key> <!-- Specify the columns into which data will be inserted --> <columns> <column name="message_id" type="number"/> <column name="language_id" type="string" constant="es" translate="yes"/>
例22-7 language属性を持つexample_es.xml
<?xml version="1.0"?> <table xml:lang="es" name="translated_messages"> <!-- Specify the unique identifier --> <lookup-key> <column name="message_id" /> <column name="language_id" /> </lookup-key> <!-- Specify the columns into which data will be inserted --> <columns> <column name="message_id" type="number"/> <column name="language_id" type="string" language="%x"/> ...
22.3.3 データのロード
デモ・プログラムtxdemo1.java
の使用方法について説明します。
例22-3および例22-8のサンプル文書を例22-1で作成したtranslated_messages
表にロードできます。その後、TransXデモ・ディレクトリにある例22-8のサンプル・プログラムを使用して、データをロードできます。
txdemo1.java
プログラムは次のステップを実行します。
-
TransXローダー・オブジェクトを作成します。次に例を示します。
TransX transx = loader.getLoader();
-
データ・ロード・セッションをオープンします。最初の3つのコマンドライン・パラメータは、JDBC接続文字列、データベース・ユーザー名およびデータベース・パスワードです。これらのパラメータは、
TransX.open()
メソッドに渡されます。プログラムには次の文が含まれます。transx.open( args[0], args[1], args[2] );
-
TransXローダーを構成します。重複した行をスキップし、入力データセットを検証するようにローダーを構成します。プログラムには次の文が含まれます。
transx.setLoadingMode( LoadingMode.SKIP_DUPLICATES ); transx.setValidationMode( false );
-
データをロードします。最初の3つのコマンドライン・パラメータは、接続情報を指定します。その他のパラメータは、入力XML文書を指定します。プログラムは、指定されたすべてのドキュメントに対して
load()
メソッドを起動します。for ( int i = 3 ; i < args.length ; i++ ) { transx.load( args[i] ); }
-
データ・ロード・セッションをクローズします。プログラムには次の文が含まれます。
transx.close();
javac
を使用してプログラムをコンパイルした後、コマンドラインからプログラムを実行できます。次の例では、シンJavaドライバを使用して、コンピュータmyhost
のポート1521
でインスタンスmydb
に接続します。userスキーマに接続し、XML文書example.xml
およびexample_es.xml
をロードします。
java txdemo1 "jdbc:oracle:thin:@//myhost:1521/mydb" user -pw example.xml
example_es.xml
通常、多言語ソフトウェア・システムの構築では、翻訳されたメッセージは開発の後半段階で使用可能になります。また、時が経つにつれて改善される傾向にあります。後からデータベースにメッセージを追加するには、TransX Utilityをもう一度実行して、データセット定義に新しい行を追加します。TransXは新しい行を認識し、<lookup-key>
セクションに指定された列に基づいて新しいメッセージのみを挿入します。一部のメッセージが更新された場合は、次の例に示すように-u
オプションを指定してTransXを実行し、XML内に指定されたデータで既存の行を更新します。
transx -u "jdbc:oracle:thin:@//myhost:1521/mydb" user -pw example.xml
example_es.xml
例22-8 txdemo1.java
// Copyright (c) 2001 All rights reserved Oracle Corporation import oracle.xml.transx.*; public class txdemo1 { /** * Constructor */ public txdemo1() { } /** * main * @param args * * args[0] : connect string * args[1] : username * args[2] : password * args[3+] : xml file names */ public static void main(String[] args) throws Exception { // instantiate a transx class TransX transx = loader.getLoader(); // start a data loading session transx.open( args[0], args[1], args[2] ); // specify operation modes transx.setLoadingMode( LoadingMode.SKIP_DUPLICATES ); transx.setValidationMode( false ); // load the dataset(s) for ( int i = 3 ; i < args.length ; i++ ) { transx.load( args[i] ); } // cleanup transx.close(); } }
22.3.4 データの問合せ
表translated_messages
の問合せの結果を示します。
例22-8のプログラムを使用してデータをロードした後、表translated_messages
を問い合せて、次のような結果を確認できます。
MESSAGE_ID LANGUAGE_ID MESSAGE ---------- ----------- ---------------------------------- 1 us Welcome to System X 1 es Bienvenido al Sistema X 2 us Please enter username and password 2 es Porfavor entre su nombre de usuario y su contraseña
WHERE
句でlanguage_id
およびmessage_id
列を使用して、アプリケーションで特定の言語のメッセージを取得できます。たとえば、次の問合せを実行できます。
SELECT message FROM translated_messages WHERE message_id = 2 AND language_id = 'es'; MESSAGE ---------------------------------- Porfavor entre su nombre de usuario y su contraseña