使用 webpack 构建 i18n 多页站点的正确方法是什么?
What is the proper way to i18n multipage site, build with webpack?
任务
使用相同的部分为多种语言构建多个静态页面。使项目尽可能简单和最小化。
堆栈
带有 html-loader、HtmlWebpackPlugin 和 I18nPlugin 的 Webpack。没有什么花哨。一切都是今天的最新版本。
当前解决方案
webpack.config.js:
const entryHtmlPlugins = (language) => pageList
.map(function (entryName) {
const langPart = language === defaultLanguage ? '' : `${language}.`;
return new HtmlWebpackPlugin({
filename: `../dist/${langPart}${entryName}`,
template: `prerender/${entryName}`,
language,
});
});
module.exports = Object.keys(languages).map((language) => ({
...
module: {
rules: [{
test: /\.(html)$/,
include: path.join(__dirname, 'src/pages'),
use: {
loader: 'html-loader',
options: {
interpolate: true
}
}
},
...]
},
plugins: [
...
new I18nPlugin(languages[language]),
].concat(entryHtmlPlugins(language))
}))
index.html
<!-- regular html with translations in format: -->
<%= __('Test') %>
问题
在模板中,使用
导入
<%= require('html-loader!./partial.html') %>
或
${require('!html-loader!./partial.html')}
翻译无效。
解决方案?
使用临时文件夹中的插件处理 HTML 页面(因此每个页面都构建一次以包含部分内容,再构建一次以进行翻译)正在运行但会导致无限重新渲染。而且感觉不对。
这个任务看起来很简单,我几乎不相信除了使用模板引擎别无他法。
我想知道这是否是制作自定义插件的正确思路?
如果当前的堆栈对于我的目的来说太小了,你能建议任何其他选项吗?
问题
那么有没有更优雅的方式同时使用 partials 和 i18n 或者我 使用 pug (或其他东西)用于模板?
我实际上在
中找到了答案
所有你需要翻译你包括的部分是插入它,而不是
<%= require('html-loader!./partial.html') %>
我们在做
<%= require('html-loader?interpolate./partial.html') %>
如果您在零件的零件中包含很多零件和零件,这就不是那么漂亮了,但它可以工作(至少目前如此)并且不需要任何额外的模板引擎。
任务
使用相同的部分为多种语言构建多个静态页面。使项目尽可能简单和最小化。
堆栈
带有 html-loader、HtmlWebpackPlugin 和 I18nPlugin 的 Webpack。没有什么花哨。一切都是今天的最新版本。
当前解决方案
webpack.config.js:
const entryHtmlPlugins = (language) => pageList
.map(function (entryName) {
const langPart = language === defaultLanguage ? '' : `${language}.`;
return new HtmlWebpackPlugin({
filename: `../dist/${langPart}${entryName}`,
template: `prerender/${entryName}`,
language,
});
});
module.exports = Object.keys(languages).map((language) => ({
...
module: {
rules: [{
test: /\.(html)$/,
include: path.join(__dirname, 'src/pages'),
use: {
loader: 'html-loader',
options: {
interpolate: true
}
}
},
...]
},
plugins: [
...
new I18nPlugin(languages[language]),
].concat(entryHtmlPlugins(language))
}))
index.html
<!-- regular html with translations in format: -->
<%= __('Test') %>
问题
在模板中,使用
导入<%= require('html-loader!./partial.html') %>
或
${require('!html-loader!./partial.html')}
翻译无效。
解决方案?
使用临时文件夹中的插件处理 HTML 页面(因此每个页面都构建一次以包含部分内容,再构建一次以进行翻译)正在运行但会导致无限重新渲染。而且感觉不对。
这个任务看起来很简单,我几乎不相信除了使用模板引擎别无他法。
我想知道这是否是制作自定义插件的正确思路?
如果当前的堆栈对于我的目的来说太小了,你能建议任何其他选项吗?
问题
那么有没有更优雅的方式同时使用 partials 和 i18n 或者我 使用 pug (或其他东西)用于模板?
我实际上在
所有你需要翻译你包括的部分是插入它,而不是
<%= require('html-loader!./partial.html') %>
我们在做
<%= require('html-loader?interpolate./partial.html') %>
如果您在零件的零件中包含很多零件和零件,这就不是那么漂亮了,但它可以工作(至少目前如此)并且不需要任何额外的模板引擎。