Actions

開発者エリア/言語ストリング: Difference between revisions

From Mahara Wiki

(completed.)
No edit summary
Line 15: Line 15:
'''例:'''
'''例:'''


<source lang="php" enclose="div">
<syntaxhighlight lang="php">
$yesstr = get_string('yes');                    // lang/en.utf8/mahara.php
$yesstr = get_string('yes');                    // lang/en.utf8/mahara.php
$clamstr = get_string('pathtoclam', 'admin');    // lang/en.utf8/admin.php
$clamstr = get_string('pathtoclam', 'admin');    // lang/en.utf8/admin.php
Line 29: Line 29:
あなたは {} タグを使ってDwoテンプレート内部から言語ストリングにもアクセスできます:
あなたは {} タグを使ってDwoテンプレート内部から言語ストリングにもアクセスできます:


<source lang="smarty" enclose="div">
<syntaxhighlight lang="smarty">
{str tag='identifier' section='section' arg1='first param value' arg2='second param value'}
{str tag='identifier' section='section' arg1='first param value' arg2='second param value'}
</source>
</source>
Line 40: Line 40:
あなたはJavaScriptでも言語ストリングを使用できます。最初にsmarty()関数に$pagestrings変数を渡して言語ストリングを読み込んでください ...
あなたはJavaScriptでも言語ストリングを使用できます。最初にsmarty()関数に$pagestrings変数を渡して言語ストリングを読み込んでください ...


