2017-01-27 1 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] } 

同様に、平日の名前はアンエクスポート変数time.daysに格納され、Weekday.String()から来ます。

あなたのニーズをサポートするサードパーティライブラリが存在する可能性があります。ここではあなたにいくつかの助けになるかもしれない不完全な1です:https://github.com/mattbaird/go-i18n-formats

以下イゴールChubinで共有するように、このサードパーティの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

私はそれがとても悪いとは思わない。 go for堅牢なi18nパッケージはありませんか? –

+0

@IgorChubin残念ながら、(私が知っている)まだありません。しかし、特定の言語とレイアウトをサポートするには、十分に簡単です。答えに追加されました。 – icza

+1

私はこのライブラリを見つけました:https://github.com/variadico/lctimeこれは私が必要とする機能を持っているようです。ありがとう、icza! –

関連する問題