Giter Club home page Giter Club logo

garden's People

Contributors

cdavid avatar ekarulf avatar garymardell avatar gensisns avatar honda0510 avatar iambenno avatar jverkoey avatar kaecyra avatar linc avatar markosullivan avatar meanbean avatar miyabi-inoue avatar nickhx avatar renepenner avatar saladyears avatar sirlancelot avatar sirnot avatar tburry avatar tigr avatar yama avatar yu-tang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

garden's Issues

テーマの説明文を日本語化可能にする

ダッシュボードのテーマ画面が対象です。
現状では、テーマ画面に表示されるテーマの説明文は、日本語化できません(T() 関数を使用していない)。
管理者しか見ないので、優先度は低いですが、日本語化できるとよいと思います。

対象ファイル: /applications/dashboard/views/settings/themes.php

ハッシュタグサーチ(#hashtag)を日本語に対応させる

コメント中に #hashtag と記述することによって、同一タグを含むコメントの検索結果へのリンクが張られる機能を指す。

「@リプライ(@mentions)を日本語に対応させる」課題(#5)に関連した課題。

現状

ASCII 単語にしか対応していない。
日本語の単語には、リンクが張られない。

拡張

日本語の単語にもリンクが張られるように拡張する。

実装方法

変更前

/library/core/class.format.php

public static function Mentions($Mixed) {

(中略)

   // Handle #hashtag searches
   if(C('Garden.Format.Hashtags')) {
      $Mixed = preg_replace(
               '/(^|[\s,\.>])\#([\w\-]+)(?=[\s,\.!?]|$)/i',
               '\1'.Anchor('#\2', '/search?Search=%23\2&Mode=like').'\3',
               $Mixed
      );
   }

上記の正規表現を変更する。
日本語の単語の正規表現の条件は、 #4 を参照。
厳密に言うと #4 は単語ではなくユーザー名の条件になるが、ユーザー名を検索することも有り得るので、ハッシュタグに使用する単語の条件としても あるていど有効と思われる。

ユーザー名に日本語を許容する

現状

オリジナルでは、ユーザー名に使用できるのは以下の文字種だけに限られている。

  • 英大文字/小文字 a-zA-Z
  • 数字 0-9
  • アンダースコア _

また文字数には 3~20 文字の制限がある。
以下に、現状でのユーザー名の例を挙げる。

有効

  • JohnSmith
  • john_smith
  • js2011

無効

  • 山田太郎
  • やまだたろう
  • ヤマダタロウ
  • J

拡張

ユーザー名に日本語も許容するように拡張する。
具体的には、現状の有効文字種に加えて、以下の文字種を追加する。

  • 漢字 一-龠
  • ひらがな ぁ-ん
  • カタカナ ァ-ヶ
  • 全角英数字 0-9a-zA-Z
  • 全角記号(ナカグロ・長音・イコール・アンダースコア・ハイフン)
    ・ー=_-
  • 半角記号(ハイフン) -

また、文字数は 1~20 文字の制限に(下限を)拡張する。
上限は、テーブルの列定義と関連しているので、触れない。

以下に、変更後 新たに有効になるユーザー名と、依然として無効のユーザー名の例を挙げる。

有効

  • 山田太郎
  • やまだたろう
  • ヤマダタロウ
  • J
  • YU-TANG
  • ジャン=リュック・ピカード
  • ジョーディ・ラ=フォージ

無効

  • 山田 太郎 (スペース文字は無効)
  • モーニング娘。(句点は無効)
  • 藤岡弘、(読点は無効)

実装方法

当初は日本語ロケール パック(言語ファイル)内で ValidateUsername() 関数をオーバーライドする予定だったが、実際に試すと ValidateUsername() 関数はどの言語定義ファイルよりも先に読み込まれてしまうらしく、オーバーライドできなかった。
そこで、conf/bootstrap.before.php 内でのオーバーライドに切り替える。

参考:

その他注意事項

エラーメッセージ

ユーザー名が無効時のエラーメッセージも併せて変更する必要がある。

$Definition['UsernameError'] = 'ユーザー名には 3~20 文字の英数字とアンダースコアのみ使用できます。';

$Definition['UsernameError'] = 'ユーザー名には 1~20 文字の英数字と日本語を使用できます。記号はナカグロ・長音・イコール(全角のみ)、アンダースコア・ハイフン(全半角)のみ使用できます。';

文字列長判定

Ver.2.0.17.9 時点の文字列長判定は、ASCII 以外の文字を正確に判定できない(日本語が 2~3 文字扱いになる)。
このバグは、コアの次リリースで修正される予定。

@リプライ(@mentions)

コメント中に @UserName と記述することによって、プロフィールへ自動リンクが張られる機能。
この機能は ASCII ユーザー名にしか対応していないため、ユーザー名の文字種を拡張した場合は、こちらも対応させる必要がある。
別件の課題 #5 として追加する。

アドオンの言語ファイルを本体から分離する

現在の日本語化プロジェクトでは、Vanilla 本体の言語ファイルが一部テーマやプラグインの翻訳コードを含んでいるが、これを分割する。
理由は以下の通り。

  1. 本来は、テーマやプラグイン個別の言語ファイルに記述するのが推奨されている(今まで面倒がっていただけ)。-> Internationalization & Localization
  2. 現状の実装方法だと、無効になっているプラグインやテーマの翻訳コードもロードされて無駄にメモリを食っている。
  3. レアケースだが、一部のプラグインには、有効化された時点で既存の言語コードをオーバーライドするものがある(ex. Voting)。このような言語コードを本体とプラグインで同一ファイルに混在させると、常にオーバーライドされる(またはされない)状態になって、意図通りの切り替えが行われない。
  4. プラグインの言語コードが Vanilla 本体の言語ファイル内で定義されていると、プラグイン側の言語ファイルも存在してオーバーライドされた場合に、ユーザーがどこを探せばいいのか分かりにくくなる (または探す場所を取り違える) リスクがある。

@リプライ(@mentions)を日本語に対応させる

コメント中に @UserName と記述することによって、プロフィールへの自動リンクが張られる機能を指す。

「ユーザー名に日本語を許容する」課題(#4)に関連した課題。

現状

ASCII ユーザー名にしか対応していない。
日本語ユーザー名には、リンクが張られない。

拡張

日本語ユーザー名にもリンクが張られるように拡張する。

実装方法

リンク元の処理

/library/core/class.format.php

public static function Mentions($Mixed) {
   if (!is_string($Mixed)) {
      return self::To($Mixed, 'Mentions');
   } else {         
      // Handle @mentions.
      if(C('Garden.Format.Mentions')) {
         $Mixed = preg_replace(
            '/(^|[\s,\.>])@(\w{1,50})\b/i', //{3,20}
            '\1'.Anchor('@\2', '/profile/\\2'),
            $Mixed
         );
      }

上記の正規表現を変更する。
日本語ユーザー名の正規表現の条件は、 #4 を参照。

リンク先の処理

リンク元の処理を日本語ユーザー名に対応させても、そのままではジャンプ後に 404 エラーとなる。

/applications/dashboard/models/class.usermodel.php

public function GetByUsername($Username) {
   if ($Username == '')
      return FALSE;

   $this->UserQuery();
   $User = $this->SQL->Where('u.Name', $Username)->Get()->FirstRow();
   $this->SetCalculatedFields($User);
   return $User;
}

上記の Where() の実引数を変更する。

   $User = $this->SQL->Where('u.Name', urldecode($Username))->Get()->FirstRow();

これで、日本語ユーザー名でもプロフィールページが正常に表示されるようになる。

@リプライ ユーザー 一覧取得処理

モデルから呼び出されている。

/library/core/functions.general.php

if (!function_exists('GetMentions')) {
   function GetMentions($String) {
      $Mentions = array();

      // This one grabs mentions that start at the beginning of $String
      preg_match_all(
         '/(?:^|[\s,\.>])@(\w{3,20})\b/i',
         $String,
         $Matches
      );
      if (count($Matches) > 1) {
         $Result = array_unique($Matches[1]);
         return $Result;
      }
      return array();
   }
}

上記の正規表現を変更する。
日本語ユーザー名の正規表現の条件は、 #4 を参照。

これはコアハックではなく conf/bootstrap.before.php 内でオーバーライドできる。

その他留意事項

関連で、ハッシュタグサーチ (#検索語句 で検索リンクが張られる機能) も日本語対応する。
該当コードは Mentions() 内部。
課題は #6 を参照。

ウォールってなんでしょうか?

個人設定に

自分のウォールにコメントが付いたら通知する。
ウォールに付けたコメントに返信されたら通知する。

とありますが、ウォールってなんでしょうか?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.