Open fivaz opened 2 years ago
any solution for this?
write a new loader, and it works for me.
const parse = require('querystring').parse
const JSON5 = require('json5')
module.exports = function (source, map) {
let { lang } = parse(this.resourceQuery)
// eslint-disable-next-line unused-imports/no-unused-vars
lang = lang || 'json'
let pureJSONStr = ''
try {
const obj = JSON5.parse(source)
pureJSONStr = JSON.stringify(obj)
} catch (err) {
const e = new Error(`Invalid i18n block: \n${source}`)
this.emitError(e.message)
this.callback(e)
return
}
this.cacheable && this.cacheable()
this.callback(
null,
`
export default function (Component) {
Component.options.__i18n = Component.options.__i18n || [];
Component.options.__i18n.push('${pureJSONStr}');
delete Component.options._Ctor;
}`.trim(),
map
)
}
config.module
.rule('i18n')
.resourceQuery(/blockType=i18n/)
.type('javascript/auto')
.use('i18n')
.loader(path.resolve('./tools/webpack-loader/i18n-loader.js'))
.end()
Reporting a bug?
I copied step by step the code in your README but it doesn't work.
the translation works fine if we use a message object, but as soon as we use the tag, it doesn't work, and I see the error in the console:
[vue-i18n] Value of key 'hello' is not a string or function ! [vue-i18n] Cannot translate the value of keypath 'hello'. Use the value of keypath as default.
I have tried to make this work, with webpack, vue-cli, etc. but it just doesn't work, at least not with just the steps in the documentation.
Expected behavior
Instead of hello which is the name of the key it should show the value of this key, so "hello world!" or "こんにちは、世界!"
Reproduction
https://codesandbox.io/s/brave-water-spm7l4
System Info
Screenshot
Additional context
No response
Validations