mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-24 21:56:05 +02:00
Add support for a content dir set per language
A sample config: ```toml defaultContentLanguage = "en" defaultContentLanguageInSubdir = true [Languages] [Languages.en] weight = 10 title = "In English" languageName = "English" contentDir = "content/english" [Languages.nn] weight = 20 title = "På Norsk" languageName = "Norsk" contentDir = "content/norwegian" ``` The value of `contentDir` can be any valid path, even absolute path references. The only restriction is that the content dirs cannot overlap. The content files will be assigned a language by 1. The placement: `content/norwegian/post/my-post.md` will be read as Norwegian content. 2. The filename: `content/english/post/my-post.nn.md` will be read as Norwegian even if it lives in the English content folder. The content directories will be merged into a big virtual filesystem with one simple rule: The most specific language file will win. This means that if both `content/norwegian/post/my-post.md` and `content/english/post/my-post.nn.md` exists, they will be considered duplicates and the version inside `content/norwegian` will win. Note that translations will be automatically assigned by Hugo by the content file's relative placement, so `content/norwegian/post/my-post.md` will be a translation of `content/english/post/my-post.md`. If this does not work for you, you can connect the translations together by setting a `translationKey` in the content files' front matter. Fixes #4523 Fixes #4552 Fixes #4553
This commit is contained in:
@@ -1109,60 +1109,6 @@ func TestCreatePage(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestPageKind(t *testing.T) {
|
||||
t.Parallel()
|
||||
const sep = helpers.FilePathSeparator
|
||||
var tests = []struct {
|
||||
file string
|
||||
kind string
|
||||
}{
|
||||
{"_index.md", KindHome},
|
||||
{"about.md", KindPage},
|
||||
{"sectionA" + sep + "_index.md", KindSection},
|
||||
{"sectionA" + sep + "about.md", KindPage},
|
||||
{"categories" + sep + "_index.md", KindTaxonomyTerm},
|
||||
{"categories" + sep + "categoryA" + sep + "_index.md", KindTaxonomy},
|
||||
{"tags" + sep + "_index.md", KindTaxonomyTerm},
|
||||
{"tags" + sep + "tagA" + sep + "_index.md", KindTaxonomy},
|
||||
|
||||
// nn is configured as a language
|
||||
{"_index.nn.md", KindHome},
|
||||
{"about.nn.md", KindPage},
|
||||
{"sectionA" + sep + "_index.nn.md", KindSection},
|
||||
{"sectionA" + sep + "about.nn.md", KindPage},
|
||||
|
||||
// should NOT be categorized as KindHome
|
||||
{"_indexNOT.md", KindPage},
|
||||
|
||||
// To be consistent with FileInfo.TranslationBaseName(),
|
||||
// language codes not explicitly configured for the site
|
||||
// are not treated as such. "fr" is not configured as
|
||||
// a language in the test site, so ALL of the
|
||||
// following should be KindPage
|
||||
{"_index.fr.md", KindPage}, //not KindHome
|
||||
{"about.fr.md", KindPage},
|
||||
{"sectionA" + sep + "_index.fr.md", KindPage}, // KindSection
|
||||
{"sectionA" + sep + "about.fr.md", KindPage},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
s := newTestSite(t, "languages.nn.languageName", "Nynorsk")
|
||||
taxonomies := make(map[string]string)
|
||||
taxonomies["tag"] = "tags"
|
||||
taxonomies["category"] = "categories"
|
||||
s.Taxonomies = make(TaxonomyList)
|
||||
for _, plural := range taxonomies {
|
||||
s.Taxonomies[plural] = make(Taxonomy)
|
||||
}
|
||||
|
||||
p, _ := s.NewPage(test.file)
|
||||
p.setValuesForKind(s)
|
||||
if p.Kind != test.kind {
|
||||
t.Errorf("for %s expected p.Kind == %s, got %s", test.file, test.kind, p.Kind)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDegenerateInvalidFrontMatterShortDelim(t *testing.T) {
|
||||
t.Parallel()
|
||||
var tests = []struct {
|
||||
|
Reference in New Issue
Block a user