mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
parent
550cec0b1f
commit
23ba779fab
2 changed files with 74 additions and 10 deletions
|
@ -14,15 +14,24 @@
|
||||||
package i18n
|
package i18n
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/gohugoio/hugo/tpl/tplimpl"
|
||||||
|
|
||||||
|
"github.com/spf13/afero"
|
||||||
|
|
||||||
|
"github.com/gohugoio/hugo/deps"
|
||||||
|
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
"github.com/gohugoio/hugo/helpers"
|
||||||
|
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/config"
|
"github.com/gohugoio/hugo/config"
|
||||||
"github.com/nicksnyder/go-i18n/i18n/bundle"
|
"github.com/gohugoio/hugo/hugofs"
|
||||||
jww "github.com/spf13/jwalterweatherman"
|
jww "github.com/spf13/jwalterweatherman"
|
||||||
"github.com/spf13/viper"
|
"github.com/spf13/viper"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
@ -137,22 +146,54 @@ var i18nTests = []i18nTest{
|
||||||
expected: "hello",
|
expected: "hello",
|
||||||
expectedFlag: "[i18n] hello",
|
expectedFlag: "[i18n] hello",
|
||||||
},
|
},
|
||||||
|
// Unknown language code should get its plural spec from en
|
||||||
|
{
|
||||||
|
data: map[string][]byte{
|
||||||
|
"en.toml": []byte(`[readingTime]
|
||||||
|
one ="one minute read"
|
||||||
|
other = "{{.Count}} minutes read"`),
|
||||||
|
"klingon.toml": []byte(`[readingTime]
|
||||||
|
one = "eitt minutt med lesing"
|
||||||
|
other = "{{ .Count }} minuttar lesing"`),
|
||||||
|
},
|
||||||
|
args: 3,
|
||||||
|
lang: "klingon",
|
||||||
|
id: "readingTime",
|
||||||
|
expected: "3 minuttar lesing",
|
||||||
|
expectedFlag: "3 minuttar lesing",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func doTestI18nTranslate(t *testing.T, test i18nTest, cfg config.Provider) string {
|
func doTestI18nTranslate(t *testing.T, test i18nTest, cfg config.Provider) string {
|
||||||
i18nBundle := bundle.New()
|
assert := require.New(t)
|
||||||
|
fs := hugofs.NewMem(cfg)
|
||||||
|
tp := NewTranslationProvider()
|
||||||
|
depsCfg := newDepsConfig(tp, cfg, fs)
|
||||||
|
d, err := deps.New(depsCfg)
|
||||||
|
assert.NoError(err)
|
||||||
|
|
||||||
for file, content := range test.data {
|
for file, content := range test.data {
|
||||||
err := i18nBundle.ParseTranslationFileBytes(file, content)
|
err := afero.WriteFile(fs.Source, filepath.Join("i18n", file), []byte(content), 0755)
|
||||||
if err != nil {
|
assert.NoError(err)
|
||||||
t.Errorf("Error parsing translation file: %s", err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
translator := NewTranslator(i18nBundle, cfg, logger)
|
assert.NoError(d.LoadResources())
|
||||||
f := translator.Func(test.lang)
|
f := tp.t.Func(test.lang)
|
||||||
translated := f(test.id, test.args)
|
return f(test.id, test.args)
|
||||||
return translated
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func newDepsConfig(tp *TranslationProvider, cfg config.Provider, fs *hugofs.Fs) deps.DepsCfg {
|
||||||
|
l := helpers.NewLanguage("en", cfg)
|
||||||
|
l.Set("i18nDir", "i18n")
|
||||||
|
return deps.DepsCfg{
|
||||||
|
Language: l,
|
||||||
|
Cfg: cfg,
|
||||||
|
Fs: fs,
|
||||||
|
Logger: logger,
|
||||||
|
TemplateProvider: tplimpl.DefaultTemplateProvider,
|
||||||
|
TranslationProvider: tp,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestI18nTranslate(t *testing.T) {
|
func TestI18nTranslate(t *testing.T) {
|
||||||
|
|
|
@ -14,11 +14,13 @@
|
||||||
package i18n
|
package i18n
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/deps"
|
"github.com/gohugoio/hugo/deps"
|
||||||
"github.com/gohugoio/hugo/source"
|
"github.com/gohugoio/hugo/source"
|
||||||
"github.com/nicksnyder/go-i18n/i18n/bundle"
|
"github.com/nicksnyder/go-i18n/i18n/bundle"
|
||||||
|
"github.com/nicksnyder/go-i18n/i18n/language"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TranslationProvider provides translation handling, i.e. loading
|
// TranslationProvider provides translation handling, i.e. loading
|
||||||
|
@ -48,6 +50,27 @@ func (tp *TranslationProvider) Update(d *deps.Deps) error {
|
||||||
|
|
||||||
i18nBundle := bundle.New()
|
i18nBundle := bundle.New()
|
||||||
|
|
||||||
|
en := language.GetPluralSpec("en")
|
||||||
|
if en == nil {
|
||||||
|
return errors.New("The English language has vanished like an old oak table!")
|
||||||
|
}
|
||||||
|
var newLangs []string
|
||||||
|
|
||||||
|
for _, currentSource := range sources {
|
||||||
|
for _, r := range currentSource.Files() {
|
||||||
|
currentSpec := language.GetPluralSpec(r.BaseFileName())
|
||||||
|
if currentSpec == nil {
|
||||||
|
// This may is a language code not supported by go-i18n, it may be
|
||||||
|
// Klingon or ... not even a fake language. Make sure it works.
|
||||||
|
newLangs = append(newLangs, r.BaseFileName())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(newLangs) > 0 {
|
||||||
|
language.RegisterPluralSpec(newLangs, en)
|
||||||
|
}
|
||||||
|
|
||||||
for _, currentSource := range sources {
|
for _, currentSource := range sources {
|
||||||
for _, r := range currentSource.Files() {
|
for _, r := range currentSource.Files() {
|
||||||
err := i18nBundle.ParseTranslationFileBytes(r.LogicalName(), r.Bytes())
|
err := i18nBundle.ParseTranslationFileBytes(r.LogicalName(), r.Bytes())
|
||||||
|
|
Loading…
Reference in a new issue