そのため、ライブラリをPHPに移植することを決めた後、それを人々と共有したいと思い、それを改善するための手助けを本当に望んでいます。アドバイス、バグレポート、特にプルリクエストに満足します。 ライブラリはGitHubにあります: github.com/Andre-487/php_rutils
10.26.2013からのUPD:ライブラリはComposerからも利用できるようになりました: packagist.org/packages/andre_487/php_rutils
また、ライブラリを改善し、安定版をリリースしてくれたすべての人に感謝します。
ライブラリ機能
PHP RUtils-PHPのPytilsポート。 これらは、ロシア語のテキストを操作するためのユーティリティです。 ユーティリティは、次のモジュール(クラス)に分かれています。
- 数字-数字を扱う:量、単語の数、ルーブルの金額と単語のコペックに応じた名詞の変化。
- Dt-日付の処理:ロシアの月名、曜日名を使用したPHP日付形式の拡張。 期間(例:24,976日前)。
- Translit-文字変換、URLで使用する文字列の準備、ファイル名。
- Typoは、プレーンテキストのタイポグラフィルールの小さなセットです。
コード例
数字モジュール
複数のフォーム選択
$variants = array( '', //1 '', //2 '' //5 ); $amount = 15; echo $amount, ' ', RUtils::numeral()->choosePlural($amount, $variants); //Result: 15 echo RUtils::numeral()->getPlural(2, $variants); //Result: 2
単語でのフォームの選択と出力
echo RUtils::numeral()->sumString(1234, RUtils::MALE, $variants); //Result:
言葉で数字を書く
$numeral = RUtils::numeral(); echo $numeral->getInWordsInt(100); //Result: echo $numeral->getInWordsFloat(100.025); //Result: echo $numeral->getInWords(100.0); //Result:
ルーブルでお金を引き出す
echo RUtils::numeral()->getRubles(100.25); //Result:
Dtモジュール
今日の日付
パラメーターは
\php_rutils\struct\TimeParams
インスタンスとして渡されます。配列として渡すことも可能です
$params = new TimeParams(); $params->date = null; // $params->format = ' d FY '; $params->monthInflected = true; echo RUtils::dt()->ruStrFTime($params); //Result: 22 2013
歴史的日付
パラメータは配列として渡され、フィールドは
TimeParams
クラスと同じです。
日付は、自由形式の文字列として送信されます。 日付をUnixタイムスタンプまたは
DateTime
クラスのインスタンスとして渡すこともできます。
$params = array( 'date' => '09-05-1945', 'format' => 'ld FY - ', 'monthInflected' => true, 'preposition' => true, ); echo RUtils::dt()->ruStrFTime($params); //Result: 9 1945 -
過去の固定日までの期間
この関数の時間形式は、
Dt::ruStrFTime
形式に似ています。
$accuracy
パラメーターは、情報の詳細を担当します。
$toTime = new \DateTime('05-06-1945'); echo RUtils::dt()->distanceOfTimeInWords($toTime); //Result: 24 976 $toTime = strtotime('05-06-1945'); $fromTime = null; //now $accuracy = 3; //, , echo RUtils::dt()->distanceOfTimeInWords($toTime, $fromTime, $accuracy); //Result: 24 976 , 11 , 21
固定日の間の期間
$fromTime = '1988-01-01 11:40'; $toTime = '2088-01-01 12:35'; $accuracy = 3; //, , echo RUtils::dt()->distanceOfTimeInWords($toTime, $fromTime, $accuracy); //Result: 36 525 , 0 , 55
透過モジュール
// echo RUtils::translit()->translify(' — '); //Result: Muha - eto malen'kaya ptichka // echo RUtils::translit()->detranslify("SCHuka"); //Result: // URL' echo RUtils::translit()->slugify(' — '); //Result: muha---eto-malenkaya-ptichka
タイプミスモジュール
$text = <<<TEXT ... . . ( " " № 45) Weather Forecast (r), - +-451F. TEXT; // echo RUtils::typo()->typography($text); /** * Result: * ... . . ( « » №45) Weather Forecast®, * — ±451°F. */ // "extended" echo RUtils::typo()->typography($text, TypoRules::$EXTENDED_RULES); /** * Result: * … . . ( « » №45) Weather Forecast®, * — ±451 °F. */ // echo RUtils::typo()->typography($text, array(TypoRules::DASHES, TypoRules::CLEAN_SPACES)); /** * Result: * ... . . ( " " № 45) Weather Forecast (r), * — +-451F. */
また(これはここでは表示できません)、Typoモジュールは改行なしスペース(NBSP、THIN NBSP)を配置します。 このモジュールはプレーンテキスト向けに設計されているため、特殊なHTML文字は使用されず、UTF-8文字が直接使用されます。
詳細
Pytilsを移植したとき、他のPytilsユーザーがPHPバージョンを簡単に使用できるように、すべての機能を実装し、インターフェイスを認識できるようにしようとしました。 また、ほとんどのテストケースは Pytilsテストから取得されます。 また、Pytilsリポジトリから多くのコメントと例を借りました。 しかし、もちろん、著者のビジョンとPHPの詳細に関連して、いくつかの「改善」がありました。
たとえば、 Dt :: ruStrFTimeメソッドのシグネチャを変更し、引数の大きなリストの代わりに構造体を使用することが決定されました。 Pythonにはドラマはありません。デフォルト値を持つ膨大な数の引数から突然変更された場合、最後の変更のみが必要です-名前付き引数が助けになります。 しかし、PHPで同様の状況が発生した場合、それは本当の悲劇になります。 そして、関数にはまともなパラメーターがあります。
また、多くの場合、PHP開発者はクラスオブジェクトを関数に渡すことを好まないが、配列を渡すことを好むため、これらすべてのパラメーターを連想配列の形式で渡す機能が実装されています。
日付に関するPHP開発者の好みも考慮に入れて、できる限り快適に作業できるようにしました。 ご存知のように、時間の経過とともに、PHPは2つの形式で動作することがよくあります。フリーストリング(02.03.2005、2005-03-02)とUnixタイムスタンプです。
DateTime
クラスも時々使用されます。 日付で機能する関数は、これら3つのタイプすべてで機能することを決定しました。 また、送信時間のタイムゾーンを指定する機能も追加しました。
すべてのパブリックメソッドと構造体フィールドについて詳細なコメントを書きました。 図書館はロシア語を話す聴衆を対象にしているという事実にもかかわらず、私は英語のコメントで自分自身と図書館利用者に良いオープンソースのルールを教えるために自分自身を恥ずかしくするという難しい選択をしました。
この記事に記載されているすべての例は、Webサーバーとコンソール(cp866を備えたWindowsコンソールを含む)の両方での実行に適したスクリプトの形式で利用できます 。
現時点では、ライブラリにバージョン0.1を選択していますが、それをさらに開発するのに役立つユーザーがいて、バージョン1.0、さらには2.0になることを願っています。