件名: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 07/04/14 12:06 AM JST
投稿者: yamachan

バージョン: geeklog-2.0.0-jp-extended-1.0
PHP バージョン: PHP 5.4.29

日本語化プラグインのチェックをすべて有効にして実行しています。
Admin では、すべてのメニューが日本語になるのですが、
ログアウトすると
HOME SITE STATICTICS DIRECTORY USER FUNCTIONS カレンダー リンク アンケート CALENDERJP
と、一部だけカタカナになります。

コンフィギュレーション→言語とロケール→言語 は Japanese
コンフィギュレーション→言語とロケール→ロケールは ja_JP.UTF-8

です。
ゲストでもメニューを日本語化するにはほかにどのような設定が必要なのでしょうか。ご教授ください。

書込: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 07/04/14 12:13 AM JST
投稿者: yamachan

Quote by: yamachan

ゲストでもメニューを日本語化するにはほかにどのような設定が必要なのでしょうか。ご教授ください。



問題が発生するのは Firefox 30.0 です。
Opera 12.17 ではゲストでも日本語がでます。

書込: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 07/04/14 05:04 PM JST
投稿者: Ivy

Firefoxの、Cookieなどを削除するとどうなるでしょうか。
Firefox側の問題だとおもいますので。

書込: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 07/08/14 10:50 PM JST
投稿者: yamachan

Quote by: Ivy

Firefoxの、Cookieなどを削除するとどうなるでしょうか。
Firefox側の問題だとおもいますので。



cookie を疑ってみました。
日本語がでるときは、 language=japanese_utf-8 が cookie にはいってます。
試しに消してみたら、英語になってしまいました。
ブラウザのデフォルトの言語は ja にしてあります。
ドキュメントが 1.4 系と 2.0 系、ごちゃごちゃになっていて探しても探してもわからないのです。どこかにまとまっていればご教授ください。

あと、日本語だとホームに記事がでていたのですが、cookie を消した瞬間、No News to Display と表示されます。これも言語と関係があるのでしょうか。

よろしくおねがいします。

書込: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 07/09/14 01:32 AM JST
投稿者: Ivy

日本語化プラグインはなかみが大きく変わっているので一括実行をあらためて行ってください。
他、ブロックタイトルは自動的に変更されないようであれば、ブロック管理画面で個別に変更してください。

書込: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 07/09/14 02:41 PM JST
投稿者: Ivy

ドキュメントは気が付いたところはすべて2.0系に変更しているので、もし1.4系の説明がのこっているページがあればご連絡ください。

書込: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 07/09/14 11:20 PM JST
投稿者: yamachan

2.0 からの初回インストールで、日本語化プラグインの一括実行は何回か実行しています。

さて、

困っているので、調べています。

cookie に language=japanese_utf-8 なしで、
lib-common.php: COM_getLanguageId 実行時に
logs/error.log に
2014年07月 9日22:50:31 JST - 91.207.5.186 - Language "japanese_utf-8" not found in $_CONF['language_files'] array!
と記録されています。

$_CONF['language_files'] は
Wed Jul 9 22:51:45 2014 - 119.106.56.93 - Array
(
[en] => english_utf-8
[de] => german_formal_utf-8
)

となっていて

[ja] => japanese_utf-8

とあればたぶんまともになるかと思うのですが、言語野はいろいろあるのに en と de しか $_CONF['language_files'] にはいっておらず、この配列どこでイニシャライズされるかを探しているところです。
とりあえず気づいたので書き込んでおきます。

書込: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 07/09/14 11:44 PM JST
投稿者: Ivy

コンフィギュレーションの、言語とロケールで、

多言語コンテンツ
言語ファイル[多言語モード]
言語名[多言語モード]

これらは、 有効にする が表示されているでしょうか。それであれば、多言語化無効の状態です。

このふたつの設定は、対応している必要があります。
言語ファイルと言語名の順番、ファイル名、設定数 これらに間違いがあるとサイトはただしく表示しません。

