2017-05-05 46 views
4

我對日期和貨幣使用Angular 2本地化支持。角4內部化

本地化設置在主應用程序模塊級完成。 在我的應用程序模塊設置中,如果我神奇地配置LOCALE_ID提供程序,我有本地化支持。

@NgModule({ 
    imports: [ BrowserModule ], 
    declarations: [ AppComponent ], 
    providers: [ 
    { provide: LOCALE_ID, useValue: 'nl' } 
    ], 
    bootstrap: [ AppComponent ] 
}) 
export class AppModule { } 

現在,如果我使用的貨幣管上我的應用程序如下:

@Component({ 
    selector: 'my-app', 
    template: '<h1>{{title}}</h1>' + 
      '<div>{{convertNumber | currency}}</div>', 
}) 

export class AppComponent { 
    title = 'Currency Test'; 
    convertNumber = '12.30'; 
} 

你可以找到在此plnkr code工作實例。

我得到了這個輸出USD 12,30

荷蘭的匯率不是美元。

基於這個問題,我有兩個問題:

  • 當我配置LOCALE_ID究竟是什麼回事? 這個本地化文件在哪裏?
  • 我不想看到USDEUR,我希望看到貨幣符號本身。 (例如€)在文檔中,貨幣的默認配置是貨幣符號(€),而不是貨幣文本(EUR)。

顯然,Angular 2的本地化文件是錯誤的。

如何找到該文件並對其進行編輯?

謝謝。

+1

只要閱讀CurrencyPipe的文檔:https://angular.io/docs/ts/latest/api/common/index/CurrencyPipe-pipe。 html –

回答

1

我已經通過源代碼搜索,這裏是我對你的問題的調查結果:

首先,如果你看看在currency管線159 Source1

管道調用formatNumber方法=>Source2

它返回NumberFormatter.format。爲了這一點上,locale參數在NumberFormatter.format源代碼總是進行(但從未實際使用)

最後Source3它返回一個Intl.NumberFormat

這個方法看看,MDN:https://developer.mozilla.org/tr/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat

的此方法與貨幣選項的用法如下:

var number = 123456.789; 

// request a currency format 
console.log(new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(number)); 
// → 123.456,79 € 

那麼讓我們回到源代碼並查看在第二個參數中設置了currency選項的位置。

https://github.com/angular/angular/blob/master/packages/common/src/pipes/intl.ts#L34

人們可以預期角到locale參數轉換爲實際的當地貨幣(例如nlEUR),而是它是

options.currency = typeof currency == 'string' ? currency : undefined; 

所以,如果你不通過貨幣像這樣輸入:

'<div>{{convertNumber | currency:"EUR":true}}</div>', 

工作重撥:https://plnkr.co/edit/Ln6br8ZKQdCbA8Ejn5Cr?p=preview

角將顯示它的默認行爲是USDSource4

+0

我想爲我的項目添加語言支持。如果我這樣配置,我將無法更改語言。 此外,我寧願找到這個本地化文件的位置並修復它。 – ankakusu

+0

@ankakusu我知道:(也許有人會糾正我,但Angular似乎沒有貨幣管道的區域設置支持,因爲我已經說過 – echonax

+2

@ankakusu首先,'nl'是一種語言,絕對沒有理由在設置特定語言時選擇特定貨幣所有在地球上說法語的人都不會使用同一種貨幣如果您使用nl_NL,這是有爭議的,但即使如此,Angular也選擇了使用美元默認情況下,讓你明確地指定一個貨幣,如果你想要一些不同的東西,第二,正如這個答案所解釋的那樣,沒有這樣的文件需要修改,管道依賴於標準的Intl api,由瀏覽器本身提供(或者老式的polyfill瀏覽器)。 –