diff --git a/packages/babel-plugin-extract-messages/src/index.js b/packages/babel-plugin-extract-messages/src/index.js index a90370cb0..c2b7da473 100644 --- a/packages/babel-plugin-extract-messages/src/index.js +++ b/packages/babel-plugin-extract-messages/src/index.js @@ -213,26 +213,30 @@ export default function({ types: t }) { */ const localeDir = this.opts.localeDir || opts.localeDir const { filename } = file.opts + const [basename] = fsPath.basename(filename).split(".", 2) const baseDir = fsPath.dirname(fsPath.relative(optsBaseDir, filename)) const targetDir = fsPath.join(localeDir, "_build", baseDir) const messages = file.get(MESSAGES) const catalog = {} + const catalogFilename = fsPath.join(targetDir, `${basename}.json`) // no messages, skip file - if (!messages.size) return + if (!messages.size) { + // clean any existing catalog + if (fs.existsSync(catalogFilename)) { + fs.writeFileSync(catalogFilename, JSON.stringify({})) + } + + return + } messages.forEach((value, key) => { catalog[key] = value }) mkdirp.sync(targetDir) - const [basename] = fsPath.basename(filename).split(".", 2) - - fs.writeFileSync( - fsPath.join(targetDir, `${basename}.json`), - JSON.stringify(catalog, null, 2) - ) + fs.writeFileSync(catalogFilename, JSON.stringify(catalog, null, 2)) } } } diff --git a/packages/cli/src/api/formats/utils/locales.js b/packages/cli/src/api/formats/utils/locales.js index 48905ebbf..43cf9ce7e 100644 --- a/packages/cli/src/api/formats/utils/locales.js +++ b/packages/cli/src/api/formats/utils/locales.js @@ -13,12 +13,12 @@ export type LocaleObject = { * 4. country code * @type {RegExp} */ -export const localeRe = new RegExp(/(([a-z]+)([_-]([a-zA-Z]+))?)(\\|\/)?/) +export const localeRe = new RegExp(/(([a-z]+)([_-]([a-zA-Z]+))?)[\\/]?/) export function isValid(locale: string): boolean { const match = localeRe.exec(locale) return ( - match && + match !== null && match[0] === locale && // locale has valid format match[2] in plurals // language is valid (we have plurals for it) )