問題タブ [messageformat]
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.
java - MessageFormatパターン文字列で{文字をエスケープする方法は?
次のような文字列があります。
ABC {有名なマジシャン} が {0} で {1} 時間パフォーマンスします。
中かっこの最初のペアのプレースホルダーはありません。プレースホルダー {0} と {1} を置き換える 2 つの文字列を含むオブジェクト配列を使用して、この文字列を MessageFormat.format(String, Object[]) メソッドに渡すと、次のエラーが発生します。
java.lang.IllegalArgumentException: すべての引数識別子は、負でない数値またはパターン ([:ID_Start:] [:ID_Continue:]*) に従った文字列でなければなりません。
中括弧の最初のペアが最初のプレースホルダーとして解析されているように見えますが、有効なプレースホルダーではないため、エラーが発生します。
MessageFormat.format に最初の中かっこのペアを無視し、残りの 2 つを処理するように指示するにはどうすればよいですか?
javascript - Meteor のローカリゼーション / i18n ライブラリの比較
どちらを使用するかを評価しようとしているので、この決定を下した他の人からのフィードバックをいただければ幸いです。翻訳には 2 つの大きなプロジェクトがあるようです。
メッセージ形式
http://messageformat.meteor.com/
長所
- MessageFormat.js 実質的な lib に基づく
- 抽出ツールが含まれています
- アプリで文字列が更新された場合、あいまいな文字列とバージョンを処理します
- JavaScript とハンドルバーのメソッド
- 文字列翻訳用の事前構築済み翻訳ツール / WebUI http://messageformat.meteor.com/translate/af
- 流星の第一人者であり、活発なコミュニティのガイであるガディによって書かれました
TAP i18n
ノート:
- i18next エンジンに基づく
- AJAX を使用して言語をロードする
長所
- ブートストラップ/言語ピッカーのヘルパー
- パッケージのサポート
- DB コレクションの翻訳のサポート https://github.com/TAPevents/tap-i18n-db )
短所?- JSON 形式のみ、yaml なし、編集が面倒 - 文字列を管理するための WebUI なし
https://github.com/Nemo64/meteor-translatorなどのプロジェクトは他にもいくつかあります が、上記の 2 つが最も徹底しているようです。他に見逃したことがありますか?
適切なツールを選択する際に人々が使用するその他の基準は何ですか? messageFormat と i18next の基本的な技術が要因のようです。
質問:
1) ページ内の複数の言語
私はバイリンガルアプリをやろうとしていますが:
タップ: 「現在のクライアントの言語に必要な翻訳のみがネットワーク経由で送信されます」
これは、言語がAまたはBのみであり、混合ではなく、セッションに基づいて自動的に切り替えられることを意味しますか?
つまり、複数の翻訳を行うためにページにヘルパーを提供する方法
2) 動的データの抽出
少なくとも messageFormat プロジェクトは静的ページの文字列をキャプチャ/抽出しますが、複雑な mongo コレクションに既に多くのコンテンツがある場合、これをキャプチャする方法はありますか?
この分野のパッケージ作成者または他の人からの洞察に感謝します。
java - ローカライズされた Java 浮動小数点値を完全な精度で出力するにはどうすればよいですか?
メソッドを使用して double をフォーマットすると、doubletoString
の完全な精度が得られます。例 ( Scala構文を使用):
以下を含む文字列になります。
ただし、この値はローカライズされていません。double 値を boxed として渡すと、次のようになりDouble
ます。
(AnyRef
はJavaと同等の Scala 型です)の場合、結果は精度が切り捨てられたローカライズされた文字列になります。Object
書式文字列にさらにヒントを追加しても、結果は同じです。
カスタム形式を指定することで、完全な精度を得ることができます。
ただし、これには double の大きさと精度に関するある程度の知識が必要です。( Piだけでなく) double 値を出力していて、値の完全な精度を保持したい場合、このアプローチは、書式文字列を動的に変更する必要があることを意味します。 ) フォーマット文字列は、実際にはリソース バンドルから取得されます。
たとえば、 の double 値を考えてみましょう1.0e37
。最初に文字列に変換し、フォーマット文字列として "{0}" を使用すると、適切ではあるがローカライズされていない文字列値になります1.0E37
。これをDouble
"{0,number}" の書式文字列でボックス化して渡すと、ばかげた値が得られます10,000,000,000,000,000,000,000,000,000,000,000,000
。
要するに、最初に double を文字列に変換せずに double の完全な精度を維持するフォーマット文字列を見つけることができないようです。これは、ペストのように避けたいものです。double の完全な精度をローカライズされた値として出力する数値書式文字列はありますか?
更新:
double を文字列に変換する必要がない理由を明確にするために:
toString
私が知る限り、有効なJava double リテラル値を返します。文字列として、結果は に渡されるときにローカライズされませんMessageFormat.format
。たとえば、 value のローカライズされた形式を出力したいとします1234.567
。toString
を返し"1234.567"
、MessageFormat.format
そのままにしておきます。罰金。私は自分の精密出力を持っています。ただし、ドイツでは、これは"1.234,567"
. 米国/英国でも、これは"1,234.567"
.- boxed
Integer
、Boolean
、またはその他の非浮動小数点プリミティブ型をMessageFormat.format
(単純な "{ n }" 形式で) に渡すと、適切にローカライズされた完全精度の出力が得られます。ローカライズされた出力が失われるため、最初にこれらの値を文字列に変換する必要はありません。これは、double (および float とBigDecimal
s) を別の方法で処理し、それらを に渡す前に文字列に変換する必要があることを意味しMessageFormat.format
ます。(さらに、毎回それを忘れずに行う必要があります。)
java - Javaで生成されたパターンから元のコードを取得する方法は?
プレースホルダーがどこにあるのと同じパターンにjava.util.Set<String>
従う"200Y2Z", "20012Y", "200829", "200T2K"
とします。Javaでそのような文字列から一意のコードだけのセットを取得する最も効率的な方法はどれですか?"200$2$"
"$"
入力:java.util.Set<String>
の"200Y2Z", "20012Y", "200829", "200T2K"
期待される出力:java.util.Set<String>
の"YZ", "1Y", "89", "TK"
私の試み::
正常に動作していますが、これを達成するための効率的な方法はありますか? 1000Kを超えるコードに対してそれを行う必要があります。
java - messageFormt() 多次元配列のエラー
こんにちは、プログラムを実行しようとしていますが、本当に奇妙な出力が得られます。このプログラムは、単一の配列の場合は機能しますが、多次元にするとエラーになります。助けてください
私の出力は次のとおりです。
wso2 - wso2 ESB で未形成のリクエスト xml メッセージを受け入れる方法
私は wso2esb 4.8.1 を使用しているため、クライアントは以下のような未形成の xml を送信しています。
上記のリクエストでは、 xsi Prefix 名前空間が宣言されていないため、wso2esb サーバーで以下のようなエラーが発生します。
これは属性であるため、その名前空間を宣言していません。 java.lang.Thread.run(Thread.java:744) で原因: org.apache.axiom.om.OMException: javax.xml.stream.XMLStreamException:ParseError at [row,col]:[4,41] メッセージ: http://www.w3.org/TR/1999/REC-xml-names-19990114#AttributePrefixUnbound?r:user&xsi:type&xsi
wso2esbでxml検証を無効にする方法、またはこの種のメッセージをどのように処理するか、名前空間が正常に機能していると宣言した場合、私のレガシーシステムは、他のESBの同じ要求が正常に機能している場所でこれを送信していません。
Http、NHttpトランスポートを使用して、axis2ファイルのさまざまなメッセージビルダーを変更してみました。
前もって感謝します。