Вам нужно сохранить выбранную локаль в области сеанса и установить ее в viewroot в двух местах: один раз UIViewRoot#setLocale()
сразу после изменения языкового стандарта (который изменяет локаль текущего режима просмотра и таким образом получить отражение в обратной передаче, эта часть не нужна, когда вы выполняете перенаправление впоследствии) и один раз в атрибуте locale
в
(который устанавливает / сохраняет языковой стандарт в следующем запросы / представления).
Вот пример того, как должен выглядеть такой LocaleBean
:
package com.example.faces;
import java.util.Locale;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
@ManagedBean
@SessionScoped
public class LocaleBean {
private Locale locale;
@PostConstruct
public void init() {
locale = FacesContext.getCurrentInstance().getExternalContext().getRequestLocale();
}
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);
}
}
И вот пример представления должен выглядеть так:
JSF/Facelets i18n example
Обратите внимание, что не требуется для функционирования JSF, но обязательно, как поисковые роботы интерпретируют вашу страницу. В противном случае это может быть отмечено как дублирующее содержимое, которое плохо для SEO.
Первые вещи сначала, я не хотел бы это как пользователь.
лучший способ сделать, вероятно, использует маленький апплет флэш-памяти, который играет Ваш звук в фоновом режиме.
Также ответил здесь: Межплатформенный, перекрестный браузер способ играть звук из JavaScript?
Найденный чем-то как этот:
//javascript:
function playSound( url ){
document.getElementById("sound").innerHTML="<embed src='"+url+"' hidden=true autostart=true loop=false>";
}
$('a').click(function(){
$('embed').remove();
$('body').append('<embed src="/path/to/your/sound.wav" autostart="true" hidden="true" loop="false">');
});