web-dev-qa-db-ja.com

安全にカレンダーウィジェットにいくつかのUnicodeテキストをフックするにはどうすればいいですか?

私はWordPressカレンダーの機能を置き換える良い数字を集めました:

function make_bangla_number($str)
{
    $engNumber = array('0','1','2','3','4','5','6','7','8','9');
    $bangNumber = array('০','১','২','৩','৪','৫','৬','৭','৮','৯');
    $converted = str_replace($engNumber, $bangNumber, $str);

    return $converted;
}

この関数は、英語の数字を取り、それを単にBānglāの数字に置き換えることを明確に述べています。

しかし、問題は私がすべてのグレゴリオ暦月をBānglāスクリプトに置き換えることができる同様の機能にありますが、数字機能を使用して、私はカレンダーウィジェットをめちゃくちゃにしています。という理由で:

add_filter( 'get_calendar', 'make_bangla_number' );

hTMLでも、すべての数字を置き換えます。 HTMLで前月のリンクを仮定します。

<td id="prev" colspan="3">
   <a title="View posts for October 2013" href="http://localhost/wp_developer/?m=201310">
      « Oct
   </a>
</td>

取得...

<td id="prev" colspan="৩">
   <a title="View posts for অক্টোবর ২০১৩" href="http://localhost/wp_developer/?m=২০১৩১০">
      « অক্টোবর
   </a>
</td>

2つの問題があります。

  1. アンカーのパスが間違っているため、アーカイブURLは設定されていません(?m=২০১৩১০
  2. HTMLがHTMLプロパティに対して誤った値を取得しているため、Widgetアーカイブの構造が壊れています(colspan="৩"

そして、あなたは皆、すべてのUnicodeの数値が数値で等しくても、バイナリの値に等しくないことを知っています。そのため、ラテン数字の1は、そのバイナリ値と比較して、BānglāNumeralのと同等ではありません。

そう、
WEを安全な方法でそのようなフィルター/フックで処理する方法を教えてください。

1
Mayeenul Islam

あなたが デフォルトカレンダーウィジェット を意味すると仮定すると、あなたは本当に2つの選択肢があります:

  1. 非常に複雑な正規表現
  2. またはあなた自身のウィジェットを作ります。

私は#2を選ぶでしょう、その本質は実際には get_calendar 関数です。その機能のクローンを作成し、必要に応じて日付を変更してください。

これはあなたの言語に適したローカライズ版のWordPressがないと仮定しています - @ birgireのコメントを見てください。

1
s_ha_dum