ThinkPHP をグループ化で多言語で使用する方法!
参考: http://www.coderblog.in/2010/11/thinkphp-multilingual-with-group.html
ThinkPHP2.0 は最初からプロジェクトのグループ化をサポートできます。グループ化の利点は、プロジェクト全体を階層化する .net の明確な階層化に慣れているためか、より明確です。そのため、管理とコードを容易にするために、プロジェクトの大小に関わらず、プロジェクトを明確に階層化する必要があると感じます。分離。
ThinkPHP のグループ化機能を使うと、例えば Admin グループと Home グループに分けてディレクトリを作成できるので、とても便利です。ただし、グループ化機能を使用しているため、多言語プロジェクトでは、対応する言語ファイルが見つからず、すべてのタグが直接大文字で出力されるという予期せぬ問題が発生します。
最初は問題が見つかりませんでした。公式マニュアルではこの点が明確ではないような気がします。ソースコードを直接確認して確認する必要があります。
実際、複数の言語を検出するコードを見れば、何が起こっているかが正確にわかります。このコードは ThinkPHP/Lib/Think/Core/App.class.php にあります。メインコード:
// 不开启语言包功能,仅仅加载框架语言文件直接返回 if (!C('LANG_SWITCH_ON')){ L(include THINK_PATH.'/Lang/'.$langSet.'.php'); return; }
// 定义当前语言 define('LANG_SET',strtolower($langSet)); // 加载框架语言包 if(is_file(THINK_PATH.'/Lang/'.LANG_SET.'.php')) L(include THINK_PATH.'/Lang/'.LANG_SET.'.php'); // 读取项目公共语言包 if (is_file(LANG_PATH.LANG_SET.'/common.php')) L(include LANG_PATH.LANG_SET.'/common.php'); $group = ''; // 读取当前分组公共语言包 // 例如定义了分组GROUP_NAME为Admin,则路径为: // 当前项目路径/zh-cn/Admin/lang.php if (defined('GROUP_NAME')){ $group = GROUP_NAME.C('TMPL_FILE_DEPR'); if (is_file(LANG_PATH.LANG_SET.'/'.$group.'lang.php')) L(include LANG_PATH.LANG_SET.'/'.$group.'lang.php'); } // 读取当前模块语言包 // 例如当前为为MemberAction模块,则模块名为:Member,语言文件名为:member.php(文件名为小写) if (is_file(LANG_PATH.LANG_SET.'/'.$group.strtolower(MODULE_NAME).'.php')) L(include LANG_PATH.LANG_SET.'/'.$group.strtolower(MODULE_NAME).'.php');