<source lang="php" enclose="div">
<syntaxhighlight lang="php">
// Providing a $pagestrings variable to smarty()
// Providing a $pagestrings variable to smarty()
$pagestrings = array(
$pagestrings = array(
Line 53: Line 53:
... そして、次にJavaScriptのget_string()関数を使用して言語ストリングにアクセスできます。これは「section」セクションを除外する以外、PHPのget_string()に似ています (注意: これはあなたが2つの言語ストリングを同じIDで異なるセクションに含めないことを意味します)。また、「%s」タイプの置換パラメータのみ受け付けます。
... そして、次にJavaScriptのget_string()関数を使用して言語ストリングにアクセスできます。これは「section」セクションを除外する以外、PHPのget_string()に似ています (注意: これはあなたが2つの言語ストリングを同じIDで異なるセクションに含めないことを意味します)。また、「%s」タイプの置換パラメータのみ受け付けます。


<source lang="html4strict" enclose="div">
<syntaxhighlight lang="html4strict">
<script type="text/javascript">
<script type="text/javascript">
     alert(get_string('yes'));
     alert(get_string('yes'));
Line 68: Line 68:
この関数は非同期に動作するため、alert()およびconfirm()のコールには'''適していません'''。関数自体はユニークIDを含む&lt;span&gt;タグのプレースホルダを返します。プレースホルダはAJAXコールが戻った際に評価されたストリングと置換されます。そのため、あなたが直接alert()、confirm()またはその他の即時出力メソッドを使用する場合、ユーザには結果のストリングではなく、プレースホルダが表示されます。
この関数は非同期に動作するため、alert()およびconfirm()のコールには'''適していません'''。関数自体はユニークIDを含む&lt;span&gt;タグのプレースホルダを返します。プレースホルダはAJAXコールが戻った際に評価されたストリングと置換されます。そのため、あなたが直接alert()、confirm()またはその他の即時出力メソッドを使用する場合、ユーザには結果のストリングではなく、プレースホルダが表示されます。


<source lang="html4strict" enclose="div">
<syntaxhighlight lang="html4strict">
<script type="text/javascript">
<script type="text/javascript">
     // 正解! ページのHTMLに戻り値を挿入します
     // 正解! ページのHTMLに戻り値を挿入します
Line 82: Line 82:


言語ファイルは'''{section}.php'''のように名前付けされます。ここでの「section」はセクション値としてget_string()に渡されます。これには「$string」と呼ばれる配列にキーを追加するための一連の行が含まれます。すべてのMaharaライブラリファイルのようにウェブブラウザからのアクセスを防ぐため、[[Developer_Area/Pagetop_Constants#INTERNAL|内部定数]]のチェックから始めてください。
言語ファイルは'''{section}.php'''のように名前付けされます。ここでの「section」はセクション値としてget_string()に渡されます。これには「$string」と呼ばれる配列にキーを追加するための一連の行が含まれます。すべてのMaharaライブラリファイルのようにウェブブラウザからのアクセスを防ぐため、[[Developer_Area/Pagetop_Constants#INTERNAL|内部定数]]のチェックから始めてください。
<source lang="php" enclose="div">
<syntaxhighlight lang="php">
<?php  
<?php  
defined('INTERNAL') || die();
defined('INTERNAL') || die();
Line 104: Line 104:
まず、get_string()を使用する場合、第1カスタムパラメータとしてストリングのアイテムカウント数を渡してください:
まず、get_string()を使用する場合、第1カスタムパラメータとしてストリングのアイテムカウント数を渡してください:


<source lang="php" enclose="div">
<syntaxhighlight lang="php">
get_string('fileattachedportfolioitems', 'artefact.file', $numitems);
get_string('fileattachedportfolioitems', 'artefact.file', $numitems);
</source>
</source>


次に言語ファイルでストリング配列を作成してください。英語の場合、キーが「0」の配列のアイテムは単数形のストリング、キーが「1」の配列のアイテムは複数形となります。
次に言語ファイルでストリング配列を作成してください。英語の場合、キーが「0」の配列のアイテムは単数形のストリング、キーが「1」の配列のアイテムは複数形となります。
<source lang="php" enclose="div">
<syntaxhighlight lang="php">
$string['fileattachedtoportfolioitems'] = array(
$string['fileattachedtoportfolioitems'] = array(
     0 => 'このファイルはあなたのポートフォリオの 1 の他のアイテムに添付されています。',
     0 => 'このファイルはあなたのポートフォリオの 1 の他のアイテムに添付されています。',
Line 117: Line 117:


この構文により、英語とは異なる複数形を持つ他の言語を実装できます。それぞれの言語にはどのキーがカウント数を返すか決定するpluralfunction関数を含むlangconfig.phpファイルがあります。英語は単数形に「0」、複数形に「1」を返します。恐らく、他の言語はさらに多くまたは少ないキーを返すと思われます。そのため、別の言語パックの同じストリングは以下のようになります:
この構文により、英語とは異なる複数形を持つ他の言語を実装できます。それぞれの言語にはどのキーがカウント数を返すか決定するpluralfunction関数を含むlangconfig.phpファイルがあります。英語は単数形に「0」、複数形に「1」を返します。恐らく、他の言語はさらに多くまたは少ないキーを返すと思われます。そのため、別の言語パックの同じストリングは以下のようになります:
<source lang="php" enclose="div">
<syntaxhighlight lang="php">
$string['fileattachedtoportfolioitems'] = array(
$string['fileattachedtoportfolioitems'] = array(
     0 => 'Ta datoteka je pripeta k %s drugemu elementu v vašem listovniku.',
     0 => 'Ta datoteka je pripeta k %s drugemu elementu v vašem listovniku.',
Line 130: Line 130:
カウンタパラメータは最初のパラメータにしてください。あなたがカウンタパラメータをストリングの最初に表示したくない場合、[http://nz2.php.net/manual/en/function.sprintf.php#example-4957 sprintf位置指定子]で移動にしてください:
カウンタパラメータは最初のパラメータにしてください。あなたがカウンタパラメータをストリングの最初に表示したくない場合、[http://nz2.php.net/manual/en/function.sprintf.php#example-4957 sprintf位置指定子]で移動にしてください:


<source lang="php" enclose="div">
<syntaxhighlight lang="php">
$string['setprobationpoints'] = array(
$string['setprobationpoints'] = array(
     0 => 'Set probation points to %2$d for %1$d user.',
     0 => 'Set probation points to %2$d for %1$d user.',
Line 149: Line 149:
言語ストリングにパーセンテージ文字 (%) を表示したい場合、あなたは代わりに2文字のパーセント (%%) でエスケープする必要があります。
言語ストリングにパーセンテージ文字 (%) を表示したい場合、あなたは代わりに2文字のパーセント (%%) でエスケープする必要があります。


<source lang="php" enclose="div">
<syntaxhighlight lang="php">
$string['onehundredpercentcorrect'] = 'あなたは 100%% 正しい!';
$string['onehundredpercentcorrect'] = 'あなたは 100%% 正しい!';
</source>
</source>
Line 157: Line 157:
あなたがプレースホルダを使用した言語ストリングを記述している場合、多くの場合、sprintf()に値をストリングとしてフォーマットするように伝える「%s」で切り抜けられます。PHPはほとんどの値を適切にオートキャストします。
あなたがプレースホルダを使用した言語ストリングを記述している場合、多くの場合、sprintf()に値をストリングとしてフォーマットするように伝える「%s」で切り抜けられます。PHPはほとんどの値を適切にオートキャストします。


<source lang="php" enclose="div">
<syntaxhighlight lang="php">
$string['mynameis'] = 'こんにちは、私の名前は %s です!';
$string['mynameis'] = 'こんにちは、私の名前は %s です!';
</source>
</source>
Line 165: Line 165:
この場合、あなたは「%」の後に「.」を続けて小数点以下を「F」にできます。
この場合、あなたは「%」の後に「.」を続けて小数点以下を「F」にできます。


<source lang="php" enclose="div">
<syntaxhighlight lang="php">
$string['twodecimalpoints'] = 'この数字には小数点以下2桁あります: %.2F';
$string['twodecimalpoints'] = 'この数字には小数点以下2桁あります: %.2F';
$string['threedecimalpoints'] = 'この数字には小数点以下3桁あります: %.3F';
$string['threedecimalpoints'] = 'この数字には小数点以下3桁あります: %.3F';
Line 214: Line 214:
'''例:'''
'''例:'''


<source lang="php" enclose="div">
<syntaxhighlight lang="php">
<?php
<?php
// This file lives under /var/www/mahara/local/lang/en.utf8/mahara.php
// This file lives under /var/www/mahara/local/lang/en.utf8/mahara.php
Line 236: Line 236:
'''悪い:'''
'''悪い:'''


<source lang="php" enclose="div">
<syntaxhighlight lang="php">
<?php
<?php
// 英語では問題ありませんが、形容詞が名詞の後に続くべきスペイン語ではどうでしょう?
// 英語では問題ありませんが、形容詞が名詞の後に続くべきスペイン語ではどうでしょう?
Line 245: Line 245:
'''良い:'''
'''良い:'''


<source lang="php" enclose="div">
<syntaxhighlight lang="php">
<?php
<?php
// English: $string['coloreddog'] = '%s dog';
// English: $string['coloreddog'] = '%s dog';
Line 255: Line 255:
'''ベスト:'''
'''ベスト:'''


<source lang="php" enclose="div">
<syntaxhighlight lang="php">
<?php
<?php
// 一部の言語では「yellow」と組み合わせられた場合に「dog」が変わったり、「dog」と組み合わせられた場合に「yellow」が変わります。
// 一部の言語では「yellow」と組み合わせられた場合に「dog」が変わったり、「dog」と組み合わせられた場合に「yellow」が変わります。
Line 269: Line 269:
'''悪い:'''
'''悪い:'''


<source lang="php" enclose="div">
<syntaxhighlight lang="php">
<?php
<?php
$blogstr = get_string('blog', 'artefact.blog');
$blogstr = get_string('blog', 'artefact.blog');
Line 277: Line 277:
'''良い:'''
'''良い:'''


<source lang="php" enclose="div">
<syntaxhighlight lang="php">
<?php
<?php
$blogstr = get_string('blog', 'artefact.blog');
$blogstr = get_string('blog', 'artefact.blog');
Line 301: Line 301:
悪い:
悪い:


<source lang="php" enclose="div">
<syntaxhighlight lang="php">
<?php
<?php
// Strings are sorta grouped together by functionality, in semi-random order
// Strings are sorta grouped together by functionality, in semi-random order
Line 330: Line 330:
良い:
良い:


<source lang="php" enclose="div">
<syntaxhighlight lang="php">
<?php
<?php
// Strings are in alphabetical order by identifier
// Strings are in alphabetical order by identifier
Line 363: Line 363:


前:
前:
<source lang="php" enclose="div">
<syntaxhighlight lang="php">
$string['namedesc'] = 'The original version of the string.';
$string['namedesc'] = 'The original version of the string.';
</source>
</source>
   
   
後:
後:
<source lang="php" enclose="div">
<syntaxhighlight lang="php">
$string['namedesc1'] = 'The new version of the string, with content that should be reflected in all langpacks.';
$string['namedesc1'] = 'The new version of the string, with content that should be reflected in all langpacks.';
</source>
</source>
Line 386: Line 386:
'''例:'''
'''例:'''


<source lang="php" enclose="div">
<syntaxhighlight lang="php">
// 「下書き」チェックボックスにはフォーム名「name」、「plugintype」「pluginname」および要素名をもとにディレクトリ「artefact/blog/lang/en.utf8/help/form/editpost.draft.html」にヘルプファイルがあります。
// 「下書き」チェックボックスにはフォーム名「name」、「plugintype」「pluginname」および要素名をもとにディレクトリ「artefact/blog/lang/en.utf8/help/form/editpost.draft.html」にヘルプファイルがあります。
$form = pieform(array(
$form = pieform(array(
Line 409: Line 409:
'''例:'''
'''例:'''


<source lang="php" enclose="div">
<syntaxhighlight lang="php">
<?php
<?php
// Help file will be artefact/blog/lang/en.utf8/help/page/view.html  
// Help file will be artefact/blog/lang/en.utf8/help/page/view.html  
Line 425: Line 425:
'''例:'''
'''例:'''


<source lang="smarty" enclose="div">
<syntaxhighlight lang="smarty">
<!-- ヘルプファイルは「lang/en.utf8/help/sections/activitytpeselect.html」となります。
<!-- ヘルプファイルは「lang/en.utf8/help/sections/activitytpeselect.html」となります。
これは「plugintype='core' -->
これは「plugintype='core' -->

Revision as of 15:59, 25 February 2022

国際化 (i18n) およびローカライゼーション (l10n) の目的のため、Maharaでユーザに表示されるストリングすべてはコードに直接記述されるのではなく、「言語ストリング」に保存された上でget_string($identifier, $section)関数により表示されます。この関数は外国語の言語パックがインストールされているか確認します。また、カスタム言語ファイルが存在するか確認して、存在する場合、そのストリングを使用します。そうでない場合、コア言語ファイルに戻ります。

PHPでのget_string()の使用方法

関数get_string()には以下のパラメータがあります:

  • identifier: 言語ストリング名です。セクション内ではユニークです。identifierはPHP配列キーとして受け入れられるべきです。慣習により言語ストリング名は英語コンテンツと同じものであり、すべてスペースなしの半角英字です。ストリングの正確な表現の代わりにストリングの目的をストリング名として使用できます。
  • section: 言語ストリングが存在するファイルです。これは技術的に任意です。無視された場合、多くの一般的なコアストリングを含むデフォルトの「mahara」セクションが割り当てられます。
    • 例:
      • 'admin': コアの「admin」セクション用です。
      • 'artefact.blog': 「blog」アーティファクトプラグイン用です。
      • 'theme.primaryschool': 「primaryschool」テーマ用です。
  • params: (任意) 言語ストリングには1つまたはそれ以上のsprintf()パラメータを含めます。言語ストリング内に存在する場合、get_string() がコールされて使用するストリングを配置するためにパラメータ値との合致が要求されます。パラメータは異なる語順の言語への翻訳時に役立ちます。

例:

<syntaxhighlight lang="php"> $yesstr = get_string('yes'); // lang/en.utf8/mahara.php $clamstr = get_string('pathtoclam', 'admin'); // lang/en.utf8/admin.php $blogstr = get_string('blog', 'artefact.blog'); // artefact/blog/lang/en.utf8/artefact.blog.php $copyrightstr = get_string('feedrights','artefact.blog', $USER->displayname); // パラメータ付き言語ストリング

// 複数形ストリング。最初の変数は複数形アイテムの数です。get_stringは単一または複数のどちらを使うか決定するために変数を使用します (英語以外の言語では2つ以上の複数形が存在する場合があります)。 $updatefilesstr = get_string('updatednfiles', 'mahara', 5); </source>

Dwooテンプレートからの言語ストリング使用方法

あなたは {} タグを使ってDwoテンプレート内部から言語ストリングにもアクセスできます:

<syntaxhighlight lang="smarty"> {str tag='identifier' section='section' arg1='first param value' arg2='second param value'} </source>

これを動作させるコードは次のとおりです: htdocs/lib/dwoo/mahara/plugins/function.str.php

JavaScriptからの言語ストリングの使用方法

プリフェッチ

あなたはJavaScriptでも言語ストリングを使用できます。最初にsmarty()関数に$pagestrings変数を渡して言語ストリングを読み込んでください ...

<syntaxhighlight lang="php"> // Providing a $pagestrings variable to smarty() $pagestrings = array(

    'admin' => array(
        'discardpageedits',
        'pathtoclam'
    ),
    'mahara' => array('yes')

); </source>

... そして、次にJavaScriptのget_string()関数を使用して言語ストリングにアクセスできます。これは「section」セクションを除外する以外、PHPのget_string()に似ています (注意: これはあなたが2つの言語ストリングを同じIDで異なるセクションに含めないことを意味します)。また、「%s」タイプの置換パラメータのみ受け付けます。

<syntaxhighlight lang="html4strict"> <script type="text/javascript">

   alert(get_string('yes'));
   confirm(get_string('discardpageedits', 'first param value'));

</script> </source>

特定のJavaScriptファイルがDwooに含まれる場合にJavaScriptのget_string()で多くのJavaScriptストリングを常に使用できるようハードコードされています。このリストに関して「htdocs/lib/web.php」の関数「jsstrings」をご覧ください。

AJAX経由で動的に取得する

Mahara 15.10現在、あなたはAjax経由で動的に言語ストリングも取得できます。get_string_ajax()関数を使用してください。事前に取得した言語ストリングとは異なり、動的に取得したストリングにはセクションパラメータおよび他のパラメータを含めます。この機能はget_string_ajax()リクエストごとの結果をキャッシュします。

この関数は非同期に動作するため、alert()およびconfirm()のコールには適していません。関数自体はユニークIDを含む<span>タグのプレースホルダを返します。プレースホルダはAJAXコールが戻った際に評価されたストリングと置換されます。そのため、あなたが直接alert()、confirm()またはその他の即時出力メソッドを使用する場合、ユーザには結果のストリングではなく、プレースホルダが表示されます。

<syntaxhighlight lang="html4strict"> <script type="text/javascript">

   // 正解! ページのHTMLに戻り値を挿入します
   var noresults = get_string_ajax('noresultsfound', 'mahara');

jQuery('#notice').html('

' + noresults + '

');

   // 不正解! あなたのユーザの警告ボックスに「」が表示されます。
   alert(get_string_ajax('cannotremove', 'auth'));

</script> </source>

言語ファイルの構造

言語ファイルは{section}.phpのように名前付けされます。ここでの「section」はセクション値としてget_string()に渡されます。これには「$string」と呼ばれる配列にキーを追加するための一連の行が含まれます。すべてのMaharaライブラリファイルのようにウェブブラウザからのアクセスを防ぐため、内部定数のチェックから始めてください。 <syntaxhighlight lang="php"> <?php defined('INTERNAL') || die();

$string['changepassworddesc'] = '新しいパスワード'; $string['changepasswordotherinterface'] = 'あなたは異なるインターフェースでパスワードを変更できます。 '; $string['oldpasswordincorrect'] = 'これはあなたの現在のパスワードではありません。';

// 複数形ストリングです。英語では単数形はキー「0」にマップしてください。他の言語ではlangconfig.php内のpluralfunctionで定義しているキーにマップしてください。 $string['updatednfiles'] = array(

   0 => 'あなたは %s ファイルを更新しました。',
   1 => 'あなたは %s ファイルを更新しました。',

); </source>

複数形ストリング

正確には加算可能ストリングと読んだ方が良いのかもしれません。英語において2つの複数形があります: 単数形 (1つ) および複数形 (2つ以上)。他の言語には複数の複数形があります。例えばスロベニア語の場合、あなたが1つ、2つまたは3つ以上を持つかにより単語の末尾が異なる2通りの複数形があります。

英語とは異なる複数形を持つ言語を翻訳できるようにしたい場合、「あなたには 3 つのブログがあります/あなたには 1 つのブログがあります」のように数字でカウントできる特別な構文のストリングがあります。

まず、get_string()を使用する場合、第1カスタムパラメータとしてストリングのアイテムカウント数を渡してください:

<syntaxhighlight lang="php"> get_string('fileattachedportfolioitems', 'artefact.file', $numitems); </source>

次に言語ファイルでストリング配列を作成してください。英語の場合、キーが「0」の配列のアイテムは単数形のストリング、キーが「1」の配列のアイテムは複数形となります。 <syntaxhighlight lang="php"> $string['fileattachedtoportfolioitems'] = array(

   0 => 'このファイルはあなたのポートフォリオの 1 の他のアイテムに添付されています。',
   1 => 'このファイルはあなたのポートフォリオの %s の他のアイテムに添付されています。',

); </source>

この構文により、英語とは異なる複数形を持つ他の言語を実装できます。それぞれの言語にはどのキーがカウント数を返すか決定するpluralfunction関数を含むlangconfig.phpファイルがあります。英語は単数形に「0」、複数形に「1」を返します。恐らく、他の言語はさらに多くまたは少ないキーを返すと思われます。そのため、別の言語パックの同じストリングは以下のようになります: <syntaxhighlight lang="php"> $string['fileattachedtoportfolioitems'] = array(

   0 => 'Ta datoteka je pripeta k %s drugemu elementu v vašem listovniku.',
   1 => 'Ta datoteka je pripeta k %s drugima elementoma v vašem listovniku.',
   2 => 'Ta datoteka je pripeta k %s drugim elementom v vašem listovniku.',
   3 => 'Ta datoteka je pripeta k %s drugim elementom v vašem listovniku.',

); </source>

詳細はLanguage Packs/Plural formsおよびhttps://bugs.launchpad.net/mahara/+bug/901051をご覧ください。

カウンタパラメータは最初のパラメータにしてください。あなたがカウンタパラメータをストリングの最初に表示したくない場合、sprintf位置指定子で移動にしてください:

<syntaxhighlight lang="php"> $string['setprobationpoints'] = array(

   0 => 'Set probation points to %2$d for %1$d user.',
   1 => 'Set probation points to %2$d for %1$d users.';

); </source>

メモ: Maharaにはこのフォーマットに従わない古い複数形ストリングが相当数含まれます。あなたが古い複数形ストリングを見つけた時に直してくれると助かります。翻訳者に分かりやすくするため、正しいストリングには古いストリングとは異なるストリング名を使用してください。あなたが古いストリングのすべての参照を削除できた場合のみ、古いストリングを削除してください。

Mahara言語ストリングはsprintf()フォーマットストリングです

私たちが「%s」をプレースホルダとして使用する理由はMahara言語ストリングが表示前にPHPのsprintf()関数で渡されるからです。言い換えれば、Mahara言語ストリングは実際にはsprintf()フォーマットストリングです!

詳細なsprintf()フォーマット文法はここで確認できますが、あなたが知る必要のある内容は以下の少しだけです:

直定数 "%" を "%%" としてエスケープする

言語ストリングにパーセンテージ文字 (%) を表示したい場合、あなたは代わりに2文字のパーセント (%%) でエスケープする必要があります。

<syntaxhighlight lang="php"> $string['onehundredpercentcorrect'] = 'あなたは 100%% 正しい!'; </source>

あなたはほとんどのプレースホルダに「%s」を使用できます

あなたがプレースホルダを使用した言語ストリングを記述している場合、多くの場合、sprintf()に値をストリングとしてフォーマットするように伝える「%s」で切り抜けられます。PHPはほとんどの値を適切にオートキャストします。

<syntaxhighlight lang="php"> $string['mynameis'] = 'こんにちは、私の名前は %s です!'; </source>

小数点のプレースホルダに関して ...

「%s」を使用する主な例外はプレースホルダに小数を表示する必要がある場合で特に小数点以下の数を表示する必要がある場合です。 この場合、あなたは「%」の後に「.」を続けて小数点以下を「F」にできます。

<syntaxhighlight lang="php"> $string['twodecimalpoints'] = 'この数字には小数点以下2桁あります: %.2F'; $string['threedecimalpoints'] = 'この数字には小数点以下3桁あります: %.3F'; </source>

多くの場合、これをPHP側のみで処理した方がエラーの発生は少ないように思えますが。つまり、10進数をget_string()に渡すのではなく、 スクリプトで数値を丸めたり整形したりして文字列にキャストした後、その整形済み数値の文字列をget_string()に送信してください。

言語ファイルはどこに?

  • コア 言語ファイルは$cfg->dirroot/lang/en.utf8/{section}.phpのように配置されます。
  • プラグイン 言語ファイルは$cfg->dirroot/{plugintype}/{pluginname}/lang/en.utf8/{plugintype}.{pluginname}.phpのように配置されます。
    • プラグインをget_string()で呼び出す場合、プラグインの「セクション」は「{plugintype}.{pluginname}」のようになることに留意してください。例えば次のようになります: 「artefact.blog」「import.leap2a」「blocktype.contactinfo」
    • アーティファクトに属するblocktypeのようなサブプラグインは{$cfg->dirroot}/artefact/{pluginname}/blocktype/{blockname}/lang/en.utf8/blocktype.{blockname}.phpのように配置されます。また、セクションは「blocktype.{blockname}」のようになります。
  • テーマ 言語ファイルは$cfg>->dirroot/theme/{themename}/lang/en.utf8/theme.{themename}.phpのように配置されます。
    • get_string()をコールする場合の「セクション」は「theme.{themename}」です。例えば次のようになります: "theme.raw", "theme.primaryschool"
  • 外国語 言語パックはあなたのdatarootディレクトリにインストールされます: $cfg->dataroot/langpacks/{langcode}
    • {langcode} will be the code for the language. For example "pt.utf8", "es.utf8", "en_US.utf8" etc
    • {langcode} は言語コードです。例えば次のようになります: "pt.utf8", "es.utf8", "en_US.utf8"
  • Local lang files live under $cfg->dirroot/local/lang/{langcode}/{section}.php
  • ローカル 言語ファイルは$cfg->dirroot/local/lang/{langcode}/{section}.php配下に配置されます。

翻訳

このシステムの最大のポイントはMaharaを翻訳できるようにすることです。詳細は「言語パック」ドキュメンテーションをご覧ください。基本的にはあなたがlangpacks.mahara.orgからダウンロードした言語パックを展開して「$cfg->dataroot/langpacks/」ディレクトリ内に入れてください。ユーザにはログイン画面に言語選択メニューが表示されます。

もし、特定の言語ストリングが言語パックに存在しない場合、言語が指定した親言語パックがインストールされていない限り、Maharaコアの英語言語ストリングが使用されます。

langconfig.php

言語には少ない量の設定データが含まれます。これはコア言語ファイル「langconfig.php」内にあります。以下の値は最も重要です:

  • thislanguage: 言語の言語名です。これはユーザの言語選択メニューに表示されます。
  • locale: この言語に合致するコンピュータのロケールストリング一覧です。これらがどのようなものであるかに関して他の言語パックを参照してください。
  • parentlanguage: (任意) これが提供された場合、未翻訳のMaharaストリングは親言語の翻訳を探します (親言語がインストールされている場合)。
  • pluralization:
    • 詳細はストリングの複数形 (英語) APIをご覧ください。
    • 言語パックがPOフォーマットが変換された場合、また、あなたが「Plural-Forms:」ヘッダを入れている場合、これらの値は自動的に生成されます。
    • pluralfunction: 与えられたカウントに対してどの複数形ルールを使用すべきかを示すPHP関数名です。この関数は正確に1つの整数の引数 (アイテム数) を取得してどの複数形を使用すべきかを示すキーを返します。例えば英語の場合、ルールはカウントが1の場合「0」、それ以外の場合「1」を返します。言語のすべての言語ファイルは複数の文字列を配列として定義します。この配列では関数が返せる可能性のあるそれぞれのキーに対応する値を持つこととなります。
    • pluralrule: pluralfunctionに相当するJavaScriptの関数です。これは変数「n」に格納されている整数を評価および「n」を引数として受け取った場合の複数関数と全く同じ値を返すJavaScriptのスニペットである必要があります。

/localのカスタム言語ストリング

「/local」ディレクトリのカスタム言語ストリング

多くのMaharaインストレーションではいくつかの言語ストリングのみを上書きしたい場合もあることでしょう。最も簡単なのは「/local」ディレクトリにカスタム言語ファイルを作成する方法です。存在する場合、これらのファイルのストリングはコアの言語ファイルまたは言語パックの言語ファイルのストリングに優先されます。

カスタム言語ファイルではオーバーライド対象の言語を100%翻訳する必要はありません。あなたが実際にオーバーライドしたいストリングのみカスタム言語ファイルに含めます。

例:

<syntaxhighlight lang="php"> <?php // This file lives under /var/www/mahara/local/lang/en.utf8/mahara.php defined('INTERNAL') || die();

$string['yes'] = 'Yessir!'; $string['login'] = 'Sign in!"; </source>

あなたは外国語ファイルおよびプラグイン言語ファイルを「local/lang」にも配置できます。以下すべて可能です:

  • local/lang/en.utf8/mahara.php
  • local/lang/en.utf8/blocktype.contactinfo.php
  • local/lang/pt.utf8/artefact.blog.php
  • local/lang/mi.utf8/theme.primaryschool.php

翻訳に連結は好ましくありません

異なる言語では単語の順序が異なるため、可能な限り言語ストリングの連結は避けるべきです。言語ストリングのパラメータを使用するか、複数言語文字列を使用してください。

悪い:

<syntaxhighlight lang="php"> <?php // 英語では問題ありませんが、形容詞が名詞の後に続くべきスペイン語ではどうでしょう? $yellowdogstr = get_string('yellow') . " " . get_string('dog'); $greendogstr = get_string('green') . " " . get_string('dog'); </source>

良い:

<syntaxhighlight lang="php"> <?php // English: $string['coloreddog'] = '%s dog'; // Spanish: $string['coloreddog'] = 'perro %s'; $yellowdogstr = get_string('coloreddog', 'artefact.dog', get_string('yellow')); $greendogstr = get_string('coloreddog', 'artefact.dog', get_string('green')); </source>

ベスト:

<syntaxhighlight lang="php"> <?php // 一部の言語では「yellow」と組み合わせられた場合に「dog」が変わったり、「dog」と組み合わせられた場合に「yellow」が変わります。 // 英語: $string['dogyellow'] = 'yellow dog'; // スペイン語: $string['dogyellow'] = 'perro amarillo'; // オーストラリア英語: $string['dogyellow'] = 'dingo'; $yellowdogstr = get_string('dogyellow'); $greendogstr = get_string('doggreen'); </source>

そして、似たようなことですが、もちろん、単語のパーツを連結しないてください。

悪い:

<syntaxhighlight lang="php"> <?php $blogstr = get_string('blog', 'artefact.blog'); $pluralblog = get_string('blog', 'artefact.blog') . get_string('s'); </source>

良い:

<syntaxhighlight lang="php"> <?php $blogstr = get_string('blog', 'artefact.blog'); $pluralblog = get_string('blogs', 'artefact.blog');

// また、ブログの数が決まっている場合、複数ストリングのAPIを使用してください。

$numblogs = get_blog_count(); $blogstr = get_string('nblogs', 'artefact.blog', $numblogs); </source>

この方法には言語ストリングが増えてしまうという欠点がありますが、残念ながら、文法が大きく異なる言語間で美しく翻訳をするにはこの方法しかありません。

あなたの言語ファイルをアルファベット順にする

実装上の観点からlangファイル内での言語ストリングの順序は問題ではありません。しかし、人間の読みやすさの観点から識別子のアルファベット順に並ぶべきです。

多くの開発者は機能別にグループ化したくなりますが、機能別にグループ化しても分類方法を無視した新しい文字列が追加された場合、やがて破綻してしまいます。最終的な結果はどの特定の言語ストリングもどの場所にもあり得る完全に無秩序なファイルです。これがMaharaコアのほとんどの言語ファイルの状態です。

そのため、新しい言語ファイルを作成する場合、言語文字列をアルファベット順に並べてください。もし、あなたが関連する文字列を隣り合わせになるようにしたい場合、タイプ別に分類した名前をつけてください。

悪い:

<syntaxhighlight lang="php"> <?php // Strings are sorta grouped together by functionality, in semi-random order $string['baseline'] = 'Baseline'; $string['top'] = 'Top'; $string['middle'] = 'Middle'; $string['bottom'] = 'Bottom'; $string['texttop'] = 'Text top'; $string['textbottom'] = 'Text bottom'; $string['left'] = 'Left'; $string['right'] = 'Right'; $string['src'] = 'Image URL'; $string['image_list'] = 'Attached image'; $string['alt'] = 'Description';

$string['copyfull'] = 'Others will get their own copy of your %s'; $string['copyreference'] = 'Others may display your %s in their page'; $string['copynocopy'] = 'Skip this block entirely when copying the page';

$string['viewposts'] = 'Copied entries (%s)'; $string['postscopiedfromview'] = 'Entries copied from %s';

$string['youhavenoblogs'] = 'You have no journals.'; $string['youhaveoneblog'] = 'You have 1 journal.'; $string['youhaveblogs'] = 'You have %s journals.'; </source>

良い:

<syntaxhighlight lang="php"> <?php // Strings are in alphabetical order by identifier // Strings with similar purposes have names that start with their purpose and then a // description, so that they wind up next to each other alphabetically $string['copyfull'] = 'Others will get their own copy of your %s'; $string['copynocopy'] = 'Skip this block entirely when copying the page'; $string['copyreference'] = 'Others may display your %s in their page'; $string['imagealt'] = 'Description'; $string['imagelist'] = 'Attached image'; $string['imagesrc'] = 'Image URL'; $string['positionbaseline'] = 'Baseline'; $string['positionbottom'] = 'Bottom'; $string['positionleft'] = 'Left'; $string['positionmiddle'] = 'Middle'; $string['positionright'] = 'Right'; $string['positiontextbottom'] = 'Text bottom'; $string['positiontexttop'] = 'Text top'; $string['positiontop'] = 'Top'; $string['postscopiedfromview'] = 'Entries copied from %s'; $string['viewposts'] = 'Copied entries (%s)'; $string['youhaveblogs'] = 'You have %s journals.'; $string['youhavenoblogs'] = 'You have no journals.'; $string['youhaveoneblog'] = 'You have 1 journal.'; </source>

言語ストリング変更時に翻訳者に知らせる

言語ストリングの内容を大幅に変更した場合、言語ストリングの名称も変更してください。通常、私たちはこれを文字列の後に数字を置く (または増加させる) ことで対応しています。

この理由はLaunchpadの翻訳インターフェースではストリングの英語版変更時に翻訳者には通知されないからです。言語ストリングの名称を変更することにより、翻訳されていない新しいストリングとして翻訳者にその存在を知らせることができます。

前: <syntaxhighlight lang="php"> $string['namedesc'] = 'The original version of the string.'; </source>

後: <syntaxhighlight lang="php"> $string['namedesc1'] = 'The new version of the string, with content that should be reflected in all langpacks.'; </source>

また、このストリングが使用されているPHPファイルおよびテンプレートのストリング名も必ず更新してください。

ヘルプファイル

ヘルプファイルは特殊なタイプの言語ファイルです。これはユーザがヘルプボタンをクリックしたときにポップアップするHTMLスニペット (基本的には<body>タグ内のコンテンツ) です。

いくつかの異なる方法でヘルプファイルを追加できます。主なものは以下のとおりです:

Pieformsヘルプファイル

一般的にはpieform要素定義に「'help'=>true」を追加して作成します。そして、Pieformsは「help/forms/{formname}.{elementname}.html」という名称のヘルプファイルをポップアップするためのコードを自動的に追加します。フォームに「pluginname」および「plugintype」フィールドがある場合、Pieformsはプラグインの言語ディレクトリ配下のヘルプファイルを探します。

例:

<syntaxhighlight lang="php"> // 「下書き」チェックボックスにはフォーム名「name」、「plugintype」「pluginname」および要素名をもとにディレクトリ「artefact/blog/lang/en.utf8/help/form/editpost.draft.html」にヘルプファイルがあります。 $form = pieform(array(

   'name' => 'editpost',
   'plugintype' => 'artefact',
   'pluginname' => 'blog',
   'elements' => array(
        'draft' => array(
            'type' => 'checkbox',
            'title' => get_string('draft', 'artefact.blog'),
            'description' => get_string('thisisdrafdesc', 'artefact.blog'),
            'help' => true
        )
   )

); </source>

ページヘルプファイル

ページ自体にもヘルプファイルを付加できます。ページに「SECTION_PAGE」「SECTION_PLUGINNAME」「SECTION_PLUGINTYPE」の各定数が正しく定義されている場合、smarty()によるページテンプレート設定時に「has_help_file()」関数を呼び出して「help/pages/{SECTION_PAGE}.html」にヘルプファイルが存在するかどうかチェックします。ヘルプファイルが存在する場合、ページタイトルの横にヘルプボタンが表示されます。SECTION_PLUGINNAMEおよびSECTION_PLUGINTYPEが提供された場合、プラグインのlangディレクトリ配下にあるヘルプファイルを探します。

例:

<syntaxhighlight lang="php"> <?php // Help file will be artefact/blog/lang/en.utf8/help/page/view.html define('SECTION_PLUGINTYPE', 'artefact'); define('SECTION_PLUGINNAME', 'blog'); define('SECTION_PAGE', 'view'); </source>

開発者エリア/ページトップ定数もご覧ください。

セクションヘルプファイル

ページセクションにもヘルプファイルを付加できます。これらはlangディレクトリ配下の「help/sections/」ディレクトリ内にあります。ヘルプファイルは「contextualhelp」dwooタグを使用して呼び出されます。

例:

<syntaxhighlight lang="smarty"> {contextualhelp plugintype='core' pluginname='activity' section='activitytypeselect'}」を理由としてコアlangディレクトリ配下に置かれることに留意してください。 </source>

その他?

TODO: ヘルプファイルを呼び出す方法は他にもあるのでしょうか? ヘルプアイコンを生成する関数を呼べば良いのでしょうか?

localのカスタムヘルプファイル

ヘルプファイルは/localディレクトリ内でオーバーライドできます。

  • Core ヘルプファイルはlocal/lang/en.utf8/help/{forms|pages|sections}/{filename}.html配下に設置されます。
    • 例: local/lang/en.utf8/help/forms/adduser.friendscontrol.html
  • Plugin ヘルプファイルは/local/lang/en.utf8/help/{forms|pages|sections}/{plugintype}.{pluginname}.{filename}.html配下に設置されます。
    • 例: local/lang/en.utf8/help/forms/artefact.blog.addentry.draft.html

ストリングを変更できない場合のトラブルシューティング

あなたは開発またはローカルカスタマイゼーションのためにいくつかの言語ストリングを変更しようとしています。あなたは変更をファイルに保存してページをリロードしましたが、ストリングは変更されていません。以下、考えられるいくつかの原因です:

キャッシュ済みストリング

Mahara 15.10から、Maharaはナビゲーションメニュー (いくつかの翻訳された言語文字列を含む) をデータベースにキャッシュしています。Mahara 16.10以降、これらのキャッシュされた言語ストリングをリセットするため、管理画面の「キャッシュをクリアする」ボタンまたはCLIスクリプトのhtdocs/admin/cli/clear_caches.phpを使用できます。

Mahara 15.10および16.04において「キャッシュをクリア」するボタンは実装されていません。あなたは次善策としてとして「管理」→「サイト設定」でページ下部の「変更を保存」ボタンをクリックしてキャッシュをクリアできます。これにより実際に変更を加えたかどうかにかかわらずキャッシュがクリアされます。あなたは別の方法としてhtdocs/local/version.phpのバージョン番号を上げるためのアップグレードをキャッシュクリアのトリガーにできます。

ユーザデータフィールドにコピーされたデフォルトストリング

Maharaのいくつかの言語ストリングはユーザが編集可能なデータフィールドにコピーするためのデフォルト値として使用されます。例えば「管理 -> サイトページ」上のテキストは言語ストリングから生成されますが、管理者が編集した場合、データベースに保存されます。このようなケースではオリジナルの言語ストリングを修正しても、保存されているユーザデータフィールドは更新されません。

正しいストリングが見つかりませんでした

いくつかの単語およびフレーズは異なるファイル内で複数の言語ストリングとして記述されます。正しい言語ファイルに正しいストリングが含まれているか再度確認してください。また、コアのhtdocs/langディレクトリだけではなく、プラグインのディレクトリ (artefact/annotation/lang/en.utf8等) も確認してください。

ハードコーディングされたストリング

言語ストリングが翻訳のために言語ファイルに移動されるのではなく、PHPファイルまたはDwooテンプレートへのハードコーディングはよくあるバグです。他に言語ストリングを変更できない場合、誤ってハードコーディングされていないか、言語ファイルの外を確認するのも良いかもしれません。

あなたがMahara標準ディストリビューションの一部のファイルにこの現象を見つけた場合、Mahara launchpadプロジェクトにバグとして報告してください。あなたがサードパーティ製プラグインでこの現象を見つけた場合、プラグイン開発者にご連絡ください。