私は自分のサイトを多言語にしました。言語コードをロケールに応じてページのアドレスに埋め込むことを希望します。 multi-language url rewiting. Is it possibl E:Prettyfacesを使用した多言語URL rewiting
http://localhost:8080/Wirote/de/index --- display German content
http://localhost:8080/Wirote/en/index --- display English content
http://localhost:8080/Wirote/ar/index --- display Arabic content
私は、ステップを追っこれを達成するために:
http://localhost:8080/Wirote/index
私は次のようにそれを持ってしたい:私は、次がありますか?私はプロジェクトを実行するとき
かなり-config.xmlの
<url-mapping id="base">
<pattern value="/#{localeManger.language}"/>
</url-mapping>
<url-mapping id="index" parentId="base">
<pattern value="/index"/>
<view-id value="/index.xhtml"/>
</url-mapping>
のfaces-config.xmlの
<application>
<locale-config>
<default-locale>de</default-locale>
<supported-locale>en</supported-locale>
<supported-locale>ar</supported-locale>
</locale-config>
<resource-bundle>
<base-name>I18n.lang</base-name>
<var>sprache</var>
</resource-bundle>
</application>
LocaleManger.javaは
@ManagedBean(name = "localeManger")
@SessionScoped
public class LocaleManger implements Serializable{
private Locale locale;
private static final long serialVersionUID = 2756934361134603857L;
@PostConstruct
public void init() {
FacesContext.getCurrentInstance().getApplication().getDefaultLocale();
}
public Locale getLocale() {
return locale;
}
public String getLanguage() {
return locale.getLanguage();
}
public void setLanguage(String language) {
locale = new Locale(language);
FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
}}
は今、私は得た:
http://localhost:8080/Wirote/index
もページがスタックしているので、私は、私がいるindex.xhtmlに以下を追加し
代替index.xtml内の別の使用してリンクに移動することはできません。
<f:metadata>
<f:viewParam name="locale" value="#{localeManger.language}"/>
</f:metadata>
かなり-config設定。
http://localhost:8080/Wirote/de/index
:私はプロジェクトを実行すると、XML
<url-mapping id="index">
<pattern value="/#{locale}/index"/>
<view-id value="/index.xhtml"/>
</url-mapping>
は今、私は次の取得します
しかし、言語を変更しようとすると、英語またはアラビア語の言語切り替えをクリックすると正しく動作せず、ページの内容は変わりますが、アドレスページは変わりません。しかし、私は
http://localhost:8080/Wirote/en/index or
http://localhost:8080/Wirote/ar/index
に手動で変更した場合には、アラビア語と英語で正しいコンテンツを表示するが、私はアドレスがない手動で自動的に変更する必要があります。
現在のロケールに関連する正しいアドレスを取得するにはどうすればよいですか?
あなたの答えに感謝します。私はちょうど使用するパラメータについて混乱しました。だから私は質問がある。 1-別のXMLファイルとして追加する必要はありませんか? prettyfacesのためにpretty-config.xmlがあります。 –
2私はあなたが与えたコードのパラメータについてはまだ混乱しています。私は最後のものを "結合"で使いたいです。今私のホームページはhttp:// localhost:8080/Wirote/index.xhtmlで、私のリソースバンドルの場所は:src/main/resources/I18n/Paths_en.properties私はコード内で次のようにしています:.addRule(Join.path ( "/{lang}/{path}").to("/{path}.jsp"))。問題は、私の場合、「パス」はどうあるべきでしょうか?それは1つのページまたは全体のWebサイトのためだけに動作しますか? –
http://ocpsoft.org/rewrite/をチェックしてください---あなたのルールはサイト全体に適用されます(構築方法によって異なります)。 この場合、{path}は、URLのその場所で一致するパターンとして使用されるパラメータを定義します。 PrettyFacesがURLパラメータを定義するために '#{path} 'と同じように...同じことです。 – Lincoln