書込: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 07/09/14 11:58 PM JST
投稿者: Ivy

コンフィギュレーション(/admin/configuration.php)の言語とロケールで、languages, language_files ともに、unsetになっていれば問題ないのですが、どうなっているでしょうか。

以下はGeeklog 2.1のSQLですが、多言語化されていないサイトではこのようになっています。
PHP Formatted Code

INSERT INTO `gl_conf_values` (`name`, `value`, `type`, `group_name`, `default_value`, `subgroup`, `selectionArray`, `sort_order`, `tab`, `fieldset`) VALUES('languages', 'unset', '*text', 'Core', 'a:2:{s:2:"en";s:7:"English";s:2:"de";s:7:"Deutsch";}', 6, -1, 480, 28, 29);
INSERT INTO `gl_conf_values` (`name`, `value`, `type`, `group_name`, `default_value`, `subgroup`, `selectionArray`, `sort_order`, `tab`, `fieldset`) VALUES('language_files', 'unset', '*text', 'Core', 'a:2:{s:2:"en";s:13:"english_utf-8";s:2:"de";s:19:"german_formal_utf-8";}', 6, -1, 470, 28, 29);
 



書込: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 07/10/14 12:01 AM JST
投稿者: Ivy

なお、今回のように2.0ではcacheによる問題は出ませんが、2.1からはcacheが実装されるので、おかしな現象があったらキャッシュ一括削除をしてください。
開発中は、コンンフィギュレーションのテーマで、cacheを無効にしておくとよいかもしれません。

書込: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 07/10/14 12:30 AM JST
投稿者: yamachan

なるほど、そこですか。
2.1 からは cache が入ること、了解です。またデータベースのみかたも
ありがとうございます。

ja の項がなかったので付け加えました。
で、cookie になくても日本化表示されるようになりました。
言語名[多言語モード] の ja -> Japanese の Japanese は大文字開始でなければならないのでしょうか?
また、日本語化を解決してもゲスト権限閲覧で
cookie に language=japanese_utf-8
がないと、
メインで、
「表示する記事がありません。この話題の記事がないか表示設定を絞り過ぎなのかのどちらかです。」
となるのはどういう理由でしょうか。
質問ばっかりでもうしわけないですけど、ここであきらめている人は多のではないか? と思います。
わたしもあきらめる寸前でしたが、3 カ国語サイトなんでそういうわけにもまいりません。

コンフィギュレーションの、言語とロケールでこのように設定しました:

言語 (?)
言語ファイル[多言語モード] (?) (X)
en
english_utf-8
de
german_format_utf-8
ja
japanese_utf-8

言語名[多言語モード] (?) (X)
en
English
ja
Japanese

書込: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 07/10/14 02:01 AM JST
投稿者: Ivy

多言語3か国語のサイトなのですね。
ならば、それぞれきっちり3か国語をセットしなくてはいけません。言語名にdeが抜けています。

ちなみにJapanese のところは、日本語 とか、なんでもかまいません。
言語を選ぶときにリストボックスで出てくる文字列なのです。langselプラグインなどをつかうと言語セレクトボックスが出ますがその文字列になります。

言語 (?)
言語ファイル[多言語モード] (?) (X)
en
english_utf-8
de
german_format_utf-8
ja
japanese_utf-8

言語名[多言語モード] (?) (X)
en
English
de
German
ja
Japanese

多言語切り替えについてより詳しくは
http://wiki.geeklog.jp/index.php?title=多言語切り替え

書込: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 07/14/14 11:46 PM JST
投稿者: yamachan

ありがとうございました。ブラウザの対応言語で切り替わりました。

もうひとつ、
「表示する記事がありません。この話題の記事がないか表示設定を絞り過ぎなのかのどちらかです。」
についてですが、

