2015-02-10 4 views
0

Я создаю мой .properties файл (это, EN, FR) и я поставил i18n МодельBinding язык не работает

var oI18nModel = new sap.ui.model.resource.ResourceModel({ 
     bundleUrl: "i18n/i18n.properties" 
    }); 
    sap.ui.getCore().setModel(oI18nModel, "i18n"); 
    this.setModel(oI18nModel, "i18n"); 

Мое приложение запускается правильно на итальянском. Теперь у меня есть кнопка, которая переключается на язык en. Это код:

var bundleLocale=sap.ui.getCore().getModel("i18n").getProperty("/bundleLocale/"); 
    bundleLocale="en"; 
    sap.ui.getCore().getModel("i18n").refresh(true); 

но вид не изменится ...

Почему?

При запуске модели i18n содержит:

bundleUrl= "i18n/i18n.properties" 

После этого я выполняю этот код:

i18nModel = new sap.ui.model.resource.ResourceModel({ 
       bundleUrl : "i18n/i18n.properties", 
       bundleLocale : "fr" 
      }); 
      sap.ui.getCore().setModel(i18nModel, "i18n"); 

и модель теперь содержит

bundleUrl= "i18n/i18n.properties" 
bundleLocale="fr" 

Вместо если я использую этот код :

sap.ui.getCore().getConfiguration().setLanguage("fr") 

модели i18n не меняет

в обеих случаях мое мнение не изменится

ответ

0

Я решил свою проблему! В моем Component.js, в init функции я написал:

var oI18nModel = new sap.ui.model.resource.ResourceModel({ 
     bundleUrl: "i18n/i18n.properties" 
    }); 
    sap.ui.getCore().setModel(oI18nModel, "i18n"); 
    this.setModel(oI18nModel, "i18n"); 

и в createContent функции я написал:

// create root view 
    var oView = sap.ui.view({ 
     id: "app", 
     viewName: "stg.view.App", 
     type: "JS", 
     viewData: { 
      component: this 
     } 
    }); 

И когда я хотел изменить язык я writted:

 var i18nModel = new sap.ui.model.resource.ResourceModel({ 
      bundleUrl : "i18n/i18n.properties", 
      bundleLocale : sBundleLocale 
     }); 
     sap.ui.getCore().setModel(i18nModel , "i18n"); 

но в этом режиме я не видел никаких изменений. Сейчас я пишу

var oApp = sap.ui.getCore().byId("app"); 
oApp.getViewData().component.setModel(i18nModel, "i18n"); 

Это работает!

+1

Я думаю, что настоящая ошибка заключается в том, что вы устанавливаете модель дважды: один раз в ядро ​​'sap.ui.getCore() .setModel (oI18nModel, «i18n»); 'и один раз в приложение' this.setModel (oI18nModel, «i18n»); 'поскольку ядро ​​сидит« глубже », установка модели там не влияет, если вы также установите модель явно в приложении поверх нее. Кроме того, поскольку языковые настройки считаются глобальными, я бы просто установил их в ядро ​​в любом случае, а не на конкретные приложения/представления сверху – Qualiture

2

В вашем коде, вы получаете имущество от вашего пакета ресурсов (то есть, один из переводов), а не фактическая Locale Кроме того, вы устанавливаете переменную bundleLocale, но вы никогда не использовать эту переменную ...

правильный способ выбора языка приложения использует setLanguage() сПОСОБА sap.ui.core.Configuration «s (см https://sapui5.netweaver.ondemand.com/sdk/docs/api/symbols/sap.ui.core.Configuration.html#setLanguage)

В качестве альтернативы, языковой стандарт с моделью ресурса:

setLanguage : function(sLanguage) { 
    i18nModel = new sap.ui.model.resource.ResourceModel({ 
     bundleUrl : "i18n/i18n.properties", 
     bundleLocale : sLanguage 
    }); 
    sap.ui.getCore().setModel(i18nModel, "i18n"); 
} 

EDIT: Смотрите этот рабочий пример http://plnkr.co/edit/pj6Ze1D60lrXQ47peowT?p=preview

С помощью переключателя на панели для переключения между немецким и английским UI языком

+0

ecxuse me. Я обновил свой Q – padibro

+0

Я понятия не имею, что вы делаете неправильно ...см. мой обновленный ответ для рабочего примера – Qualiture

+0

Знаете ли вы, есть ли возможность получить пользовательский язык по умолчанию? из настроек браузера или что-то в этом роде (без дополнительной службы). – zyrex

Смежные вопросы