textdomain
(PHP 4, PHP 5, PHP 7, PHP 8)
textdomain — デフォルトドメインを設定する
説明
この関数は、gettext() がコールされた際に検索を 行うドメインを設定します。このドメインは、通常はアプリケーション名から 付けられます。
戻り値
成功すると、この関数はドメインを変更した後に現在のメッセージドメインを 返します。
エラー / 例外
domain
が空の string である場合、
ValueError をスローします。
変更履歴
バージョン | 説明 |
---|---|
8.4.0 |
domain が空の string である場合、
ValueError をスローするようになりました。
|
注意
注意:
textdomain() 関数の情報はプロセス単位で管理されます。 スレッドではありません。
+add a note
User Contributed Notes 2 notes
ninja (without a) at informance dot dot dot info ¶
14 years ago
When you set a text domain, it (obviously) erases the previous one.
This can be a problem when you use nested includes in which there can be textdomain() calls with different text domains. After returning from the include, your textdomain is changed, and the rest of the parent script fails in translating the remaining sentences.
I wrote these two small functions to avoid that. You should put the whole code into a file which you require_once in every script that needs gettext functionalities. Then, use only set_textdomain() and restore_textdomain() at the beginning and the end of every script/function that sets a text domain.
A call to set_textdomain() MUST correspond to a call to restore_textdomain(), and there is no limit in how many nested calls are done.
One optimization is done here: when the new text domain is the same as the current one, no change is made, and restore_textdomain() will be aware of this so you can still call it safely.
<?php
$_td_stack = array(); // text domains stack
/**
* Sets a new text domain after recording the current one
* so it can be restored later with restore_textdomain().
*
* It's possible to nest calls to these two functions.
* @param string the new text domain to set
*/
function set_textdomain($td)
{
global $_td_stack;
$old_td = textdomain(NULL);
if ($old_td)
{
if (!strcmp($old_td, $td))
{
array_push($_td_stack, false);
}
else
{
array_push($_td_stack, $old_td);
}
}
textdomain($td);
}
/**
* Restore the text domain active before the last call to
* set_textdomain().
*/
function restore_textdomain()
{
global $_td_stack;
$old_td = array_pop($_td_stack);
if ($old_td)
{
textdomain($old_td);
}
}
?>
ipso at snappymail dot ca ¶
17 years ago
I was having very strange issues with gettext only setting the locale once per Apache process (non-threaded), until I found this bug report:
http://bugs.php.net/bug.php?id=21965
It almost seemed like gettext was caching the data once per process, but in fact calling textdomain() fixed the issue for me.
↑ and ↓ to navigate •
Enter to select •
Esc to close
Press Enter without
selection to search using Google