カスタムメニュー → 「表示する記事がありません。... 」となるメニューを編集 → URL
URL で、例えば [site_url]/index.php?topic=General といれる。
とりあえず出るようになります。
もともと URL は [site_url]/ になっていて、これはすなわちトップページをさしていたということです。

で、もともとなんか出ていたトップページに関する設定を(わけわかんないうちに)消去してしまって、
トップページが「表示する記事がありません。... 」となり、更に上記の URL が [site_url]/ になっていたので、これはすなわちトップページなわけで、そのメニューも、当然「表示する記事がありません。... 」 となる。

で次は、トップページをどうやって編集するのか探しています。しかしなかなかうまくいきません。
言語設定のようにわかってしまえば、逆にすっきりまとまっているので腑に落ちるのですが。

なぜいちいち引っかかるのか、バージョンがごちゃごちゃになっているように見えるのか書きたいと思います。
トップページがでないので、とりあえず静的ページを埋め込もうとしました。
http://wiki.geeklog.jp/index.php/カスタマイズ方法
をみると掲載されているのですが、

「トップページデザイン」
トップページにのみ、装飾的にFLASHコンテンツを置きたいのであれば静的ページを利用します。「センターブロック表示」にチェックし、表示場所を(ページの最上部、注目記事の下、ページの下、ページ全体)から選びます。「話題」は、(すべて、ホームページのみ、各話題・・・)の中の、「ホームページのみ」を選びます。これでホームページのデザインを追加できます。

となっており、この通りに実行しても出ません。で、はて、自分が悪いのかと文章の行間を読もうとするのですが、
ここで、ホームページとトップページが同じことをさしているのか、果たして違うのかがものすごい迷います。
まあそれもいいとして、バージョンが間違っていないかどうか探すのですが、
ページ自体にどのバージョンをさしているのか記述はなく、下の「開発者向けカスタマイズ方法」に
Geeklog1.4 日本語版最新config.php
とあるため、ここは 1.4 用なんだと思い込んで、2.0 用ならばきっとうまくいくんだと探すわけです。
これらのページは 2.0 用に書き換えられているとのことでしたので 2.0 用なのですが、
なぜここで 1.4 用の記述があるのか ? と迷うのですが ↑ のことを思い出して 2.0 のことを書いているのだなと。
経緯がわかっていれば、なぜここに 1.4 用の記述があるのか理解できるのでしょうが、私は経緯は知らないし、全部 2.0 用に書き換えてあるとはパッと見わかりませんし、知りませんでしたので、バージョンがごちゃごちゃになっているように見えたということです。
上から( http://wiki.geeklog.jp/index.php )たどれば、2.0 用であることはわかるのですが(でも、突然 1.4 の記述がでてくるとそこだけアップデートが遅れていうのだろうと思ってしまいます、よくある話ですので)、 google からだといきなり各論のページにいっちゃうので、こういう 1.4 の記述があるページが 2.0 用にアップデートされているということはなかなかわからないはずです。

書込: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 07/14/14 11:54 PM JST
投稿者: Ivy

1.4の記述が残っているURLをここに掲載していただけばそこをこちらで直接修正させていただきますので、掲載いただけますでしょうか。

1.記事が無い場合の警告のメッセージを表示させないモード
表示する記事がありません。 は、表示する記事がないときに、ないことを表示する がデフォルトなために表示されます。
コンフィギュレーションの 記事 で、修正してください。

2.多言語モードの場合のIDのつけ方
静的ページや話題、記事は、多言語の場合は、IDの最後に _ja _en など、かならず言語IDを追加してください。
追加しないとたとえTOPに表示するモードにしても、言語IDが合致しないので表示されません。
TOPページ用に、日本語の場合のページ、英語の場合のページ、と言語分作成してください。

例) -top_ja -top_en -top_de
(先頭にハイフンを入れているのは、サイトマップに、先頭ハイフンのIDだけは追加しない設定にするときのため、
そのようにしておくと便利なのでわたしはそのようにしています。サイトマッププラグインでは、静的ページの
IDでサイトマップ除外IDを設定できます。)

