Skip to content
This repository was archived by the owner on Jan 6, 2024. It is now read-only.

Commit 5d406a2

Browse files
kovalchukqINTERLOGIC\yeko
andauthored
Copy|merge exiting ftl files on run import|export commands (#13)
Co-authored-by: INTERLOGIC\yeko <yeko@interlogic.com.ua>
1 parent ba9a2d1 commit 5d406a2

File tree

3 files changed

+45
-21
lines changed

3 files changed

+45
-21
lines changed

src/cli/commands/export.ts

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { stream } from 'fast-glob'
22
import { promises as fs, existsSync } from 'fs'
3-
import {resolve, dirname, join, relative} from 'path'
3+
import { dirname, join, relative, extname} from 'path'
44
import unixify from 'unixify'
55
import { getVueMessages, mergeFtl } from '../..'
66

@@ -14,24 +14,34 @@ const log = console.log.bind(console)
1414

1515
export const run = async (flags: Options) => {
1616
let count = 0
17-
for await (const file of stream(unixify(flags.inDir) + '/**', {ignore: ['**/node_modules']})) {
17+
for await (const file of stream(unixify(flags.inDir) + '/**', {ignore: ['**/node_modules', unixify(flags.outDir)]})) {
1818
count ++
1919
const data = await fs.readFile(file)
20+
const isVueFile = extname(file.toString()) === '.vue'
21+
const isFtlFile = extname(file.toString()) === '.ftl'
22+
if(isVueFile) {
23+
const vueMessages = getVueMessages(data.toString())
24+
for (const { locale, source, messages } of vueMessages) {
25+
const outputPath = join(flags.outDir, locale, relative(flags.inDir, `${file}.ftl`))
26+
await fs.mkdir(dirname(outputPath), { recursive: true })
27+
if (flags.clean || !existsSync(outputPath)) {
28+
await fs.writeFile(outputPath, source)
29+
} else {
30+
const existingFtlData = await fs.readFile(outputPath)
2031

21-
const vueMessages = getVueMessages(data.toString())
22-
for (const { locale, source, messages } of vueMessages) {
23-
const outputPath = join(flags.outDir, locale, relative(flags.inDir, `${file}.ftl`))
24-
await fs.mkdir(dirname(outputPath), { recursive: true })
25-
if (flags.clean || !existsSync(outputPath)) {
26-
await fs.writeFile(outputPath, source)
27-
} else {
28-
const existingFtlData = await fs.readFile(outputPath)
29-
30-
const newData = mergeFtl(existingFtlData.toString(), messages)
32+
const newData = mergeFtl(existingFtlData.toString(), messages)
3133

32-
await fs.writeFile(outputPath, newData)
34+
await fs.writeFile(outputPath, newData)
35+
}
3336
}
3437
}
38+
else if(isFtlFile) {
39+
const fileData = file.toString().split('.')
40+
const locale = fileData[fileData.length - 2]
41+
const outputPath = join(flags.outDir, locale, relative(flags.inDir, `${file}`))
42+
await fs.mkdir(dirname(outputPath), { recursive: true })
43+
await fs.copyFile(file, outputPath)
44+
}
3545
}
3646

3747
log(`Extracted messages from ${count} files`)

src/cli/commands/import.ts

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { stream } from 'fast-glob'
22
import { promises as fs } from 'fs'
3-
import { resolve, dirname, basename, extname, sep, relative, join } from 'path'
3+
import { dirname, basename, extname, sep, relative, join } from 'path'
44
import unixify from 'unixify'
5-
import { getFtlMessages, mergeVue } from '../..'
5+
import {getFtlMessages, mergeFtl, mergeVue} from '../..'
66

77
interface Options {
88
outDir: string,
@@ -17,20 +17,34 @@ export const run = async (flags: Options) => {
1717
count ++
1818
const fileString = file.toString()
1919
const fileDirName= dirname(file.toString())
20-
2120
const vueComponentName = basename(fileString).replace(extname(fileString), '')
2221
const outputPath = join(relative(flags.inDir, fileDirName), vueComponentName)
2322
const [locale, ...rest] = outputPath.split(sep)
2423
const realOutputPath = join(flags.outDir, rest.join(sep))
2524

26-
const vueFile = await fs.readFile(realOutputPath)
2725
const data = await fs.readFile(file)
2826
const ftlMessages = getFtlMessages(data.toString())
29-
const newData = mergeVue(vueFile.toString(), locale, ftlMessages)
3027

31-
await fs.writeFile(realOutputPath, newData)
28+
if(checkExistingFtlFile(file.toString())) {
29+
const existingFtlData = await fs.readFile(realOutputPath + '.ftl')
30+
const newData = mergeFtl(existingFtlData.toString(), ftlMessages)
31+
32+
await fs.writeFile(realOutputPath + '.ftl', newData)
33+
}
34+
else {
35+
const vueFile = await fs.readFile(realOutputPath)
36+
const newData = mergeVue(vueFile.toString(), locale, ftlMessages)
37+
38+
await fs.writeFile(realOutputPath, newData)
39+
}
3240
}
3341

3442
log(`Imported messages to ${count} files`)
3543
}
3644

45+
const checkExistingFtlFile = (file: string):boolean => {
46+
const fileData = file.split('.')
47+
const locale = fileData[fileData.length - 2]
48+
return extname(file) === '.ftl' && locale !== 'vue'
49+
}
50+

src/cli/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@ import { run as runImport } from './commands/import'
77
const cli = cac('fluent-vue')
88

99
cli
10-
.command('export', 'Exports translation from Vue.js SFC files into ftl files.')
10+
.command('export', 'Exports translation from Vue.js SFC files into ftl files and copy existing ftl files.')
1111
.option('--in-dir', 'Input directory with vue files', { default: 'example/' })
1212
.option('--out-dir', 'Output directory for extracted ftl files', { default: 'translations/' })
1313
.option('--clean', 'Whether to clean output directory', { default: true })
1414
.action(runExport)
1515

1616
cli
17-
.command('import', 'Import translation from ftl files into Vue.js SFC')
17+
.command('import', 'Import translation from ftl files into Vue.js SFC and merge existing ftl files.')
1818
.option('--in-dir', 'Input directory with ftl files', { default: 'translations/' })
1919
.option('--out-dir', 'Output directory for extracted vue files', { default: 'example/' })
2020
.action(runImport)

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy