Line data Source code
1 : // Package i18n は、国際化 (i18n) に関する値オブジェクト群を定義します。
2 : // 言語バンドルやロケール情報などを管理します。
3 : package i18n
4 :
5 : // Bundle は 1 ロケール分の翻訳辞書を表す値オブジェクトです。
6 : // 原則イミュータブルとして扱います。
7 : type Bundle struct {
8 : locale Locale
9 : messages map[string]string // Key.Value() を key にして格納
10 : }
11 :
12 : // NewBundle は新しい Bundle を構築します。
13 0 : func NewBundle(locale Locale, messages map[string]string) *Bundle {
14 0 : cp := make(map[string]string, len(messages))
15 0 : for k, v := range messages {
16 0 : cp[k] = v
17 0 : }
18 0 : return &Bundle{
19 0 : locale: locale,
20 0 : messages: cp,
21 0 : }
22 : }
23 :
24 : // Locale はこの Bundle のロケールを返します。
25 0 : func (b *Bundle) Locale() Locale {
26 0 : return b.locale
27 0 : }
28 :
29 : // Get はキーに対応するメッセージを取得します。
30 0 : func (b *Bundle) Get(k Key) (string, bool) {
31 0 : v, ok := b.messages[k.Value()]
32 0 : return v, ok
33 0 : }
34 :
35 : // Messages は全メッセージをコピーで返します(安全のため)。
36 0 : func (b *Bundle) Messages() map[string]string {
37 0 : cp := make(map[string]string, len(b.messages))
38 0 : for k, v := range b.messages {
39 0 : cp[k] = v
40 0 : }
41 0 : return cp
42 : }
|