問題タブ [python-babel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 人間味のある時間フォーマットをローカライズする方法
次のような記事の時間の人間味のある出力を得るためにローカライズするにはどうすればよいですか
今日
16:48
また
昨日
17:10
また
12月13日
11:20
上記のコードを使用して、人間化された出力を表示するエンティティの時間のフィルターを作成できます。
しかし、文字列「Today」と「Yesterday」をローカライズするにはどうすればよいですか。また、1 月ではなく Jan、February ではなく Feb のようなバベルから省略形を取得するにはどうすればよいでしょうか。また、エンティティの国がわかっている場合に、このプロジェクトにタイムゾーンを追加するにはどうすればよいでしょうか。改造時に入っていた?アプリが複数のドメインを提供するため、どのドメインであったかを示す変数 entity.url があるため、基本的には entity.url (ブラジルのタイムゾーンとインドのタイムゾーン) に応じたタイムゾーンであり、私の基本的なローカリゼーションは主にブラジルのポルトガル語と英語です。しかし、それはもっとうまくいくはずです。つまり、言語の追加と言語への切り替えが簡単でなければなりません。
コメントの返信ありがとうございます
アップデート
現在は正しくレンダリングされていますが、まだタイムゾーンを機能させることができなかったため、django の時間から直接取得することはできませんでした。しかし、今残っている唯一の部分はタイムゾーンだと思います:
Dez などの翻訳された短い形式の月を取得するには、上記のようにする必要がありました。ブラジリア ポルトガル語の Dezember の場合)、ローカライズが改善されました。
上は以前のもので、以下はブラジル ポルトガル語にローカライズされたものです。
python - ジンジャフィルターでバベルでタイムゾーンを有効にする方法は?
babel ロケールに従ってタイムゾーンを使用したい。どうすればこれを達成できますか?私が持っている特定の状況は、記事の日付と時刻を表示するという目標と、人間化およびローカライズされた方法です。
昨日
13:21
または、スウェーデン語パラメータが設定されている場合は、それが表示されます
イゴール
13:21
日付が昨日でも今日でもない場合は、日付と 24 時間表示が出力されます。タイムゾーンの処理以外はすべて成功したと思います:
上記のコードは、出力をローカライズしてヒューマン化します。
言語をブラジルのポルトガル語などに切り替えることもできます。
「Hoje」は「今日」を意味するため、フィルターが機能しているように見えます。
コードでタイムゾーンも許可する方法を教えてください。ローカライズにはbabelを、レンダリングにはJinja2を使用しています。タイムゾーンは記事のタイムゾーンにするべきですか、それとも閲覧者のタイムゾーンにするべきですか? たとえば、ブラジル在住のブラジル人ユーザーがメッセージを投稿し、スウェーデン在住のスウェーデン人視聴者がそのメッセージを閲覧したとします。次に、どのタイムゾーンを使用する必要がありますか?
タイムゾーンを処理しようとする方法は、ドキュメントの状態のように pytz ライブラリをインポートし、タイムゾーン オブジェクトを使用することです。テンプレートコードを介してタイムゾーンパラメーターを渡すことができますが、記事またはロケールからタイムゾーンパラメーターを知るにはどうすればよいですか? この場合、ロケールとタイムゾーンはインド向けであり、ロケールは英語でタイムゾーンはインドであるため、異なります。
次に、このようなタイムゾーンパラメーターを渡すこともできます
フィルター:
したがって、少なくとも 1 つのタイムゾーンをローカライズできるようですが、動的にする方法を考えています。
python - 翻訳可能なテキストを外部ソースからカタログに取得する
おそらく私は明白な解決策を見落としているか、間違った方法を考えています...
限られた量のテキスト、データベース内の単語があり、flask / jinja /babelwebappでユーザーに翻訳して表示したいと思います。例えば。「running」は「activity」列の可能な値であり、ドイツのユーザーにとっては「laufen」である必要があります。
テンプレートとコードの単語が抽出されてカタログに入れられますが、カタログに追加の単語を入れるにはどうすればよいですか?簡単なテキストファイルエクストラクタはありますか?
私が考えることができる唯一のことは、.pyファイルを作成し、それらにたくさんの_('...')行を入れることですが、それはちょうど間違っていると感じます...そうですか?
python - 私の wtform をローカライズする方法は?
英語から多くの言語にローカライズしたいフォームがあります。gettext またはデータストアのいずれかを使用して実行できます。パフォーマンスのために gettext を選択しましたが、データストアを使用して翻訳を保存することもできます。実際の翻訳は .po ファイルに保存され、poedit でコンパイルして .mo ローカリゼーション ファイルに変換します。フォームのビューは次のとおりです。
検証もローカライズされますが、そのカテゴリが必要である必要がありますが機能していません:
そしてバックエンドコードは
関連するテンプレート コードは次のとおりです。
フォーム入力を受け取る方法は、HTTP POST です。
カテゴリが翻訳されないのはなぜですか? オプションも無効にすることができ、その場合は背景が灰色になる場合、カテゴリを処理する最良の方法は何ですか? レンダリングをハードコーディングされた HTML やテンプレート コードから wtforms に移行する方法が他にもありますか?
回答またはコメントをお寄せいただきありがとうございます
python - トランクバージョンにPythonBabelライブラリをインストールするにはどうすればよいですか?
Babelのインストールで文書化された機能が欠落している理由を何時間も調べた後、Babel開発には2つのブランチがあることを学びました。
Babelには、プロジェクトに取り組んでいる開発者がほとんどいないにもかかわらず、約4年間、2つの別々の開発パス(0.9.xブランチとトランク)が並行してあります。私たちは安定した1.0バージョンをリリースすることでその状況を解決しようとしていますが、実際のライブはオープンソースの貢献に必ずしも友好的ではありません。
BabelのFAQはそれを確認しています。プロジェクトでFlask-Babelを使用したいと思います。setup.py
それは私がちょうど必要だと言うの依存関係Babel
です。これはpip
、環境にインストールされているバージョンを取得するか、PyPIで最新バージョン(バージョン0.9.6 )を検索することを意味します。論理的には、Flask-Babelは0.9.xブランチには存在しない関数を使用します。何かが足りないかもしれませんし、混乱しているかもしれませんが、新機能のほとんどがどこにあるトランクバージョンを簡単にインストールできますか?そして、どうすればそのようなバージョンを自分の中で使用するように強制できsetup.py
ますか?Flask-Babelを使用する人々にとって、それはどのように機能しますか?(私は知っています、最後の質問はかなりフラスコ固有であり、ここに行く必要があります、しかし他のすべての質問は他の誰にでも答えることができます。)
提案ありがとうございます。大胆な質問が最も重要であり、残りはむしろFlask-Babel固有の「持っていて良かった」です。
python - UNIXタイムスタンプを使用して、babelのformat_timedeltaのtimedeltaを生成します
私がそれを正しく表現したかどうかはわかりませんが、python と時間はいつも私を混乱させます。これが私が試みていることです。間違いなく過去 (数秒前または数年前) の UNIX タイムスタンプ (INT) を指定すると、babel format_timedelta を生成したい
私の問題は
- Babel format_timedelta は最初の引数として timedelta を取ります
- だから私は time.time() (今) と私が持っている UNIX タイムスタンプを使用して timedelta を生成する必要があると思います。
パート2がわかりません。これを行うためのより簡単で正しい方法があるに違いないと思います。これを行うための最良の方法を共有してください。また、Webページで使用する必要があるため、計算を高速にする必要があります.
date.format_timedelta() でエラーが発生します AttributeError: 'module' オブジェクトに属性 'format_timedelta' がありません
javascript - Babel CLI エクストラクタを使用して Javascript gettext メッセージを抽出する
ここでは、Babel が Python および Javascript ファイルの gettext メッセージを抽出できることが述べられています。
Babel には、python (Python ソース ファイルからメッセージを抽出する)、javascript、ignore (何も抽出しない) という組み込みのエクストラクターがいくつか付属しています。
コマンド ライン エクストラクタはここに文書化されていますが、使用例はありません。
また、上記の同じポインターで、抽出で使用される構成ファイルについて言及されていますが、あまり拡張されていません。
js ファイルを含むディレクトリでエクストラクタの基本コマンドを実行すると、生成された .PO ヘッダーのみが表示されますが、メッセージは表示されません。
メッセージを抽出しようとしている js ファイルのサンプル セグメントを次に示します。
誰かが抽出を機能させるための正確な CLI オプションと構成設定、またはそのようなポインタを提供していただければ幸いです。
python - ビューとテンプレートの外でPyramidi18nを使用するにはどうすればよいですか?
Pyramidのドキュメントには、ビュー(およびテンプレート)内でi18nを使用する方法が示されています。しかし、現在のビューやテンプレートにアクセスできないビューやテンプレートの外でそれを使用するにはどうすればよいでしょうかrequest
(たとえば、informs
やmodels
)。
@Michaelはrequest
モデルとフォームに渡すと言いました。しかし、それは正しいですか?つまり、フォームフィールドが__init__()
メソッド呼び出しの前に定義されている場合、モデルと同じです。ビューからパラメータは表示されません...
Pylonsでは、親コントローラーで適切な言語を使用get_lang()
して定義し、可能な限りいつでも(ビューで)直接呼び出すことなく、任意の場所で使用できます。set_lang()
ugettext()
ungettext()
request
ピラミッドでそれを行う方法は?言語はユーザーの設定(セッション、Cookie、データベースなど)から設定する必要があることに注意してください。
python - babel、django、および jinja2 を使用して i18n js を提供する
django を使用し、レンダリングに jinja2 を使用し、メッセージ抽出に babel を使用する
国際化が必要な js ファイルがいくつかあります。それらからメッセージを抽出するための構文を理解することができませんでした。これにより、jinja2 でメッセージをレンダリングすることもできます。jinja2 が抽出可能な構文を読み取る方法を学習するか、jinja2 がレンダリングできるものから抽出する必要があります。(または、これを完全に別の方法で行います)
抽出中
jsでメッセージをマークすると
ちゃんと抽出します。
レンダリング
しかし、jinja2 は js の gettext 呼び出しを置き換えません (js テンプレートを返す前に jinja2 でレンダリングしています) - 次のようなものが必要です
ただし、その構文を使用してメッセージを抽出することはできません。
Babel は、babel.messages の関数 extract_javascript を使用してメッセージを抽出していますが、このタイプのタグを処理する機能が備わっていないようです。
python - python webapp2 babelを使用したGoogleアプリエンジンでのlazy_gettextエラー
背景: 私は gae-boilerplate の主要な貢献者の 1 人です。gae-boilerplate は、ユーザーが webapp2 と最新機能を使用して Google アプリ エンジンで開発をすぐに開始できるようにするオープン ソースのボイラープレート プロジェクトです。私が取り組んだ最新の機能は、Babel と gaepytz を使用した i18n であり、以下に説明する問題が存在します。
問題: 翻訳は gettext で機能していますが、ハンドラーと wtforms クラスで生成されたフォーム エラー メッセージの翻訳には、私が知る限り、lazy_gettext が必要です。handlers.py を呼び出すと、Lazy_gettext が機能しませんfrom webapp2_extras.i18n import lazy_gettext as _
。ページの読み込み時に、以下の致命的なエラー メッセージが表示されます。Babel Lazy プロキシ オブジェクトが作成されたように見えますが、ローカライズされた文字列をレンダリングするために呼び出されてから、Google アプリ エンジン サーバー コードの json シリアライザーに渡されません。私はbabelサイト、webapp2のドキュメント(もっと徹底したい)、他のフレームワーク、そしていくつかのGoogleコードを見てきましたが、私が欠けているものを理解することができませんでした.
エラーメッセージ:
環境の詳細: python、webapp2、babel などのバージョンに関するすべての詳細は、github.com/coto/ gae-boilerplate の readmeまで下にスクロールすると見つかります。最新の Google アプリ エンジン SDK 1.7.0 を実行しています
再現方法:
- https://github.com/coto/gae-boilerplateからコードをダウンロードします
from webapp2_extras.i18n import gettext as _
web/handlers.py を次のように置き換えますfrom webapp2_extras.i18n import lazy_gettext as _
- アプリ エンジン開発サーバーを使用して実行します (手順はhttps://developers.google.com/appengine/docs/python/tools/devserverにあります) 。
- サインアップするか、ログインしてからログアウトします (localhost:8080/logout/)。ログアウトすると、ログアウトしたことを示すフラッシュ メッセージが生成され、lazy_gettext でラップされたメッセージを使用してログアウト ハンドラでエラーが生成されるため、エラーが発生します。
このプロジェクトと webapp2 の他のユーザーの助けになることは間違いありません。また、github のコードに目を通しておけば、ベスト プラクティスのヒントが得られます。ありがとうございました!