aboutsummaryrefslogtreecommitdiffhomepage
path: root/langs
diff options
context:
space:
mode:
Diffstat (limited to 'langs')
-rw-r--r--langs/i18n/i18n_test.go13
-rw-r--r--langs/i18n/integration_test.go2
-rw-r--r--langs/i18n/translationProvider.go45
-rw-r--r--langs/language.go16
4 files changed, 25 insertions, 51 deletions
diff --git a/langs/i18n/i18n_test.go b/langs/i18n/i18n_test.go
index 8629c35fc..8d34e069d 100644
--- a/langs/i18n/i18n_test.go
+++ b/langs/i18n/i18n_test.go
@@ -20,7 +20,6 @@ import (
"testing"
"github.com/bep/logg"
- "github.com/gohugoio/hugo/common/loggers"
"github.com/gohugoio/hugo/common/types"
"github.com/gohugoio/hugo/config/testconfig"
@@ -35,8 +34,6 @@ import (
"github.com/gohugoio/hugo/config"
)
-var logger = loggers.NewDefault()
-
type i18nTest struct {
name string
data map[string][]byte
@@ -390,14 +387,13 @@ other = "{{ . }} miesiąca"
},
},
} {
-
c.Run(test.name, func(c *qt.C) {
cfg := config.New()
cfg.Set("enableMissingTranslationPlaceholders", true)
cfg.Set("publishDir", "public")
afs := afero.NewMemMapFs()
- err := afero.WriteFile(afs, filepath.Join("i18n", test.lang+".toml"), []byte(test.templ), 0755)
+ err := afero.WriteFile(afs, filepath.Join("i18n", test.lang+".toml"), []byte(test.templ), 0o755)
c.Assert(err, qt.IsNil)
d, tp := prepareDeps(afs, cfg)
@@ -409,9 +405,7 @@ other = "{{ . }} miesiąca"
c.Assert(f(ctx, test.id, variant.Key), qt.Equals, variant.Value, qt.Commentf("input: %v", variant.Key))
c.Assert(d.Log.LoggCount(logg.LevelWarn), qt.Equals, 0)
}
-
})
-
}
}
@@ -429,8 +423,7 @@ type noCountField struct {
Counts int
}
-type countMethod struct {
-}
+type countMethod struct{}
func (c countMethod) Count() any {
return 32.5
@@ -468,7 +461,7 @@ func prepareTranslationProvider(t testing.TB, test i18nTest, cfg config.Provider
afs := afero.NewMemMapFs()
for file, content := range test.data {
- err := afero.WriteFile(afs, filepath.Join("i18n", file), []byte(content), 0755)
+ err := afero.WriteFile(afs, filepath.Join("i18n", file), []byte(content), 0o755)
c.Assert(err, qt.IsNil)
}
diff --git a/langs/i18n/integration_test.go b/langs/i18n/integration_test.go
index c010ac111..7deae6451 100644
--- a/langs/i18n/integration_test.go
+++ b/langs/i18n/integration_test.go
@@ -1,4 +1,4 @@
-// Copyright 2022 The Hugo Authors. All rights reserved.
+// Copyright 2024 The Hugo Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/langs/i18n/translationProvider.go b/langs/i18n/translationProvider.go
index 2c3c15710..ab5247413 100644
--- a/langs/i18n/translationProvider.go
+++ b/langs/i18n/translationProvider.go
@@ -46,9 +46,7 @@ func NewTranslationProvider() *TranslationProvider {
// Update updates the i18n func in the provided Deps.
func (tp *TranslationProvider) NewResource(dst *deps.Deps) error {
- spec := source.NewSourceSpec(dst.PathSpec, nil, nil)
-
- var defaultLangTag, err = language.Parse(dst.Conf.DefaultContentLanguage())
+ defaultLangTag, err := language.Parse(dst.Conf.DefaultContentLanguage())
if err != nil {
defaultLangTag = language.English
}
@@ -59,21 +57,19 @@ func (tp *TranslationProvider) NewResource(dst *deps.Deps) error {
bundle.RegisterUnmarshalFunc("yml", yaml.Unmarshal)
bundle.RegisterUnmarshalFunc("json", json.Unmarshal)
- // The source dirs are ordered so the most important comes first. Since this is a
- // last key win situation, we have to reverse the iteration order.
- dirs := dst.BaseFs.I18n.Dirs
- for i := len(dirs) - 1; i >= 0; i-- {
- dir := dirs[i]
- src := spec.NewFilesystemFromFileMetaInfo(dir)
- files, err := src.Files()
- if err != nil {
- return err
- }
- for _, file := range files {
- if err := addTranslationFile(bundle, file); err != nil {
- return err
- }
- }
+ w := hugofs.NewWalkway(
+ hugofs.WalkwayConfig{
+ Fs: dst.BaseFs.I18n.Fs,
+ WalkFn: func(path string, info hugofs.FileMetaInfo) error {
+ if info.IsDir() {
+ return nil
+ }
+ return addTranslationFile(bundle, source.NewFileInfo(info))
+ },
+ })
+
+ if err := w.Walk(); err != nil {
+ return err
}
tp.t = NewTranslator(bundle, dst.Conf, dst.Log)
@@ -81,12 +77,11 @@ func (tp *TranslationProvider) NewResource(dst *deps.Deps) error {
dst.Translate = tp.t.Func(dst.Conf.Language().Lang)
return nil
-
}
const artificialLangTagPrefix = "art-x-"
-func addTranslationFile(bundle *i18n.Bundle, r source.File) error {
+func addTranslationFile(bundle *i18n.Bundle, r *source.File) error {
f, err := r.FileInfo().Meta().Open()
if err != nil {
return fmt.Errorf("failed to open translations file %q:: %w", r.LogicalName(), err)
@@ -129,13 +124,8 @@ func (tp *TranslationProvider) CloneResource(dst, src *deps.Deps) error {
return nil
}
-func errWithFileContext(inerr error, r source.File) error {
- fim, ok := r.FileInfo().(hugofs.FileMetaInfo)
- if !ok {
- return inerr
- }
-
- meta := fim.Meta()
+func errWithFileContext(inerr error, r *source.File) error {
+ meta := r.FileInfo().Meta()
realFilename := meta.Filename
f, err := meta.Open()
if err != nil {
@@ -144,5 +134,4 @@ func errWithFileContext(inerr error, r source.File) error {
defer f.Close()
return herrors.NewFileErrorFromName(inerr, realFilename).UpdateContent(f, nil)
-
}
diff --git a/langs/language.go b/langs/language.go
index 2cd608675..d34ea1cc7 100644
--- a/langs/language.go
+++ b/langs/language.go
@@ -1,4 +1,4 @@
-// Copyright 2023 The Hugo Authors. All rights reserved.
+// Copyright 2024 The Hugo Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -95,22 +95,13 @@ func NewLanguage(lang, defaultContentLanguage, timeZone string, languageConfig L
// This is injected from hugolib to avoid circular dependencies.
var DeprecationFunc = func(item, alternative string, err bool) {}
-const paramsDeprecationWarning = `.Language.Params is deprecated and will be removed in a future release. Use site.Params instead.
-
-- For all but custom parameters, you need to use the built in Hugo variables, e.g. site.Title, site.LanguageCode; site.Language.Params.Title will not work.
-- All custom parameters needs to be placed below params, e.g. [languages.en.params] in TOML.
-
-See https://gohugo.io/content-management/multilingual/#changes-in-hugo-01120
-
-`
-
// Params returns the language params.
// Note that this is the same as the Site.Params, but we keep it here for legacy reasons.
// Deprecated: Use the site.Params instead.
func (l *Language) Params() maps.Params {
// TODO(bep) Remove this for now as it created a little too much noise. Need to think about this.
// See https://github.com/gohugoio/hugo/issues/11025
- //DeprecationFunc(".Language.Params", paramsDeprecationWarning, false)
+ // DeprecationFunc(".Language.Params", paramsDeprecationWarning, false)
return l.params
}
@@ -147,7 +138,8 @@ func (l Languages) AsSet() map[string]bool {
return m
}
-func (l Languages) AsOrdinalSet() map[string]int {
+// AsIndexSet returns a map with the language code as key and index in l as value.
+func (l Languages) AsIndexSet() map[string]int {
m := make(map[string]int)
for i, lang := range l {
m[lang.Lang] = i