2016-08-02 12 views
1

私は自分のサイトを多言語にしました。言語コードをロケールに応じてページのアドレスに埋め込むことを希望します。 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

これがあなたを助けている場合、あなたは、この使用PrettyFacesを行うにしようとしているが、書き換えは(ライブラリPrettyFacesが基づいている)URLを国際化するための専用の機能を持っているので、私は、よく分からない:

https://github.com/ocpsoft/rewrite/blob/master/documentation/src/main/asciidoc/configuration/i18n.asciidoc

これはお手伝いの可能性があります。また、書き換えに基づくPrettyFacesを使用している場合は、既にこの機能にアクセスできます。

+0

あなたの答えに感謝します。私はちょうど使用するパラメータについて混乱しました。だから私は質問がある。 1-別のXMLファイルとして追加する必要はありませんか? prettyfacesのためにpretty-config.xmlがあります。 –

+0

2私はあなたが与えたコードのパラメータについてはまだ混乱しています。私は最後のものを "結合"で使いたいです。今私のホームページはhttp:// localhost:8080/Wirote/index.xhtmlで、私のリソースバンドルの場所は:src/main/resources/I18n/Paths_en.properties私はコード内で次のようにしています:.addRule(Join.path ( "/{lang}/{path}").to("/{path}.jsp"))。問題は、私の場合、「パス」はどうあるべきでしょうか?それは1つのページまたは全体のWebサイトのためだけに動作しますか? –

+0

http://ocpsoft.org/rewrite/をチェックしてください---あなたのルールはサイト全体に適用されます(構築方法によって異なります)。 この場合、{path}は、URLのその場所で一致するパターンとして使用されるパラメータを定義します。 PrettyFacesがURLパラメータを定義するために '#{path} 'と同じように...同じことです。 – Lincoln

関連する問題