2017-01-27 40 views

回答

5

你不行。 Go標準庫不包含本地化的月份,日期和區域名稱。名稱連接到time包。

例如,通過Month.String()返回月份的名稱都存儲在未導出time.month全局變量:

var months = [...]string{ 
    "January", 
    "February", 
    "March", 
    "April", 
    "May", 
    "June", 
    "July", 
    "August", 
    "September", 
    "October", 
    "November", 
    "December", 
} 

func (m Month) String() string { return months[m-1] } 

同樣,平日的名稱來自Weekday.String(),存儲在未導出變量time.days

話雖如此,可能會有第三方庫支持您的需求。下面是一個不完整的一個可能是對你有所幫助:https://github.com/mattbaird/go-i18n-formats

正如下面伊戈爾出殯共享,這個第三方的lib是更加完整:https://github.com/variadico/lctime

還要注意的是,同時提供了一般,多語種時間格式軟件包並不是一件容易的事,如果你真的需要它,你可以拿time包,把它複製到你的項目中,並將名稱翻譯成你需要的語言。

另請注意,支持少量語言和少量佈局,您可以輕鬆地自行創建格式。

例如,下面的代碼格式在匈牙利語中給定的time.Time值,使用你在你的問題中使用的佈局:

func Format(t time.Time) string { 
    return fmt.Sprintf("%s %02d. %s", 
     days[t.Weekday()][:3], t.Day(), months[t.Month()-1][:3], 
    ) 
} 

var days = [...]string{ 
    "Vasárnap", "Hétfő", "Kedd", "Szerda", "Csütörtök", "Péntek", "Szombat"} 

var months = [...]string{ 
    "Január", "Február", "Március", "Április", "Május", "Június", 
    "Július", "Augusztus", "Szeptember", "Október", "November", "December", 
} 

測試它:在Go Playground

fmt.Println(Format(time.Now())) 

輸出:

Ked 10. Nov 

我的本地機器輸出:

Pén 27. Jan 
+0

我不敢相信它是如此糟糕。有沒有健全的i18n包裹去? –

+0

@IgorChubin不幸的是,還沒有(我知道的)。但爲了支持特定的語言和佈局,這很簡單。添加到答案中。 – icza

+1

我找到了這個庫:https://github.com/variadico/lctime,它似乎有我需要的功能。謝謝icza! –

相關問題