多言語サイトの設置方法は、繰り返しますが、
http://wiki.geeklog.jp/index.php?title=多言語切り替え
こちらを参照していただけますでしょうか。

1.4からも、Geeklogは基本的な設計は変わっていません。

$_CONF['date']  といった記述がでてきますが、1.4時代はphpファイルだったのが、1.5以降はDBに保存され、管理画面のコンフィギュレーションで管理するようになった、というだけです。そのため、とくに記述は変更していません。

多言語サイト事例は
http://www.jtb-gts.com/

3.TOPページを特殊なレイアウトにする
http://wiki.geeklog.jp/index.php?title=TOPページを特殊なレイアウトにする
これは、すべてのバージョンに対応しています。ただし、多言語サイト作成の場合についてIDの設定方法については別途
http://wiki.geeklog.jp/index.php?title=多言語切り替え
こちらを参照、よろしくお願いします。

書込: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 07/15/14 12:35 AM JST
投稿者: yamachan

ありがとうございます。

1.4 が残っている記述は例えば上記にも記述しましたが
http://wiki.geeklog.jp/index.php/カスタマイズ方法
開発者向けカスタマイズ方法 → より細かい設定変更は、Geeklog1.4 日本語版最新config.phpを直接編集します。
があげられます。わたしだけかもしれませんが、いの一番で参照するので、「このページは 1.4 についての記述なのか」と迷いました。
[3] 管理者運用方法 > コンフィグレーションエディタ
は、リンク先が 2006 年の記述なのでいまもこれに従っていいのか、迷います。
これより下も 1.4 の記述がありますが、同様です。

いきなり「開発者向け」をみる必要はないのかもしれませんが、他の CMS を選んで最初とっかかりはいいものの多言語にした瞬間にカオスになった結果の Geeklog ですから、Geeklog 多言語にするには「開発者向け」をみないとならないんだろうと構えてしまうわけです。

> 1.4からも、Geeklogは基本的な設計は変わっていません。
今日あたりから、いつぞや挫折した本から追いかけて、先ほど正誤表をみて、もしかして多言語で引っかかっているのかと思っていた次第です。
これがわかっただけでもだいぶすっきりします。

書込: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 07/15/14 01:20 AM JST
投稿者: Ivy

http://wiki.geeklog.jp/index.php?title=カスタマイズ方法
このページは、たしかに古い記述のままで、混乱されたようで申し訳ありませんでした。
内容を修正しましたのであらためてご確認ください。

書込: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 07/17/14 12:29 AM JST
投稿者: yamachan

多言語のドキュメント皿を見るように読み返しました。 TOP ページもでるようになりました。
どこで引っかかったのか、ほんとドキュメントどおりなのですが、あとで書くとして、

あと一点質問です。
カスタムメニュー の URL ですが、多言語時はどのように設定したらよいでしょうか。

aboutus というメニューを作り、
話題に、 aboutus_ja を作り、
URL に
[site_url]/index.php?topic=aboutus
を指定し、 aboutus メニュー選択時に
「表示する記事がありません。この話題の記事がないか表示設定を絞り過ぎなのかのどちらかです。」
となってしまいます。
ブラウザで直接
http://サイトURL/index.php?topic=aboutus_ja
とするとうまくいきます。

topic 多言語のリンクはカスタムメニュー内でどのように指定すればよいのでしょうか。

書込: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 07/17/14 12:56 AM JST
投稿者: Ivy

Quote by: yamachan


カスタムメニュー の URL ですが、多言語時はどのように設定したらよいでしょうか。

aboutus というメニューを作り、
話題に、 aboutus_ja を作り、
URL に
[site_url]/index.php?topic=aboutus
を指定し、 aboutus メニュー選択時に
「表示する記事がありません。この話題の記事がないか表示設定を絞り過ぎなのかのどちらかです。」
となってしまいます。
ブラウザで直接
http://サイトURL/index.php?topic=aboutus_ja
とするとうまくいきます。

