2015-11-03 66 views
2

如果我例如。使用我的標題中的選擇下拉輸入字段(更確切地說,在我的站點範圍的導航欄中,這是自定義元素),並在共享狀態對象中設置全局值。如果我 - 上languageChanged(value)(在導航欄自定義元素內)也改變了this.i18n.setLocale('de-DE')在Aurelia刷新i18n翻譯的字符串插值值

我怎麼會再刷新在我的模板的國際化翻譯字符串插值(如:${'status_deceased' | t}),而不必導航到一個新的路由現在我回來了嗎?

,我發現這個問題,關於https://github.com/aurelia/i18n/issues/6但因爲我需要這個工作,我希望一些聰明的解決辦法存在,但不必使用window.location的重新載入頁面的問題github上:/

編輯

如果我正確理解這一點,似乎它可能只是我的幸運日,而這樣的功能剛剛在8天前添加,雖然仍然沒有記錄:https://github.com/aurelia/templating-resources/pull/126 - 任何人都可以弄清楚並告訴我如何實施這個,使用這個新功能呢?如果我自己解決這個問題,我將使用解決方案更新此主題:-)

回答

3

當下一個版本發佈時,您將能夠使用signal綁定行爲爲綁定分配「信號名稱」,如此:

<h1>${'title_key' | t & signal:'i18n'}</h1> 
<p>${'content_key' | t & signal:'i18n'}</p> 

&符號表示「結合行爲」(相對於|爲值轉換器)。綁定行爲是爲綁定添加「行爲」的資源。他們可以完全訪問綁定實例,並在綁定的bindunbind生命週期事件之前收到通知。

Aurelia將附帶一些內置的綁定行爲:「油門」,「反彈」,「一次性」,「信號」等。您還可以選擇創建自己的綁定行爲。

在上面的例子中,我們給titlecontent插值綁定了一個「信號」名稱「i18n」。這個名字是任意的,我們只需要知道它是什麼,所以我們可以「信號」綁定使用BindingSignaler這樣刷新:

import {BindingSignaler} from 'aurelia-templating-resources'; 
import {inject} from 'aurelia-framework'; 

@inject(BindingSignaler) 
export class App { 
    constructor(signaler) { 
    this.signaler = signaler; 
    } 

    // invoking this method will refresh all bindings in the application 
    // with the "signal name" of "i18n" 
    refreshBindings() { 
    this.signaler.signal('i18n'); 
    } 
} 

我想象一旦綁定行爲功能下降將有額外的工作i18n插件將t值轉換器與某些版本的signal綁定行爲相結合,以啓用簡潔的綁定表達式,以便在語言更改時兼顧翻譯和刷新綁定,因此您可能需要暫時坐下來。

編輯 如果你需要的東西今天,你可以採取現有奧裏利亞功能的優勢:綁定重新評估時,轉換器參數變化

  1. 創建一個新類:
export class LanguageChangedNotifier { 
    signal = 0; 

    notify() { 
    this.signal++; 
    } 
} 
  • 注入此類納入所有視圖的模型和添加的實例作爲一個屬性:
  • @inject(LanguageChangedNotifier) 
    export class App { 
        constructor(notifier) { 
        this.notifier = notifier; 
        } 
    } 
    
    1. 在您的t綁定中使用通知符(它不會影響所述t值轉換器的行爲):
    ${'status_deceased' | t:notifier.signal} 
    
  • 當改變區域設置,使用通知刷新綁定:
  • this.notifier.notify(); 
    
    +0

    真棒傑里米。 Aurelia及其社區/開發人員是我迄今爲止在任何框架中遇到的最有用和最聰明的一些。我確實有一個小問題。我有這個最後的問題(刷新/翻譯的事情),我一直在未來的實際使用Aurelia在大客戶的生產。所以,儘管我一定會添加這個 - 正確的方法 - 一旦下一個版本發佈,您能否爲我提供一個臨時解決方案供我使用。需要明天提供。如果全部失敗我想我可以被迫使用window.location,但我希望不會! :-) – Dac0d3r

    +0

    肯定 - 請參閱上述編輯的解決方法。希望你明天發佈一切順利! –

    +0

    輝煌。非常感謝! :D – Dac0d3r