XCL 2.1.4 言語の切替え
- このフォーラムに新しいトピックを立てることはできません
- このフォーラムではゲスト投稿が禁止されています
ken
投稿数: 88
投稿数: 88
上段の国旗をクリックすると、言語設定を切替える
(1) テーマファイルを新設する
- themes/xxx/themes.html
(2) 言語指定のURLを設定する preload を新設する
- preload/utf8_tpl.class.php
(3) 言語設定を切替える preload を新設する
- preload/utf8_language_name.class.class.php
(4) 管理者テーマファイルを変更する
- modules/legacy/admin/theme/admin_theme.html
(1) テーマファイルを新設する
- themes/xxx/themes.html
(2) 言語指定のURLを設定する preload を新設する
- preload/utf8_tpl.class.php
(3) 言語設定を切替える preload を新設する
- preload/utf8_language_name.class.class.php
(4) 管理者テーマファイルを変更する
- modules/legacy/admin/theme/admin_theme.html
投票数:94
平均点:3.72
ken
投稿数: 88
投稿数: 88
上段に 国旗 と 言語指定のURL を設置する
デフォルトのテーマファイルをコピーして、下記を追加する
themes/xxx/theme.html
$utf8_language_url は preload/utf8_tpl.class.php で設定される
切り替わったことが分かるように、言語毎にテーマを用意しておく。
文字化け対策
IE6 では日本語を指定したときに、韓国語が文字化けが発生します。
HTML の言語種別が 日本語 (ja) だと、日本語に該当しない文字を処理できないようです。
なお、FireFox では発生しません。
この行を変更する
この行を削除する
デフォルトのテーマファイルをコピーして、下記を追加する
themes/xxx/theme.html
<a href="<{$utf8_language_url}>xc_language=ja">
<img src="<{$xoops_url}>/images/flags/flag_jp.png" width="20" height="14" alt="Japanese" />
Japanese
</a>
<a href="<{$utf8_language_url}>xc_language=en">
<img src="<{$xoops_url}>/images/flags/flag_uk.png" width="20" height="14" alt="English" />
English
</a>
$utf8_language_url は preload/utf8_tpl.class.php で設定される
切り替わったことが分かるように、言語毎にテーマを用意しておく。
文字化け対策
IE6 では日本語を指定したときに、韓国語が文字化けが発生します。
HTML の言語種別が 日本語 (ja) だと、日本語に該当しない文字を処理できないようです。
なお、FireFox では発生しません。
この行を変更する
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<{$xoops_langcode}>" lang="<{$xoops_langcode}>">
↓
<html xmlns="http://www.w3.org/1999/xhtml">
この行を削除する
<meta http-equiv="content-language" content="<{$xoops_langcode}>" />
投票数:118
平均点:3.22
ken
投稿数: 88
投稿数: 88
言語指定のURLを設定する preload を新設する
query がないときは
xxx.php ? xc_language=xx
query があるときは
xxx.php?abc=123 ↦ xc_language=xx
のように表示する
preload/utf8_tpl.class.php
query がないときは
xxx.php ? xc_language=xx
query があるときは
xxx.php?abc=123 ↦ xc_language=xx
のように表示する
preload/utf8_tpl.class.php
class utf8_tpl extends XCube_ActionFilter
{
function postFilter()
{
global $xoopsTpl;
$xoopsTpl->assign( 'utf8_language_url', $this->get_utf8_language_url() );
}
function get_utf8_language_url()
{
$query = null;
$arr = null;
if ( isset($_GET) && is_array($_GET) ) {
$arr = $_GET;
unset($arr['xc_language']);
}
if ( isset($arr) && is_array($arr) ) {
$query = '?';
foreach ( $arr as $k => $v ) {
$query .= $k . '=' . $v . '&';
}
} else {
$query = '?';
}
$url = htmlspecialchars( $_SERVER['PHP_SELF'], ENT_QUOTES) . $query;
return $url;
}
}
投票数:71
平均点:4.51
ken
投稿数: 88
投稿数: 88
言語設定を切替える preload を新設する
xc_language=xx が指定されたら、言語ファイルを切替える
preload/utf8_language_name.class.class.php
注意:
中国語 ( tw_utf-8 ) だけ、言語フォルダーの命名が違っています。
tw_utf-8 と uft と 8 の間に - が入っています。
xc_language=xx が指定されたら、言語ファイルを切替える
preload/utf8_language_name.class.class.php
class utf8_language_name extends XCube_ActionFilter
{
function preFilter()
{
$this->mController->mRoot->mDelegateManager->add("Legacy_Controller.GetLanguageName", array(&$this, "get_language_name"));
}
function postFilter()
{
if ( isset( $_COOKIE['xc_language'] ) ) {
$GLOBALS['xoopsConfig']['language'] = $this->get_language( $_COOKIE['xc_language'] );
}
}
function get_language_name( &$language )
{
$cookie_expire = time() + 86400; // one day
$cookie_path = '/' ;
$post = null;
if ( isset($_POST['xc_language']) ) {
$post = $_POST['xc_language'];
setcookie( 'xc_language', $post, $cookie_expire, $cookie_path ) ;
} elseif ( isset($_GET['xc_language']) ) {
$post = $_GET['xc_language'];
setcookie( 'xc_language', $post, $cookie_expire, $cookie_path ) ;
} elseif ( isset($_COOKIE['xc_language']) ) {
$post = $_COOKIE['xc_language'];
}
$language = $this->get_language( $post );
$this->set_utf8();
}
function set_utf8()
{
if (!defined('_CHARSET')) {
define('_CHARSET', 'UTF-8');
}
$xoopsDB = $GLOBALS['xoopsDB'];
if ( is_object($xoopsDB) ) {
$xoopsDB->queryF("/*!40101 SET NAMES utf8 */");
} else {
die('not DB connect');
}
if ( function_exists('mb_internal_encoding') ) {
mb_internal_encoding("UTF-8");
}
}
function get_language( $post )
{
if ( $post == 'en' ) {
return 'english';
} elseif ( $post == 'tw' ) {
return 'tw_utf-8';
} elseif ( $post == 'ko' ) {
return 'ko_utf8';
} elseif ( $post == 'fr' ) {
return 'fr_utf8';
} elseif ( $post == 'pt' ) {
return 'pt_utf8';
}
return 'ja_utf8';
}
}
注意:
中国語 ( tw_utf-8 ) だけ、言語フォルダーの命名が違っています。
tw_utf-8 と uft と 8 の間に - が入っています。
投票数:59
平均点:4.75
ken
投稿数: 88
投稿数: 88
外国語のまま、管理者メニューに移動すると、
外国語なので「ホームページ」ボタンも分からず、うろたえます。
管理者メニューの中で、日本語に切替る手段を用意します
modules/legacy/admin/theme/admin_theme.html
外国語なので「ホームページ」ボタンも分からず、うろたえます。
管理者メニューの中で、日本語に切替る手段を用意します
modules/legacy/admin/theme/admin_theme.html
<a href="?xc_language=ja">
<img src="<{$xoops_url}>/images/flags/flag_jp.png" width="20" height="10" alt="Japanese" />
Japanese
</a>
投票数:82
平均点:5.37
ken
投稿数: 88
投稿数: 88
preFilter() と postFilter() の動作するプログラムの位置を示す
下記の順番だと、postFilter() が不要になる
要望を出してみた
set LanguageManager's LanguageName in $GLOBALS['xoopsConfig'
Legacy_Controller->executeCommon()
(1) _setupLanguage()
preFilter() 実行
{
// Legacy Kernel に言語を設定する
$this->mController->mRoot->mDelegateManager->add("Legacy_Controller.GetLanguageName", array(&$this, "get_language_name"));
}
(2) _setupConfig()
{
$configHandler = &xoops_gethandler('config');
$this->mRoot->mContext->mXoopsConfig =& $configHandler->getConfigsByCat(XOOPS_CONF);
// xoopsConfig に格納されるのは、DBの値
$GLOBALS['xoopsConfig'] = $this->mRoot->mContext->mXoopsConfig;
$this->mRoot->mContext->mXoopsConfig['language'] = $this->mRoot->mLanguageManager->getLanguage();
}
(3) _processPostFilter()
postFilter() 実行
{
// xoopsConfig に言語を設定する
$GLOBALS['xoopsConfig']['language'] = $this->get_language( $_COOKIE['xc_language'] );
}
下記の順番だと、postFilter() が不要になる
(2) _setupConfig()
{
$configHandler = &xoops_gethandler('config');
$this->mRoot->mContext->mXoopsConfig =& $configHandler->getConfigsByCat(XOOPS_CONF);
$this->mRoot->mContext->mXoopsConfig['language'] = $this->mRoot->mLanguageManager->getLanguage();
// xoopsConfig に格納されるのは、preFilter() にて設定した言語
$GLOBALS['xoopsConfig'] = $this->mRoot->mContext->mXoopsConfig;
}
要望を出してみた
set LanguageManager's LanguageName in $GLOBALS['xoopsConfig'
投票数:101
平均点:4.16
Re: XCL 2.1.4 言語の切替え
msg# 1.6
taka
はじめまして。
XOOPS Cube Legacy 2.1.5を使っております。
多言後切り替えを使用したく、上記を参考にさせていただいております。ありがとうございます。
テーマの設定、preload設定を行ったのですがいまいちつかめておらずうまくいきません。
テーマを言語ごとに用意しておくとありますが、その言語とテーマの結びつけはどこで行う事を想定しておられますか?
また
preFilter() と postFilter() の動作するプログラムの位置を示す
は参考という事で、なにかしなければならないということではないとう理解でいいでしょうか?
上記がパラメータに応じて記述する場所におもえるのですが、何処に記述すれば良いのかわからず。。アドバイス御願い致します。
XOOPS Cube Legacy 2.1.5を使っております。
多言後切り替えを使用したく、上記を参考にさせていただいております。ありがとうございます。
テーマの設定、preload設定を行ったのですがいまいちつかめておらずうまくいきません。
テーマを言語ごとに用意しておくとありますが、その言語とテーマの結びつけはどこで行う事を想定しておられますか?
また
preFilter() と postFilter() の動作するプログラムの位置を示す
は参考という事で、なにかしなければならないということではないとう理解でいいでしょうか?
上記がパラメータに応じて記述する場所におもえるのですが、何処に記述すれば良いのかわからず。。アドバイス御願い致します。
投票数:60
平均点:3.67
ken
投稿数: 88
投稿数: 88
引用:
言語の切替えとテーマの切替えは独立しています。
それぞれ preload で。
言語の切替え:preload/utf8_language_name.class.class.php
テーマの切替え:modules/legacy/preload/utf8_theme.class.php
テーマを言語ごとに用意しておくとありますが、その言語とテーマの結びつけはどこで行う事を想定しておられますか?
言語の切替えとテーマの切替えは独立しています。
それぞれ preload で。
言語の切替え:preload/utf8_language_name.class.class.php
テーマの切替え:modules/legacy/preload/utf8_theme.class.php
投票数:71
平均点:4.23