topic 多言語のリンクはカスタムメニュー内でどのように指定すればよいのでしょうか。



http://サイトURL/index.php?topic=aboutus_ja
このURLでのみ表示します。http://サイトURL/index.php?topic=aboutusは無いのでエラーになります。これは当然ですよね。

カスタムメニュープラグインを活用する場合、カスタムメニューは、phpmenuitem_xxx というように関数を追加して、
カスタムメニューには関数を登録することができます。

カスタムメニューを使わない場合は、多言語IDを表示するテーマ変数を利用してヘッダでメニューをstaticpage_contentという
自動タグで -headermenu_ja -headermenu_en を自動的に切り替えて読み込む というような方法もあります。

http://www.jtb-gts.com/
このサイトは、カスタムメニュープラグインを活用しています。
lib-custom.phpに以下を追加。
PHP Formatted Code
/* カスタムメニュー */
require_once( 'custom/custom_phpmenuitem.php' );
 


custom/custom_phpmenuitem.php:
以下のように関数を追加します。
about_us の事例だけですが、メニューの数だけ関数をつくります。
このサイトでは、エクセルで各国語のメニュー名、リンク先URL を表にして、
別シートに、この関数を自動的に出力するように記述して自動作成して開発しました。
そうすることにより、メニューを変更したりする際の工数を抑えました。

PHP Formatted Code
<?php

if (strpos(strtolower($_SERVER['PHP_SELF']), 'custom_phpmenuitem.php') !== false) {
    die('This file can not be used on its own!');
}


function phpmenuitem_about_us()
{
    global $_CONF, $LANG01;

    $url = $_CONF['site_url'] . '/staticpages/index.php/about_us_' . COM_getLanguageId();

    switch( COM_getLanguageId() ){
      case en: $label = "About Us"; break;
      case zh: $label = "关于我们"; break;
      case ct: $label = "關於我們"; break;
      case ko: $label = "회사소개"; break;
    }
   
    $menuitems = array(
        'url'        => $url,
        'label'      => $label,
        'icon_url'   => '',
        'id_name'    => '',
        'class_name' => '',
        'submenu_entries' => array(),
    );
    return $menuitems;
}


くわしくはカスタムメニュープラグインのドキュメントをご覧ください。

書込: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 07/18/14 12:01 AM JST
投稿者: yamachan

ありがとうございます。
カレントディレクトリが public_html と public_html/layout/テーマ名 の場合があるので相対ディレクトリではエラーになります。したがって lib-common.php 内の include_once は絶対パスにしました。

これは大変参考になりました。
PHP Formatted Code

global $_CONF, $LANG01;
 

で、結局以下のようにして動作を確認しました。
PHP Formatted Code

<?php

if (strpos(strtolower($_SERVER['PHP_SELF']), 'custom_phpmenuitem.php') !== false) {
     die('This file can not be used on its own!');
}

function phpmenuitem_aboutus()
{
     global $_CONF, $LANG01;

     $url = $_CONF['site_url'] . '/index.php?topic=aboutus_' . COM_getLanguageId();

     $label = empty($LANG01['aboutus']) ? 'ABOUT US' : $LANG01['aboutus'];

     $menuitems = array(
         'url'        => $url,
         'label'      => $label,
         'icon_url'   => '',
         'id_name'    => '',
         'class_name' => '',
         'submenu_entries' => array(),
     );
     return $menuitems;
}
 

一見めんどくさいのですが、でもこの仕組みを用いると、日本語 と 他の言語 を同じコンテンツにしたい(例えば、コンテンツを日本語 + 他の言語とし、どちらの言語の選択でも同じものを表示する)ときに使えそうです。いちいち分けるのがめんどくさいときもありますし。

書込: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 07/18/14 01:11 AM JST
投稿者: Ivy

カレントディレクトリが public_html と public_html/layout/テーマ名 の場合があるので相対ディレクトリではエラーになります。したがって lib-common.php 内の include_once は絶対パスにしました。


この意味がよくわからないのですが・・・

lib-common.php 内の include_onceに関してはわたしのほうではどうしたらよいとはどこにも記載していないので、どの発言が相対ディレクトリで、それをどうされたのでしょうか。

旧バージョンでは、lib-common.phpを直接修正する必要がありましたが、今はソースをさわることなくインストールできます。
もしかしてWikiに古いバージョンの記述が残っていたでしょうか。

書込: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 07/18/14 10:40 PM JST
投稿者: yamachan

カレントディレクトリが public_html と public_html/layout/テーマ名 の場合があるので相対ディレクトリではエラーになります。したがって lib-common.php 内の include_once は絶対パスにしました。

額面通りにとっていいただければいいかと思うのですが、
だって、ご自身で
lib-custom.phpに以下を追加。

って、書き込まれている(カスタムメニューにもそういう記述があるし)じゃないですか。それに従ったまでです(実際削ると、インクルードされないのでメニューがでてきません)。
で、lib-custom.php に
PHP Formatted Code
require_once( 'custom/custom_phpmenuitem.php' );

を追加するのですが cusom/ 相対パスだと、テーマの下の custom ディレクトリにおいても思ったとおりにインクルードされない(カレントディレクトリが変化するため)、これを絶対パスにしてどのような条件下でも読み込むようにしたということです。

書込: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 07/19/14 12:24 AM JST
投稿者: Ivy

PHP Formatted Code
 lib-common.php 内の include_once は絶対パスにしました。


とあったので、混乱しました。lib-common.phpではなくlib-custom.phpとおっしゃりたかったのですね。

ただ通常、lib-custom.phpには、相対パスで記述してよいはずです。
絶対パスで記述しなければならない、というのはサーバーの設定の問題なのかもしれません。

PHP Formatted Code
テーマの下の custom ディレクトリにおいても


この意味もよくわかりませんでした。

customディレクトリは、日本語版の配布パッケージを見ていただけばお分かりいただけるかと思いますが、
/private/system/custom/ です。

/private/system/lib-custom.php に、他のカスタム関数の読み込みも相対パスでcustom/ と記述して動いているわけですから、相対パスで記述していただいて問題はありません。

書込: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 09/16/14 09:48 PM JST
投稿者: yamachan

もう一度よみなおしました。できました。
./system/custom/custom_phpmenuitem.php
を配置する。それで、
./system/lib-custom.php に
PHP Formatted Code
require_once( 'custom/custom_phpmenuitem.php' );

を追加する。相対パスで OK。

./public_html/layout/purepro/custom/custom_phpmenuitem.php に配置して、
lib-common.php
をさわってしまったのが原因です。
重ね重ねありがとうございました。

書込: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 09/16/14 10:07 PM JST
投稿者: Ivy

おめでとうございます。

なお、header.thtmlでは、PHPを記述できますので、ユーザーグループに応じて自由にメニューを切り替えて表示するようにもできます。
(2.0からは、すべてのテンプレートでPHPを記述できます)

CTL
http://wiki.geeklog.net/index.php/Caching_Template_Library

なにかご不明な点がありましたらまたいつでもご連絡ください。

書込: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 10/13/14 05:13 PM JST
投稿者: yamachan

さきほど制作事例として登録しました。

書込: ゲスト閲覧時のサイトメニューの(完全な)日本語化

投稿日: 10/13/14 05:20 PM JST
投稿者: Ivy

事例ご登録ありがとうございました。
多言語サイト開設おめでとうございます。

お問い合わせフォームのcssがまだあたっていないようですので、こちらで添付しているCSSを追加していただくとよいかと思います。
http://hiroron.com/downloads/index.php/sp-formmail

またなにかございましたらいつでもお問い合わせください。

Geeklog Japan - 掲示板
https://www.geeklog.jp/forum/viewtopic.php?showtopic=18268