├── .babelrc ├── .electron-vue ├── build.js ├── dev-client.js ├── dev-runner.js ├── webpack.main.config.js ├── webpack.renderer.config.js └── webpack.web.config.js ├── .gitignore ├── .travis.yml ├── LICENSE ├── README-CN.md ├── README.md ├── appveyor.yml ├── build └── icons │ ├── 256x256.png │ ├── 256x256@2x.png │ ├── icon.icns │ └── icon.ico ├── lang ├── ar.js ├── bn.js ├── de.js ├── en.js ├── es.js ├── fa.js ├── fr.js ├── hi.js ├── id.js ├── index.js ├── it.js ├── ja.js ├── ko.js ├── pt.js ├── ru.js ├── sw.js ├── th.js ├── tr.js ├── vi.js ├── zhCN.js └── zhTW.js ├── package.json ├── screenshots ├── 256x256@2x.png ├── ntfs-display.jpg └── ntfstool-main2.png ├── src ├── common │ ├── disk │ │ ├── constDisk.js │ │ ├── eventDisk.js │ │ ├── mainDisk.js │ │ ├── moniterDisk.js │ │ ├── package.json │ │ ├── queueDisk.js │ │ └── workerDisk.js │ ├── lang │ │ ├── de.js │ │ ├── en.js │ │ ├── es.js │ │ ├── fa.js │ │ ├── index.js │ │ ├── ja.js │ │ ├── ko.js │ │ ├── ru.js │ │ ├── zhCN.js │ │ └── zhTW.js │ ├── router │ │ └── index.js │ └── utils │ │ ├── AlfwCommon.js │ │ ├── AlfwConst.js │ │ ├── AlfwDisk.js │ │ ├── AlfwShell.js │ │ ├── AlfwStore.js │ │ └── alEvent.js ├── index.ejs ├── main │ ├── index.dev.js │ ├── index.js │ ├── lib │ │ ├── AutoLaunchManager.js │ │ ├── EnergyManager.js │ │ └── PageConfig.js │ └── menu │ │ └── index.json └── renderer │ ├── App.vue │ ├── assets │ ├── disk01.png │ ├── disk02.png │ ├── disk03.png │ ├── disk04.png │ ├── disk2.png │ ├── general.png │ ├── ignoredisk.png │ ├── logo.png │ ├── notification.png │ ├── opendisk.svg │ ├── privacy.png │ ├── setting2.svg │ ├── theme1.png │ ├── theme2.png │ └── update.png │ ├── lib │ ├── dialog.js │ ├── diskMonitor.js │ ├── home.js │ ├── setting.js │ └── tray.js │ ├── main.js │ ├── page │ ├── Dialog.vue │ ├── FeedBack.vue │ ├── Home.vue │ ├── Setting.vue │ └── Tray.vue │ └── theme │ ├── dialog.scss │ ├── home.css │ ├── ntfstool.css │ ├── setting.css │ └── tray.css └── static ├── lock.svg ├── menu ├── 256x256@2x.png ├── AINTFS18.png ├── AINTFS18@2x.png ├── AINTFS18@3x.png ├── AINTFS_active18.png ├── AINTFS_active18@2x.png └── AINTFS_active18@3x.png └── osxfuse-home.png /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "comments": false, 3 | "env": { 4 | "test": { 5 | "presets": [ 6 | ["env", { 7 | "targets": { "node": 7 } 8 | }], 9 | "stage-0" 10 | ], 11 | "plugins": ["istanbul"] 12 | }, 13 | "main": { 14 | "presets": [ 15 | ["env", { 16 | "targets": { "node": 7 } 17 | }], 18 | "stage-0" 19 | ] 20 | }, 21 | "renderer": { 22 | "presets": [ 23 | ["env", { 24 | "modules": false 25 | }], 26 | "stage-0" 27 | ] 28 | }, 29 | "web": { 30 | "presets": [ 31 | ["env", { 32 | "modules": false 33 | }], 34 | "stage-0" 35 | ] 36 | } 37 | }, 38 | "plugins": ["transform-runtime"] 39 | } 40 | -------------------------------------------------------------------------------- /.electron-vue/build.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | process.env.NODE_ENV = 'production' 4 | 5 | const { say } = require('cfonts') 6 | const chalk = require('chalk') 7 | const del = require('del') 8 | const { spawn } = require('child_process') 9 | const webpack = require('webpack') 10 | const Multispinner = require('multispinner') 11 | 12 | 13 | const mainConfig = require('./webpack.main.config') 14 | const rendererConfig = require('./webpack.renderer.config') 15 | const webConfig = require('./webpack.web.config') 16 | 17 | const doneLog = chalk.bgGreen.white(' DONE ') + ' ' 18 | const errorLog = chalk.bgRed.white(' ERROR ') + ' ' 19 | const okayLog = chalk.bgBlue.white(' OKAY ') + ' ' 20 | const isCI = process.env.CI || false 21 | 22 | if (process.env.BUILD_TARGET === 'clean') clean() 23 | else if (process.env.BUILD_TARGET === 'web') web() 24 | else build() 25 | 26 | function clean () { 27 | del.sync(['build/*', '!build/icons', '!build/icons/icon.*']) 28 | console.log(`\n${doneLog}\n`) 29 | process.exit() 30 | } 31 | 32 | function build () { 33 | greeting() 34 | 35 | del.sync(['dist/electron/*', '!.gitkeep']) 36 | 37 | const tasks = ['main', 'renderer'] 38 | const m = new Multispinner(tasks, { 39 | preText: 'building', 40 | postText: 'process' 41 | }) 42 | 43 | let results = '' 44 | 45 | m.on('success', () => { 46 | process.stdout.write('\x1B[2J\x1B[0f') 47 | console.log(`\n\n${results}`) 48 | console.log(`${okayLog}take it away ${chalk.yellow('`electron-builder`')}\n`) 49 | process.exit() 50 | }) 51 | 52 | pack(mainConfig).then(result => { 53 | results += result + '\n\n' 54 | m.success('main') 55 | }).catch(err => { 56 | m.error('main') 57 | console.log(`\n ${errorLog}failed to build main process`) 58 | console.error(`\n${err}\n`) 59 | process.exit(1) 60 | }) 61 | 62 | pack(rendererConfig).then(result => { 63 | results += result + '\n\n' 64 | m.success('renderer') 65 | }).catch(err => { 66 | m.error('renderer') 67 | console.log(`\n ${errorLog}failed to build renderer process`) 68 | console.error(`\n${err}\n`) 69 | process.exit(1) 70 | }) 71 | } 72 | 73 | function pack (config) { 74 | return new Promise((resolve, reject) => { 75 | webpack(config, (err, stats) => { 76 | if (err) reject(err.stack || err) 77 | else if (stats.hasErrors()) { 78 | let err = '' 79 | 80 | stats.toString({ 81 | chunks: false, 82 | colors: true 83 | }) 84 | .split(/\r?\n/) 85 | .forEach(line => { 86 | err += ` ${line}\n` 87 | }) 88 | 89 | reject(err) 90 | } else { 91 | resolve(stats.toString({ 92 | chunks: false, 93 | colors: true 94 | })) 95 | } 96 | }) 97 | }) 98 | } 99 | 100 | function web () { 101 | del.sync(['dist/web/*', '!.gitkeep']) 102 | webpack(webConfig, (err, stats) => { 103 | if (err || stats.hasErrors()) console.log(err) 104 | 105 | console.log(stats.toString({ 106 | chunks: false, 107 | colors: true 108 | })) 109 | 110 | process.exit() 111 | }) 112 | } 113 | 114 | function greeting () { 115 | const cols = process.stdout.columns 116 | let text = '' 117 | 118 | if (cols > 85) text = 'lets-build' 119 | else if (cols > 60) text = 'lets-|build' 120 | else text = false 121 | 122 | if (text && !isCI) { 123 | say(text, { 124 | colors: ['yellow'], 125 | font: 'simple3d', 126 | space: false 127 | }) 128 | } else console.log(chalk.yellow.bold('\n lets-build')) 129 | console.log() 130 | } 131 | -------------------------------------------------------------------------------- /.electron-vue/dev-client.js: -------------------------------------------------------------------------------- 1 | const hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') 2 | 3 | hotClient.subscribe(event => { 4 | /** 5 | * Reload browser when HTMLWebpackPlugin emits a new index.html 6 | */ 7 | if (event.action === 'reload') { 8 | window.location.reload() 9 | } 10 | 11 | /** 12 | * Notify `mainWindow` when `main` process is compiling, 13 | * giving notice for an expected reload of the `electron` process 14 | */ 15 | if (event.action === 'compiling') { 16 | document.body.innerHTML += ` 17 | <style> 18 | #dev-client { 19 | background: #4fc08d; 20 | border-radius: 4px; 21 | bottom: 20px; 22 | box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.3); 23 | color: #fff; 24 | font-family: 'Source Sans Pro', sans-serif; 25 | left: 20px; 26 | padding: 8px 12px; 27 | position: absolute; 28 | } 29 | </style> 30 | 31 | <div id="dev-client"> 32 | Compiling Main Process... 33 | </div> 34 | ` 35 | } 36 | }) 37 | -------------------------------------------------------------------------------- /.electron-vue/dev-runner.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const chalk = require('chalk') 4 | const electron = require('electron') 5 | const path = require('path') 6 | const { say } = require('cfonts') 7 | const { spawn } = require('child_process') 8 | const webpack = require('webpack') 9 | const WebpackDevServer = require('webpack-dev-server') 10 | const webpackHotMiddleware = require('webpack-hot-middleware') 11 | 12 | const mainConfig = require('./webpack.main.config') 13 | const rendererConfig = require('./webpack.renderer.config') 14 | 15 | let electronProcess = null 16 | let manualRestart = false 17 | let hotMiddleware 18 | 19 | function logStats (proc, data) { 20 | let log = '' 21 | 22 | log += chalk.yellow.bold(`┏ ${proc} Process ${new Array((19 - proc.length) + 1).join('-')}`) 23 | log += '\n\n' 24 | 25 | if (typeof data === 'object') { 26 | data.toString({ 27 | colors: true, 28 | chunks: false 29 | }).split(/\r?\n/).forEach(line => { 30 | log += ' ' + line + '\n' 31 | }) 32 | } else { 33 | log += ` ${data}\n` 34 | } 35 | 36 | log += '\n' + chalk.yellow.bold(`┗ ${new Array(28 + 1).join('-')}`) + '\n' 37 | 38 | console.log(log) 39 | } 40 | 41 | function startRenderer () { 42 | return new Promise((resolve, reject) => { 43 | rendererConfig.entry.renderer = [path.join(__dirname, 'dev-client')].concat(rendererConfig.entry.renderer) 44 | 45 | const compiler = webpack(rendererConfig) 46 | hotMiddleware = webpackHotMiddleware(compiler, { 47 | log: false, 48 | heartbeat: 2500 49 | }) 50 | 51 | compiler.plugin('compilation', compilation => { 52 | compilation.plugin('html-webpack-plugin-after-emit', (data, cb) => { 53 | hotMiddleware.publish({ action: 'reload' }) 54 | cb() 55 | }) 56 | }) 57 | 58 | compiler.plugin('done', stats => { 59 | logStats('Renderer', stats) 60 | }) 61 | 62 | const server = new WebpackDevServer( 63 | compiler, 64 | { 65 | contentBase: path.join(__dirname, '../'), 66 | quiet: true, 67 | before (app, ctx) { 68 | app.use(hotMiddleware) 69 | ctx.middleware.waitUntilValid(() => { 70 | resolve() 71 | }) 72 | } 73 | } 74 | ) 75 | 76 | server.listen(9080) 77 | }) 78 | } 79 | 80 | function startMain () { 81 | return new Promise((resolve, reject) => { 82 | mainConfig.entry.main = [path.join(__dirname, '../src/main/index.dev.js')].concat(mainConfig.entry.main) 83 | 84 | const compiler = webpack(mainConfig) 85 | 86 | compiler.plugin('watch-run', (compilation, done) => { 87 | logStats('Main', chalk.white.bold('compiling...')) 88 | hotMiddleware.publish({ action: 'compiling' }) 89 | done() 90 | }) 91 | 92 | compiler.watch({}, (err, stats) => { 93 | if (err) { 94 | console.log(err) 95 | return 96 | } 97 | 98 | logStats('Main', stats) 99 | 100 | if (electronProcess && electronProcess.kill) { 101 | manualRestart = true 102 | process.kill(electronProcess.pid) 103 | electronProcess = null 104 | startElectron() 105 | 106 | setTimeout(() => { 107 | manualRestart = false 108 | }, 5000) 109 | } 110 | 111 | resolve() 112 | }) 113 | }) 114 | } 115 | 116 | function startElectron () { 117 | // electronProcess = spawn(electron, ['--inspect=5858', path.join(__dirname, '../dist/electron/main.js')]) 118 | electronProcess = spawn(electron, [path.join(__dirname, '../dist/electron/main.js')]) 119 | 120 | electronProcess.stdout.on('data', data => { 121 | ntfstoolLog(data, 'blue') 122 | }) 123 | electronProcess.stderr.on('data', data => { 124 | ntfstoolLog(data, 'red') 125 | }) 126 | 127 | electronProcess.on('close', () => { 128 | if (!manualRestart) process.exit() 129 | }) 130 | } 131 | 132 | function ntfstoolLog (data, color) { 133 | let log = '' 134 | data = data.toString().split(/\r?\n/) 135 | data.forEach(line => { 136 | log += ` ${line}\n` 137 | }) 138 | if (/[0-9A-z]+/.test(log)) { 139 | console.log( 140 | chalk[color].bold('┏ NtfstoolLog -------------------') + 141 | '\n\n' + 142 | log + 143 | chalk[color].bold('┗ ----------------------------') + 144 | '\n' 145 | ) 146 | } 147 | } 148 | 149 | function greeting () { 150 | const cols = process.stdout.columns 151 | let text = '' 152 | 153 | if (cols > 104) text = 'electron-vue' 154 | else if (cols > 76) text = 'electron-|vue' 155 | else text = false 156 | 157 | if (text) { 158 | say(text, { 159 | colors: ['yellow'], 160 | font: 'simple3d', 161 | space: false 162 | }) 163 | } else console.log(chalk.yellow.bold('\n electron-vue')) 164 | console.log(chalk.blue(' getting ready...') + '\n') 165 | } 166 | 167 | function init () { 168 | greeting() 169 | 170 | Promise.all([startRenderer(), startMain()]) 171 | .then(() => { 172 | startElectron() 173 | }) 174 | .catch(err => { 175 | console.error(err) 176 | }) 177 | } 178 | 179 | init() 180 | -------------------------------------------------------------------------------- /.electron-vue/webpack.main.config.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | process.env.BABEL_ENV = 'main' 4 | 5 | const path = require('path') 6 | const { dependencies } = require('../package.json') 7 | const webpack = require('webpack') 8 | 9 | const BabiliWebpackPlugin = require('babili-webpack-plugin') 10 | 11 | let mainConfig = { 12 | entry: { 13 | main: path.join(__dirname, '../src/main/index.js') 14 | }, 15 | externals: [ 16 | ...Object.keys(dependencies || {}) 17 | ], 18 | module: { 19 | rules: [ 20 | { 21 | test: /\.js$/, 22 | use: 'babel-loader', 23 | exclude: /node_modules/ 24 | }, 25 | { 26 | test: /\.node$/, 27 | use: 'node-loader' 28 | } 29 | ] 30 | }, 31 | node: { 32 | __dirname: process.env.NODE_ENV !== 'production', 33 | __filename: process.env.NODE_ENV !== 'production' 34 | }, 35 | output: { 36 | filename: '[name].js', 37 | libraryTarget: 'commonjs2', 38 | path: path.join(__dirname, '../dist/electron') 39 | }, 40 | plugins: [ 41 | new webpack.NoEmitOnErrorsPlugin() 42 | ], 43 | resolve: { 44 | alias: { 45 | '@': path.join(__dirname, '../src'), 46 | }, 47 | extensions: ['.js', '.json', '.node'] 48 | }, 49 | target: 'electron-main' 50 | } 51 | 52 | /** 53 | * Adjust mainConfig for development settings 54 | */ 55 | if (process.env.NODE_ENV !== 'production') { 56 | mainConfig.plugins.push( 57 | new webpack.DefinePlugin({ 58 | '__static': `"${path.join(__dirname, '../static').replace(/\\/g, '\\\\')}"` 59 | }) 60 | ) 61 | } 62 | 63 | /** 64 | * Adjust mainConfig for production settings 65 | */ 66 | if (process.env.NODE_ENV === 'production') { 67 | mainConfig.plugins.push( 68 | new BabiliWebpackPlugin(), 69 | new webpack.DefinePlugin({ 70 | 'process.env.NODE_ENV': '"production"' 71 | }) 72 | ) 73 | } 74 | 75 | module.exports = mainConfig 76 | -------------------------------------------------------------------------------- /.electron-vue/webpack.renderer.config.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | process.env.BABEL_ENV = 'renderer' 4 | 5 | const path = require('path') 6 | const { dependencies } = require('../package.json') 7 | const webpack = require('webpack') 8 | 9 | const BabiliWebpackPlugin = require('babili-webpack-plugin') 10 | const CopyWebpackPlugin = require('copy-webpack-plugin') 11 | const ExtractTextPlugin = require('extract-text-webpack-plugin') 12 | const HtmlWebpackPlugin = require('html-webpack-plugin') 13 | 14 | /** 15 | * List of node_modules to include in webpack bundle 16 | * 17 | * Required for specific packages like Vue UI libraries 18 | * that provide pure *.vue files that need compiling 19 | * https://simulatedgreg.gitbooks.io/electron-vue/content/en/webpack-configurations.html#white-listing-externals 20 | */ 21 | let whiteListedModules = ['vue'] 22 | 23 | let rendererConfig = { 24 | devtool: '#cheap-module-eval-source-map', 25 | entry: { 26 | renderer: path.join(__dirname, '../src/renderer/main.js') 27 | }, 28 | externals: [ 29 | ...Object.keys(dependencies || {}).filter(d => !whiteListedModules.includes(d)) 30 | ], 31 | module: { 32 | rules: [ 33 | { 34 | test: /\.css$/, 35 | use: ExtractTextPlugin.extract({ 36 | fallback: 'style-loader', 37 | use: 'css-loader' 38 | }) 39 | }, 40 | { 41 | test: /\.html$/, 42 | use: 'vue-html-loader' 43 | }, 44 | { 45 | test: /\.js$/, 46 | use: 'babel-loader', 47 | exclude: /node_modules/ 48 | }, 49 | { 50 | test: /\.node$/, 51 | use: 'node-loader' 52 | }, 53 | { 54 | test: /\.vue$/, 55 | use: { 56 | loader: 'vue-loader', 57 | options: { 58 | extractCSS: process.env.NODE_ENV === 'production', 59 | loaders: { 60 | sass: 'vue-style-loader!css-loader!sass-loader?indentedSyntax=1', 61 | scss: 'vue-style-loader!css-loader!sass-loader' 62 | } 63 | } 64 | } 65 | }, 66 | { 67 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 68 | use: { 69 | loader: 'url-loader', 70 | query: { 71 | limit: 10000, 72 | name: 'imgs/[name]--[folder].[ext]' 73 | } 74 | } 75 | }, 76 | { 77 | test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, 78 | loader: 'url-loader', 79 | options: { 80 | limit: 10000, 81 | name: 'media/[name]--[folder].[ext]' 82 | } 83 | }, 84 | { 85 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 86 | use: { 87 | loader: 'url-loader', 88 | query: { 89 | limit: 10000, 90 | name: 'fonts/[name]--[folder].[ext]' 91 | } 92 | } 93 | } 94 | ] 95 | }, 96 | node: { 97 | __dirname: process.env.NODE_ENV !== 'production', 98 | __filename: process.env.NODE_ENV !== 'production' 99 | }, 100 | plugins: [ 101 | new ExtractTextPlugin('styles.css'), 102 | new HtmlWebpackPlugin({ 103 | filename: 'index.html', 104 | template: path.resolve(__dirname, '../src/index.ejs'), 105 | minify: { 106 | collapseWhitespace: true, 107 | removeAttributeQuotes: true, 108 | removeComments: true 109 | }, 110 | nodeModules: process.env.NODE_ENV !== 'production' 111 | ? path.resolve(__dirname, '../node_modules') 112 | : false 113 | }), 114 | new webpack.HotModuleReplacementPlugin(), 115 | new webpack.NoEmitOnErrorsPlugin() 116 | ], 117 | output: { 118 | filename: '[name].js', 119 | libraryTarget: 'commonjs2', 120 | path: path.join(__dirname, '../dist/electron') 121 | }, 122 | resolve: { 123 | alias: { 124 | '@': path.join(__dirname, '../src'), 125 | 'vue#39;: 'vue/dist/vue.esm.js' 126 | }, 127 | extensions: ['.js', '.vue', '.json', '.css', '.node'] 128 | }, 129 | target: 'electron-renderer' 130 | } 131 | 132 | /** 133 | * Adjust rendererConfig for development settings 134 | */ 135 | if (process.env.NODE_ENV !== 'production') { 136 | rendererConfig.plugins.push( 137 | new webpack.DefinePlugin({ 138 | '__static': `"${path.join(__dirname, '../static').replace(/\\/g, '\\\\')}"` 139 | }) 140 | ) 141 | } 142 | 143 | /** 144 | * Adjust rendererConfig for production settings 145 | */ 146 | if (process.env.NODE_ENV === 'production') { 147 | rendererConfig.devtool = '' 148 | 149 | rendererConfig.plugins.push( 150 | new BabiliWebpackPlugin(), 151 | new CopyWebpackPlugin([ 152 | { 153 | from: path.join(__dirname, '../static'), 154 | to: path.join(__dirname, '../dist/electron/static'), 155 | ignore: ['.*'] 156 | } 157 | ]), 158 | new webpack.DefinePlugin({ 159 | 'process.env.NODE_ENV': '"production"' 160 | }), 161 | new webpack.LoaderOptionsPlugin({ 162 | minimize: true 163 | }) 164 | ) 165 | } 166 | 167 | module.exports = rendererConfig 168 | -------------------------------------------------------------------------------- /.electron-vue/webpack.web.config.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | process.env.BABEL_ENV = 'web' 4 | 5 | const path = require('path') 6 | const webpack = require('webpack') 7 | 8 | const BabiliWebpackPlugin = require('babili-webpack-plugin') 9 | const CopyWebpackPlugin = require('copy-webpack-plugin') 10 | const ExtractTextPlugin = require('extract-text-webpack-plugin') 11 | const HtmlWebpackPlugin = require('html-webpack-plugin') 12 | 13 | let webConfig = { 14 | devtool: '#cheap-module-eval-source-map', 15 | entry: { 16 | web: path.join(__dirname, '../src/renderer/main.js') 17 | }, 18 | module: { 19 | rules: [ 20 | { 21 | test: /\.css$/, 22 | use: ExtractTextPlugin.extract({ 23 | fallback: 'style-loader', 24 | use: 'css-loader' 25 | }) 26 | }, 27 | { 28 | test: /\.html$/, 29 | use: 'vue-html-loader' 30 | }, 31 | { 32 | test: /\.js$/, 33 | use: 'babel-loader', 34 | include: [ path.resolve(__dirname, '../src/renderer') ], 35 | exclude: /node_modules/ 36 | }, 37 | { 38 | test: /\.vue$/, 39 | use: { 40 | loader: 'vue-loader', 41 | options: { 42 | extractCSS: true, 43 | loaders: { 44 | sass: 'vue-style-loader!css-loader!sass-loader?indentedSyntax=1', 45 | scss: 'vue-style-loader!css-loader!sass-loader' 46 | } 47 | } 48 | } 49 | }, 50 | { 51 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 52 | use: { 53 | loader: 'url-loader', 54 | query: { 55 | limit: 10000, 56 | name: 'imgs/[name].[ext]' 57 | } 58 | } 59 | }, 60 | { 61 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 62 | use: { 63 | loader: 'url-loader', 64 | query: { 65 | limit: 10000, 66 | name: 'fonts/[name].[ext]' 67 | } 68 | } 69 | } 70 | ] 71 | }, 72 | plugins: [ 73 | new ExtractTextPlugin('styles.css'), 74 | new HtmlWebpackPlugin({ 75 | filename: 'index.html', 76 | template: path.resolve(__dirname, '../src/index.ejs'), 77 | minify: { 78 | collapseWhitespace: true, 79 | removeAttributeQuotes: true, 80 | removeComments: true 81 | }, 82 | nodeModules: false 83 | }), 84 | new webpack.DefinePlugin({ 85 | 'process.env.IS_WEB': 'true' 86 | }), 87 | new webpack.HotModuleReplacementPlugin(), 88 | new webpack.NoEmitOnErrorsPlugin() 89 | ], 90 | output: { 91 | filename: '[name].js', 92 | path: path.join(__dirname, '../dist/web') 93 | }, 94 | resolve: { 95 | alias: { 96 | '@': path.join(__dirname, '../src/renderer'), 97 | 'vue#39;: 'vue/dist/vue.esm.js' 98 | }, 99 | extensions: ['.js', '.vue', '.json', '.css'] 100 | }, 101 | target: 'web' 102 | } 103 | 104 | /** 105 | * Adjust webConfig for production settings 106 | */ 107 | if (process.env.NODE_ENV === 'production') { 108 | webConfig.devtool = '' 109 | 110 | webConfig.plugins.push( 111 | new BabiliWebpackPlugin(), 112 | new CopyWebpackPlugin([ 113 | { 114 | from: path.join(__dirname, '../static'), 115 | to: path.join(__dirname, '../dist/web/static'), 116 | ignore: ['.*'] 117 | } 118 | ]), 119 | new webpack.DefinePlugin({ 120 | 'process.env.NODE_ENV': '"production"' 121 | }), 122 | new webpack.LoaderOptionsPlugin({ 123 | minimize: true 124 | }) 125 | ) 126 | } 127 | 128 | module.exports = webConfig 129 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | dist/electron/* 3 | dist/web/* 4 | build/* 5 | !build/icons 6 | coverage 7 | node_modules/ 8 | npm-debug.log 9 | npm-debug.log.* 10 | thumbs.db 11 | !.gitkeep 12 | .idea/ 13 | dist/ 14 | test 15 | package-lock.json 16 | mynpm 17 | lib-ntfstool 18 | diskutil 19 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | osx_image: xcode8.3 2 | sudo: required 3 | dist: trusty 4 | language: c 5 | matrix: 6 | include: 7 | - os: osx 8 | - os: linux 9 | env: CC=clang CXX=clang++ npm_config_clang=1 10 | compiler: clang 11 | cache: 12 | directories: 13 | - node_modules 14 | - "$HOME/.electron" 15 | - "$HOME/.cache" 16 | addons: 17 | apt: 18 | packages: 19 | - libgnome-keyring-dev 20 | - icnsutils 21 | #- xvfb 22 | before_install: 23 | - mkdir -p /tmp/git-lfs && curl -L https://github.com/github/git-lfs/releases/download/v1.2.1/git-lfs-$([ 24 | "$TRAVIS_OS_NAME" == "linux" ] && echo "linux" || echo "darwin")-amd64-1.2.1.tar.gz 25 | | tar -xz -C /tmp/git-lfs --strip-components 1 && /tmp/git-lfs/git-lfs pull 26 | - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install --no-install-recommends -y icnsutils graphicsmagick xz-utils; fi 27 | install: 28 | #- export DISPLAY=':99.0' 29 | #- Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 & 30 | - nvm install 7 31 | - curl -o- -L https://yarnpkg.com/install.sh | bash 32 | - source ~/.bashrc 33 | - npm install -g xvfb-maybe 34 | - yarn 35 | script: 36 | #- xvfb-maybe node_modules/.bin/karma start test/unit/karma.conf.js 37 | #- yarn run pack && xvfb-maybe node_modules/.bin/mocha test/e2e 38 | - yarn run build 39 | branches: 40 | only: 41 | - master 42 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright 2018-present Dr_rOot 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /README-CN.md: -------------------------------------------------------------------------------- 1 | # NTFS Tool 2 | 3 | <a href="https://ntfstool.com"> 4 | <img src="https://store.alfw.com/ntfstool/ntfs-logo%402x.png" /></a> 5 | 6 | [English](./README.md) | 简体中文 7 | 8 | ## 为苹果电脑提供NTFS读写支持的一款免费软件 9 | ## NTFS Tool Free For Mac 10 | 11 | 我们是一群热爱生活热爱编程的软件技术从业者,利用零散时间,开发出这款免费的 NTFS Tool for Mac 工具。 12 | 13 | NTFS Tool 是一款纯净版的NTFS 工具,支持NTFS磁盘读写、挂载,推出、管理等功能。它的界面简洁易用,希望这款工具能够为你的工作和生活带来便利👻。 14 | 15 | 如果这款软件对你有帮助,欢迎 Star 关注。 16 | 17 | ✈️ 去 [官网](https://ntfstool.com) 逛逛 | 📖 查看 [帮助手册](http://docs.ntfstool.com) 18 | 19 | ## 💽 安装稳定版 20 | 21 | [GitHub](https://github.com/ntfstool/ntfstool/releases) 和 [官网](https://ntfstool.com) 提供了已经编译好的稳定版安装包,当然你也可以自己克隆代码编译打包。 22 | 23 | ### 平台支持 24 | 25 | 作者初衷是为MacOS系统操作NTFS磁盘提供方便,目前仅支持MacOS系统。 26 | 27 | ### macOS 28 | 29 | macOS 用户可以点击下方链接跳转到官网直接下载。 30 | 31 | [点击下载](https://ntfstool.com) 32 | 33 | ## ✨ 特性 34 | 35 | - 🕹 简洁明了的图形操作界面 36 | - 🦄 支持USB挂载NTFS磁盘读写操作 37 | - ☑️ 支持查看可读写磁盘容量 38 | - 💾 支持磁盘信息自主刷新 39 | - 🎛 支持镜像磁盘文件空间占用提示 40 | - 🚀 支持镜像磁盘文件卸载 41 | - 🔔 操作完成后通知 42 | - 💻 支持触控栏快捷键 43 | - 🤖 常驻系统托盘,操作更加便捷【TODO】 44 | - 🌑 深色模式【TODO】 45 | - 🌍 国际化,[查看已可选的语言](#-国际化)【待完善】 46 | - 🎏 ... 47 | 48 | ## 🖥 应用界面 49 | 50 |  51 | 52 |  53 | 54 | ## ⌨️ 本地开发 55 | 56 | ### 克隆代码 57 | 58 | ```bash 59 | git clone git@github.com:ntfstool/ntfstool.git 60 | ``` 61 | 62 | ### 安装 & 编译 63 | 64 | 大陆用户建议使用淘宝的 npm 源 65 | 66 | ```bash 67 | npm install nrm -g 68 | nrm use taobao 69 | nrm test npm 测试速度 70 | ``` 71 | 72 | 设置 electron 源 73 | 74 | ```bash 75 | npm config set electron_mirror https://cdn.npm.taobao.org/dist/electron/ 76 | ``` 77 | 78 | 安装依赖 79 | 80 | ```bash 81 | cd ntfstool 82 | npm install 83 | ``` 84 | 85 | 大陆用户建议使用淘宝的 npm 源 86 | 87 | ```bash 88 | npm install nrm -g 89 | nrm use taobao 90 | nrm test npm 测试速度 91 | ``` 92 | 93 | 如果喜欢 [Yarn](https://yarnpkg.com/),也可以使用 `yarn` 安装依赖 94 | 95 | ### 开发模式 96 | 97 | ```bash 98 | npm run dev 99 | ``` 100 | 101 | ### 编译打包 102 | 103 | ```bash 104 | npm run build 105 | ``` 106 | 107 | 完成之后可以在项目的 `release` 目录看到编译打包好的应用文件 108 | 109 | ## 🛠 技术栈 110 | 111 | - [Electron](https://electronjs.org/) 112 | - [Vue](https://vuejs.org/) + [VueX](https://vuex.vuejs.org/) + [Element](https://element.eleme.io) 113 | 114 | ## ☑️ TODO 115 | 116 | ... 117 | 118 | ## 🤝 参与共建 [](http://makeapullrequest.com) 119 | 120 | 如果你有兴趣参与共同开发,欢迎 FORK 和 PR。 121 | 122 | ## 🌍 国际化 123 | 124 | 欢迎大家将 NtfsTool 翻译成更多的语言版本 🧐 125 | 126 | | Key | Name | Status | 127 | | ----- | :------------------ | :----- | 128 | | ca | Català | 🚧 | 129 | | de | Deutsch | 🚧 | 130 | | en-US | English | ✔️ | 131 | | fa | فارسی | 🚧 | 132 | | fr | Français | 🚧 | 133 | | ja | 日本語 | ✔️ | 134 | | ko | 한국어 | ✔️ | 135 | | pt-BR | Portuguese (Brazil) | 🚧 | 136 | | ru | Русский | 🚧 | 137 | | tr | Türkçe | 🚧 | 138 | | uk | Українська | 🚧 | 139 | | zh-CN | 简体中文 | ✔️ | 140 | | zh-TW | 繁體中文 | ✔️ | 141 | 142 | ## 📜 开源许可 143 | 144 | 基于 [MIT license](https://opensource.org/licenses/MIT) 许可进行开源。 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # NTFS Tool 2 | # Support apple chip M1/M2/M3 2024 Start... 3 | 4 | <a href="https://ntfstool.com"> 5 | <img src="https://github.com/ntfstool/ntfstool/blob/1.0.2/static/github/256x256@2x.png?raw=true" /></a> 6 | 7 | English | [简体中文](./README-CN.md) 8 | 9 | ## A free software that provides NTFS read and write support for Apple computers 10 | ## NTFS Tool Free For Mac 11 | 12 | We are a group of software technology practitioners who love life and love programming. Using scattered time, we have developed this free NTFS Tool for Mac tool. 13 | 14 | NTFS Tool is a pure version of NTFS tool that supports NTFS disk read-write, mount, launch, management and other functions. Its interface is simple and easy to use. I hope this tool will bring convenience to your work and life. 15 | 16 | If this software is helpful to you, welcome Star's attention. 17 | 18 | 19 | ✈️ [Official Website](https://ntfstool.com) | 📖 [Manual](http://docs.ntfstool.com) 20 | 21 | ## 💽 Installation 22 | Download from [GitHub Releases](https://github.com/ntfstool/ntfstool/releases) and install it. 23 | 24 | ### Platform support 25 | 26 | The author's original intention was to provide convenience for operating NTFS disks in MacOS systems, and currently only supports MacOS systems. 27 | 28 | ### macOS 29 | 30 | macOS users can click the link below to jump to the official website and download directly. 31 | 32 | [Official Website](https://ntfstool.com) 33 | 34 | ## ✨ Features 35 | 36 | - 🕹 Simple and clear user interface 37 | - 🦄 Support USB mount NTFS disk read and write operations 38 | - ☑️ Supports viewing read-write disk capacity 39 | - 💾 Support manual refresh of disk information 40 | - 🎛 Supports image disk file space occupation tips 41 | - 🚀 Support image disk file uninstall 42 | - 🔔 Notify when operation is complete 43 | - 💻 Supports touch bar shortcuts 44 | - 🤖 Permanent system tray for more convenient operation [TODO] 45 | - 🌑 Dark Mode [TODO] 46 | - 🌍 I18n, [View supported languages](#-internationalization). 47 | - 🎏 ... 48 | 49 | ## 🖥 User Interface 50 | 51 |  52 | 53 |  54 | 55 | ## ⌨️ Development 56 | 57 | ### Clone Code 58 | 59 | ```bash 60 | git clone git@github.com:ntfstool/ntfstool.git 61 | ``` 62 | 63 | ### Install Dependencies 64 | 65 | ```bash 66 | cd ntfstool 67 | npm install 68 | ``` 69 | 70 | If you like [Yarn](https://yarnpkg.com/), you can also use `yarn` to install dependencies. 71 | 72 | ### Dev Mode 73 | 74 | ```bash 75 | npm run dev 76 | ``` 77 | 78 | ### Build Release 79 | 80 | ```bash 81 | npm run build 82 | ``` 83 | 84 | After building, the application will be found in the project's `release` directory. 85 | 86 | ## 🛠 Technology Stack 87 | 88 | - [Electron](https://electronjs.org/) 89 | - [Vue](https://vuejs.org/) + [VueX](https://vuex.vuejs.org/) + [Element](https://element.eleme.io) 90 | 91 | ## ☑️ TODO 92 | 93 | ... 94 | 95 | ## 🤝 Contribute [](http://makeapullrequest.com) 96 | 97 | If you are interested in participating in joint development, PR and Forks are welcome! 98 | 99 | ## 🌍 Internationalization 100 | 101 | Translations into versions for other languages are welcome 🧐! 102 | 103 | | Key | Name | Status | 104 | | ----- | :------------------ | :----- | 105 | | ca | Català | 🚧 | 106 | | de | Deutsch | 🚧 | 107 | | en-US | English | ✔️ | 108 | | fa | فارسی | 🚧 | 109 | | fr | Français | 🚧 | 110 | | ja | 日本語 | ✔️ | 111 | | ko | 한국어 | ✔️ | 112 | | pt-BR | Portuguese (Brazil) | 🚧 | 113 | | ru | Русский | ✔️ | 114 | | tr | Türkçe | 🚧 | 115 | | uk | Українська | 🚧 | 116 | | zh-CN | 简体中文 | ✔️ | 117 | | zh-TW | 繁體中文 | ✔️ | 118 | 119 | ## 📜 License 120 | 121 | [MIT](https://opensource.org/licenses/MIT) Copyright (c) 2020-present Dr_rOot 122 | -------------------------------------------------------------------------------- /appveyor.yml: -------------------------------------------------------------------------------- 1 | version: 0.1.{build} 2 | 3 | branches: 4 | only: 5 | - master 6 | 7 | image: Visual Studio 2017 8 | platform: 9 | - x64 10 | 11 | cache: 12 | - node_modules 13 | - '%APPDATA%\npm-cache' 14 | - '%USERPROFILE%\.electron' 15 | - '%USERPROFILE%\AppData\Local\Yarn\cache' 16 | 17 | init: 18 | - git config --global core.autocrlf input 19 | 20 | install: 21 | - ps: Install-Product node 8 x64 22 | - choco install yarn --ignore-dependencies 23 | - git reset --hard HEAD 24 | - yarn 25 | - node --version 26 | 27 | build_script: 28 | #- yarn test 29 | - yarn build 30 | 31 | test: off 32 | -------------------------------------------------------------------------------- /build/icons/256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/build/icons/256x256.png -------------------------------------------------------------------------------- /build/icons/256x256@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/build/icons/256x256@2x.png -------------------------------------------------------------------------------- /build/icons/icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/build/icons/icon.icns -------------------------------------------------------------------------------- /build/icons/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/build/icons/icon.ico -------------------------------------------------------------------------------- /lang/ar.js: -------------------------------------------------------------------------------- 1 | export default { 2 | lang_select: 'اختيار اللغة', 3 | preferences: 'التفضيلات', 4 | general: 'عام', 5 | notification: 'الإشعارات', 6 | ignoredisk: 'تجاهل القرص', 7 | privacy: 'الخصوصية', 8 | update: 'تحديث', 9 | menu: 'القائمة', 10 | activated: 'مُفعل', 11 | closed: 'مُغلق', 12 | disable: 'تعطيل', 13 | enable: 'تمكين', 14 | Followthesystemstartup: 'اتبع بدء تشغيل النظام', 15 | Howtodealwithmountingbadvolumes: 'كيفية التعامل مع تحميل الأقراص السيئة', 16 | Automaticprocessing: 'المعالجة التلقائية', 17 | Promptbeforeprocessing: 'الاستفسار قبل المعالجة', 18 | Donothing: 'لا تفعل شيئًا', 19 | Howtodealwithhibernation: 'كيفية التعامل مع السبات', 20 | Switchtobackground: 'التبديل إلى الخلفية', 21 | Askhow: 'اسأل كيف', 22 | Autoclose: 'إغلاق تلقائي', 23 | notice: 'إشعار', 24 | Shownotificationswhenmountedandlaunched: 'عرض الإشعارات عند التحميل والإطلاق', 25 | Shownotificationswhenupdatesareavailable: 'عرض الإشعارات عند توفر التحديثات', 26 | Notifywhendiskvolumeisabnormal: 'إعلام عندما يكون حجم القرص غير طبيعي', 27 | Shownotificationswhenanupdatedversionisofficiallyavailable: 'عرض الإشعارات عند توفر إصدار محدث بشكل رسمي', 28 | Diskvolumemaybeabnormalduetoabnormaldisconnection: 'قد يكون حجم القرص غير طبيعي بسبب فصل غير طبيعي', 29 | Alldatacollectedcanbeviewedintheupdatedprivacypolicy: 'يمكن عرض جميع البيانات المجمعة في سياسة الخصوصية المحدثة', 30 | Readtheprivacypolicy: 'اقرأ سياسة الخصوصية', 31 | Checkforupdatesautomatically: 'التحقق من التحديثات تلقائيًا', 32 | DetectBetaversionupdates: 'اكتشاف تحديثات الإصدار التجريبي', 33 | Pleaseupdatetothebetaversion1: 'يرجى التحديث إلى الإصدار التجريبي 1، لأنه يحتوي على ميزات تجريبية. هذه الميزات غير مستقرة وقد تتسبب في فقدان البيانات', 34 | Checkforupdates: 'التحقق من التحديثات', 35 | Resetallconfiguration: 'إعادة تعيين جميع الإعدادات', 36 | Open: 'فتح', 37 | unmount: 'فصل', 38 | protocol: 'بروتوكول', 39 | mount: 'تحميل', 40 | Unmounted: 'غير محمّل', 41 | Clicktoopenthedisk: 'انقر لفتح القرص', 42 | Quit: 'إنهاء', 43 | feedback: 'ردود الفعل', 44 | Username: 'اسم المستخدم', 45 | Password: 'كلمة المرور', 46 | Version: 'الإصدار', 47 | Feedbackform: 'نموذج الردود', 48 | Pleaseprovidedescription: 'يرجى تقديم وصف مفصل حول مشكلتك واقتراحاتك وتقارير الثغرات أو أسئلتك، لكي نتمكن من تقديم أفضل إجابة بعد فهم مطالبك بوضوح.', 49 | Submitoperatingdata: 'تقديم بيانات التشغيل والسجلات وغيرها من المعلومات لمساعدتنا على فهم معلومات جهازك وتحسين تطبيقنا', 50 | sendfeedback: 'إرسال ردود الفعل', 51 | Mounting: 'جار التحميل', 52 | Automatically_mount_NTFS_disk: 'تحميل تلقائي للقرص NTFS', 53 | NoMsg: 'لا توجد رسالة', 54 | OuterDisk: 'قرص خارجي', 55 | Install: 'تثبيت', 56 | SystemDiskCanotUnmount: 'لا يمكن فصل قرص النظام', 57 | UnmountorMountDisk: 'فصل أو تحميل القرص', 58 | UnMount: 'فصل', 59 | Mount: 'تحميل', 60 | SystemDiskNotNeedFix: 'لا تحتاج قرص النظام للإصلاح', 61 | FixDisk: 'إصلاح القرص', 62 | Fix: 'إصلاح', 63 | Rename: 'إعادة تسمية', 64 | Set: 'تعيين', 65 | About: 'حول', 66 | NowReadonlyIfNeedWritePleaseInstallDriver: 'الآن في وضع القراءة فقط. إذا كنت بحاجة إلى الكتابة، يرجى تثبيت البرنامج التشغيل', 67 | total: 'الإجمالي', 68 | used: 'مستخدم', 69 | available: 'متاح', 70 | NoMounted: 'غير محمّل', 71 | MountedPoint: 'نقطة التحميل', 72 | Readonly: 'قراءة فقط', 73 | TotalVolume: 'الحجم الكلي', 74 | Format: 'تنسيق', 75 | HoldUser: 'المستخدم', 76 | Connect: 'اتصال', 77 | Device: 'الجهاز', 78 | PleaseInstallSystemKextAllow: 'يرجى تثبيت تصريح تشغيل ملحق النظام أولاً', 79 | ScanToKnowHowtoOpenSystemKextAllow: 'يرجى مسح الرمز الشريطي عبر الهاتف لمعرفة كيفية فتح "تصريح تشغيل ملحق النظام". انقر على تأكيد لإيقاف التشغيل واتباع التعليمات.', 80 | Cancel: 'إلغاء', 81 | Confirm: 'تأكيد', 82 | 83 | "system": "النظام", 84 | "active_status": "الحالة النشطة", 85 | "actioning": "قيد التنفيذ", 86 | "user": "المستخدم", 87 | "email": "البريد الإلكتروني", 88 | "trying": "جارٍ التجربة", 89 | "actived": "تم التنشيط", 90 | "expired": "منتهي الصلاحية", 91 | "expiretimeto": "تنتهي الصلاحية في", 92 | "reactive": "إعادة التنشيط", 93 | "buactivecode": "شراء رمز التنشيط", 94 | "expire_time": "وقت الانتهاء", 95 | "input_active_code": "إدخال رمز التنشيط", 96 | "confirm_active": "تأكيد التنشيط", 97 | "delete": "حذف", 98 | "details": "تفاصيل", 99 | "cancel_active": "إلغاء التنشيط", 100 | "active": "تنشيط", 101 | "disk_name_error": "خطأ في تنسيق اسم القرص", 102 | "install_succ": "تم التثبيت بنجاح", 103 | "please_allow_action_and_system_will_start_2times": "يرجى السماح بالإجراء وسيتم بدء التشغيل 2 مرات.", 104 | "agree": "موافق", 105 | "confirm_restart": "تأكيد إعادة التشغيل", 106 | "system_will_restart": "سيتم إعادة تشغيل النظام قريبًا، يرجى التأكد من معرفة كيفية تمكين التوسيع.", 107 | "reinstall": "إعادة التثبيت", 108 | "checked_kext_sign_err": "تم الكشف عن فشل توقيع تشغيل التوسيع، قد يكون ذلك بسبب عدم تمكين مفتاح تشغيل التوسيع.", 109 | "agree_text": "سيقوم هذا التطبيق بتثبيت توسيع نواة macOS NTFS المعتمد من Apple. ونظرًا لمتطلبات نظام macOS، يُسمح فقط بتواجد توسيع واحد لنفس التنسيق في نفس الوقت، فالموافقة تعني اختيار هذا التوسيع كتوسيع افتراضي، وفي الوقت نفسه، حذف / إلغاء تثبيت توسيعات أخرى." 110 | 111 | } -------------------------------------------------------------------------------- /lang/bn.js: -------------------------------------------------------------------------------- 1 | export default { 2 | lang_select: 'ভাষা নির্বাচন', 3 | preferences: 'পছন্দ', 4 | general: 'সাধারণ', 5 | notification: 'বিজ্ঞপ্তি', 6 | ignoredisk: 'ডিস্ক উপেক্ষা করুন', 7 | privacy: 'গোপনীয়তা', 8 | update: 'হালনাগাদ', 9 | menu: 'মেনু', 10 | activated: 'সক্রিয়', 11 | closed: 'বন্ধ', 12 | disable: 'অক্ষম', 13 | enable: 'সক্ষম', 14 | Followthesystemstartup: 'সিস্টেম শুরু করুন অনুসরণ করুন', 15 | Howtodealwithmountingbadvolumes: 'খারাপ ভলিউম মাউন্ট করার কীভাবে ব্যবস্থা করবেন', 16 | Automaticprocessing: 'স্বয়ংক্রিয় প্রসেসিং', 17 | Promptbeforeprocessing: 'প্রসেসিং আগে প্রম্পট', 18 | Donothing: 'কিছুই না করুন', 19 | Howtodealwithhibernation: 'কীভাবে স্নায়ুক্ষুদ্রকরণ করবেন', 20 | Switchtobackground: 'পটভূমিতে সুইচ করুন', 21 | Askhow: 'কিভাবে প্রশ্ন করুন', 22 | Autoclose: 'অটোমেটিক বন্ধ', 23 | notice: 'নোটিশ', 24 | Shownotificationswhenmountedandlaunched: "মাউন্ট এবং লঞ্চ করা হয়েছে সময় বিজ্ঞপ্তি প্রদর্শন করুন", 25 | Shownotificationswhenupdatesareavailable: "আপডেট উপলব্ধ হলে বিজ্ঞপ্তি প্রদর্শন করুন", 26 | Notifywhendiskvolumeisabnormal: "ডিস্ক ভলিউম অস্বাভাবিক হলে বিজ্ঞপ্তি করুন", 27 | Shownotificationswhenanupdatedversionisofficiallyavailable: 'একটি আধিকারিকভাবে উন্নত সংস্করণ উপলব্ধ হলে বিজ্ঞপ্তি প্রদর্শন করুন', 28 | Diskvolumemaybeabnormalduetoabnormaldisconnection: 'অস্বাভাবিক বিচ্ছিন্নতা কারণে ডিস্ক ভলিউম অস্বাভাবিক হতে পারে', 29 | Alldatacollectedcanbeviewedintheupdatedprivacypolicy: 'সমস্ত তথ্য যা সংগ্রহিত হয়েছে তা আপডেট হওয়া গোপনীয়তা নীতিতে দেখা যাবে', 30 | Readtheprivacypolicy: 'গোপনীয়তা নীতি পড়ুন', 31 | Checkforupdatesautomatically: 'স্বয়ংক্রিয়ভাবে আপডেট চেক করুন', 32 | DetectBetaversionupdates: 'বেটা সংস্করণ আপডেট সনাক্ত করুন', 33 | Pleaseupdatetothebetaversion1: 'অনুগ্রহ করে বেটা সংস্করণ 1 এ আপডেট করুন, কারণ এগুলিতে পরীক্ষাগত বৈশিষ্ট্য রয়েছে। এই বৈশিষ্ট্যগুলি অস্থিতিশীল এবং ডেটা হারানোর সম্ভাবনা রয়েছে', 34 | Checkforupdates: 'আপডেট চেক করুন', 35 | Resetallconfiguration: 'সমস্ত কনফিগারেশন রিসেট করুন', 36 | Open: 'খোলা', 37 | unmount: 'অসমর্থন করা', 38 | protocol: 'প্রোটোকল', 39 | mount: "মাউন্ট", 40 | Unmounted: "অমাউন্টেড", 41 | Clicktoopenthedisk: "ডিস্ক খোলার জন্য ক্লিক করুন", 42 | Quit: "পরিত্যাগ", 43 | feedback: "প্রতিক্রিয়া", 44 | Username: "ব্যবহারকারীর নাম", 45 | Password: "পাসওয়ার্ড", 46 | Version: "সংস্করণ", 47 | Feedbackform: "প্রতিক্রিয়া ফরম", 48 | Pleaseprovidedescription: "দয়া করে বিস্তারিত বিবরণ, পরামর্শ, বাগ রিপোর্ট বা আপনার প্রশ্ন সরবরাহ করুন, যাতে আমরা আপনার দাবি পরিষ্কার করার জন্য স্পষ্টভাবে বোঝার পর সবচেয়ে কার্যকর উত্তর দিতে পারি।", 49 | Submitoperatingdata: "আপনার ডিভাইস তথ্য সহ চলমান ডেটা, লগ ইত্যাদি জমা দিন, যাতে আমরা আপনার ডিভাইস তথ্য জানতে এবং আমাদের অ্যাপটি উন্নত করতে সাহায্য করতে পারি", 50 | sendfeedback: "প্রতিক্রিয়া প্রেরণ করুন", 51 | Mounting: "মাউন্টিং", 52 | Automatically_mount_NTFS_disk: "স্বয়ংক্রিয়ভাবে NTFS ডিস্ক মাউন্ট করুন", 53 | NoMsg: "নাই", 54 | OuterDisk: "বাহ্যিক", 55 | Install: "ইনস্টল", 56 | SystemDiskCanotUnmount: "সিস্টেম ডিস্ক অনমাউন্ট করা যাবে না", 57 | UnmountorMountDisk: "ডিস্ক অনমাউন্ট করুন অথবা মাউন্ট করুন", 58 | UnMount: "অনমাউন্ট", 59 | Mount: "মাউন্ট", 60 | SystemDiskNotNeedFix: "সিস্টেম ডিস্কটি ঠিক করার প্রয়োজন নেই", 61 | FixDisk: "ডিস্ক মেরামত", 62 | Fix: "মেরামত", 63 | Rename: "পুনঃনামকরণ", 64 | Set: "নির্ধারণ", 65 | About: "সম্পর্কে", 66 | NowReadonlyIfNeedWritePleaseInstallDriver: "এখন শুধুমাত্র পড়া-লেখা মোড, লিখতে চাইলে দয়া করে ড্রাইভার ইনস্টল করুন", 67 | total: 'মোট', 68 | used: 'ব্যবহৃত', 69 | available: 'উপলব্ধ', 70 | NoMounted: 'মাউন্ট না', 71 | MountedPoint: 'মাউন্ট পয়েন্ট', 72 | Readonly: "শুধুমাত্র পড়া যাবে", 73 | TotalVolume: "মোট আয়তন", 74 | Format: "ফরম্যাট", 75 | HoldUser: "ধারণকারী", 76 | Connect: "সংযোগ", 77 | Device: "ডিভাইস", 78 | PleaseInstallSystemKextAllow: "দয়া করে প্রথমে সিস্টেম কেক্সট অনুমতি ইনস্টল করুন", 79 | ScanToKnowHowtoOpenSystemKextAllow: 'সিস্টেম কেক্সট অনুমতি খোলার পদ্ধতি জানতে স্ক্যান করুন: "সিস্টেম কেক্সট চালান দিন", এখন বন্ধ করুন এবং নির্দেশিত পদক্ষেপ অনুসরণ করুন।', 80 | Cancel: "বাতিল", 81 | Confirm: "নিশ্চিত", 82 | 83 | system: "সিস্টেম", 84 | active_status: "সক্রিয় অবস্থা", 85 | actioning: "অ্যাকশন চলছে", 86 | user: "ব্যবহারকারী", 87 | email: "ইমেল", 88 | trying: "প্রয়োগ করছি", 89 | actived: "সক্রিয় হয়েছে", 90 | expired: "মেয়াদোত্তীর্ণ", 91 | expiretimeto: "মেয়াদ শেষ হয়েছে", 92 | reactive: "পুনরায় সক্রিয় করুন", 93 | buactivecode: "ক্রয় অ্যাক্টিভেশন কোড", 94 | expire_time: "মেয়াদ শেষের সময়", 95 | input_active_code: "অ্যাক্টিভেশন কোড ইনপুট করুন", 96 | confirm_active: "সক্রিয় করা নিশ্চিত করুন", 97 | delete: "মুছে ফেলুন", 98 | details: "বিশদ", 99 | cancel_active: "সক্রিয় বাতিল করুন", 100 | active: "সক্রিয়", 101 | disk_name_error: "ডিস্ক নামের ফরম্যাট ভুল", 102 | install_succ: "ইনস্টলেশন সফল", 103 | please_allow_action_and_system_will_start_2times: "অনুমতি দিন এবং সিস্টেম দুটি বার পুনরায় চালু হবে।", 104 | agree: "সম্মত", 105 | confirm_restart: "রিস্টার্ট নিশ্চিত করুন", 106 | system_will_restart: "সিস্টেম শীঘ্রই পুনরায় চালু হবে, দয়া করে সক্ষমতা বিস্তার করতে কিভাবে জানেন তা নিশ্চিত করুন।", 107 | reinstall: "পুনরায় ইনস্টল করুন", 108 | checked_kext_sign_err: "এক্সটেনশন চালানোর স্বাক্ষরে ত্রুটি পাওয়া গেছে, এটি হতে পারে এক্সটেনশন চালানোর অনুমতির সুইচ সক্রিয় না হওয়া।", 109 | agree_text: "এই অ্যাপ্লিকেশনটি এপল অনুমোদিত ম্যাকওএস এনটিএফএস কার্নেল এক্সটেনশন ইনস্টল করবে। এবং ম্যাকওএস সিস্টেমের প্রয়োজনে, একই ফাইল ফর্ম্যাটে একই এক্সটেনশন মাত্র অনুমোদিত আছে, সম্মতি দেওয়ার মাধ্যমে এই এক্সটেনশনটি ডিফল্ট এক্সটেনশন হিসাবে নির্বাচন করা হয়, এবং অন্যান্য ফ্রি এক্সটেনশন স্বয়ংক্রিয়ভাবে মুছে ফেলা হবে / আনইনস্টল হবে।", 110 | } -------------------------------------------------------------------------------- /lang/de.js: -------------------------------------------------------------------------------- 1 | export default { 2 | "lang_select": "Sprachauswahl", 3 | "preferences": "Einstellungen", 4 | "general": "Allgemein", 5 | "notification": "Benachrichtigungen", 6 | "ignoredisk": "Festplatte ignorieren", 7 | "privacy": "Datenschutz", 8 | "update": "Aktualisieren", 9 | "menu": "Menü", 10 | "activated": "Aktiviert", 11 | "closed": "Geschlossen", 12 | "disable": "Deaktivieren", 13 | "enable": "Aktivieren", 14 | "Followthesystemstartup": "Systemstart folgen", 15 | "Howtodealwithmountingbadvolumes": "Umgang mit dem Einbinden defekter Volumes", 16 | "Automaticprocessing": "Automatische Verarbeitung", 17 | "Promptbeforeprocessing": "Vor der Verarbeitung nachfragen", 18 | "Donothing": "Nichts unternehmen", 19 | "Howtodealwithhibernation": "Umgang mit dem Ruhezustand", 20 | "Switchtobackground": "In den Hintergrund wechseln", 21 | "Askhow": "Fragen, wie zu verfahren ist", 22 | "Autoclose": "Automatisch schließen", 23 | "notice": "Hinweis", 24 | "Shownotificationswhenmountedandlaunched": "Benachrichtigungen anzeigen, wenn gemountet und gestartet", 25 | "Shownotificationswhenupdatesareavailable": "Benachrichtigungen anzeigen, wenn Updates verfügbar sind", 26 | "Notifywhendiskvolumeisabnormal": "Benachrichtigen, wenn das Festplattenvolumen abnormal ist", 27 | "Shownotificationswhenanupdatedversionisofficiallyavailable": "Benachrichtigungen anzeigen, wenn eine aktualisierte Version offiziell verfügbar ist", 28 | "Diskvolumemaybeabnormalduetoabnormaldisconnection": "Festplattenvolumen kann aufgrund abnormaler Trennung abnorm sein", 29 | "Alldatacollectedcanbeviewedintheupdatedprivacypolicy": "Alle gesammelten Daten können in der aktualisierten Datenschutzrichtlinie eingesehen werden", 30 | "Readtheprivacypolicy": "Die Datenschutzrichtlinie lesen", 31 | "Checkforupdatesautomatically": "Automatisch nach Updates suchen", 32 | "DetectBetaversionupdates": "Beta-Version-Updates erkennen", 33 | "Pleaseupdatetothebetaversion1": "Bitte vorsichtig auf die Beta-Version aktualisieren, da sie experimentelle Funktionen enthalten. Diese Funktionen sind instabil und können Datenverlust verursachen", 34 | "Checkforupdates": "Nach Updates suchen", 35 | "Resetallconfiguration": "Alle Konfigurationen zurücksetzen", 36 | "Open": "Öffnen", 37 | "unmount": "Aushängen", 38 | "protocol": "Protokoll", 39 | "mount": "Einbinden", 40 | "Unmounted": "Nicht eingebunden", 41 | "Clicktoopenthedisk": "Klicken, um die Festplatte zu öffnen", 42 | "Quit": "Beenden", 43 | "feedback": "Feedback", 44 | "Username": "Benutzername", 45 | "Password": "Passwort", 46 | "Version": "Version", 47 | "Feedbackform": "Feedback-Formular", 48 | "Pleaseprovidedescription": "Bitte geben Sie eine detaillierte Beschreibung Ihres Problems, Vorschlags, Bugreports oder Ihrer Frage an, damit wir ein klares Verständnis für Ihr Anliegen haben und Ihnen eine effektive Antwort geben können.", 49 | "Submitoperatingdata": "Betriebsdaten, Logs und andere Informationen einreichen, um Ihr Gerät besser zu verstehen und unsere Anwendung zu verbessern", 50 | "sendfeedback": "Feedback senden", 51 | "Mounting": "Einbinden", 52 | "Automatically_mount_NTFS_disk": "NTFS-Festplatte automatisch einbinden", 53 | "NoMsg": "Keine Nachricht", 54 | "OuterDisk": "Externe Festplatte", 55 | "Install": "Installieren", 56 | "SystemDiskCanotUnmount": "Systemfestplatte kann nicht ausgehängt werden", 57 | "UnmountorMountDisk": "Festplatte aushängen oder einbinden", 58 | "UnMount": "Aushängen", 59 | "Mount": "Einbinden", 60 | "SystemDiskNotNeedFix": "Systemfestplatte benötigt keine Reparatur", 61 | "FixDisk": "Festplatte reparieren", 62 | "Fix": "Reparieren", 63 | "Rename": "Umbenennen", 64 | "Set": "Einstellen", 65 | "About": "Über", 66 | "NowReadonlyIfNeedWritePleaseInstallDriver": "Derzeit nur Lesezugriff. Bitte installieren Sie den Treiber, wenn Schreibzugriff benötigt wird", 67 | "total": "Gesamt", 68 | "used": "Verwendet", 69 | "available": "Verfügbar", 70 | "NoMounted": "Nicht eingebunden", 71 | "MountedPoint": "Einbindungspunkt", 72 | "Readonly": "Nur lesen", 73 | "TotalVolume": "Gesamtvolumen", 74 | "Format": "Format", 75 | "HoldUser": "Besitzer", 76 | "Connect": "Verbinden", 77 | "Device": "Gerät", 78 | "PleaseInstallSystemKextAllow": "Bitte installieren Sie zuerst die Systemkernerweiterung", 79 | "ScanToKnowHowtoOpenSystemKextAllow": "Bitte scannen Sie den Code, um zu erfahren, wie Sie 'Systemkernerweiterungen erlauben' aktivieren können. Klicken Sie auf Bestätigen, um den Computer herunterzufahren, und folgen Sie dann der Anleitung.", 80 | "Cancel": "Abbrechen", 81 | "Confirm": "Bestätigen", 82 | 83 | 84 | system: "System", 85 | active_status: "Aktiver Status", 86 | actioning: "Handlung läuft", 87 | user: "Benutzer", 88 | email: "E-Mail", 89 | trying: "Versuchen", 90 | actived: "Aktiviert", 91 | expired: "Abgelaufen", 92 | expiretimeto: "Ablaufzeitpunkt", 93 | reactive: "Reaktivieren", 94 | buactivecode: "Aktivierungscode kaufen", 95 | expire_time: "Ablaufzeit", 96 | input_active_code: "Aktivierungscode eingeben", 97 | confirm_active: "Aktivierung bestätigen", 98 | delete: "Löschen", 99 | details: "Details", 100 | cancel_active: "Aktivierung abbrechen", 101 | active: "Aktivieren", 102 | disk_name_error: "Fehler im Festplattennamenformat", 103 | install_succ: "Installation erfolgreich", 104 | please_allow_action_and_system_will_start_2times: "Bitte erlauben Sie die Aktion, und das System wird zweimal neu gestartet.", 105 | agree: "Zustimmen", 106 | confirm_restart: "Neustart bestätigen", 107 | system_will_restart: "Das System wird bald neu gestartet. Stellen Sie sicher, dass Sie wissen, wie Sie die Erweiterung aktivieren.", 108 | reinstall: "Neu installieren", 109 | checked_kext_sign_err: "Fehler beim Überprüfen der Kext-Signatur festgestellt. Möglicherweise ist der Schalter für die Aktivierung der Kext-Laufzeit nicht aktiviert.", 110 | agree_text: "Diese Anwendung wird die von Apple autorisierte MacOS NTFS-Kernelerweiterung installieren. Aufgrund der Anforderungen des MacOS-Systems darf nur eine Kernelerweiterung pro Dateiformat vorhanden sein. Die Zustimmung bedeutet die Auswahl dieser Erweiterung als Standarderweiterung und automatisches Löschen / Deinstallieren anderer Anbietererweiterungen.", 111 | } -------------------------------------------------------------------------------- /lang/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | "lang_select": "Language Selection", 3 | "preferences": "Preferences", 4 | "general": "General", 5 | "notification": "Notification", 6 | "ignoredisk": "Ignore Disk", 7 | "privacy": "Privacy", 8 | "update": "Update", 9 | "menu": "Menu", 10 | "activated": "Activated", 11 | "closed": "Closed", 12 | "disable": "Disable", 13 | "enable": "Enable", 14 | "Followthesystemstartup": "Follow System Startup", 15 | "Howtodealwithmountingbadvolumes": "How to Deal with Mounting Bad Volumes", 16 | "Automaticprocessing": "Automatic Processing", 17 | "Promptbeforeprocessing": "Prompt before Processing", 18 | "Donothing": "Do Nothing", 19 | "Howtodealwithhibernation": "How to Deal with Hibernation", 20 | "Switchtobackground": "Switch to Background", 21 | "Askhow": "Ask How to Proceed", 22 | "Autoclose": "Auto Close", 23 | "notice": "Notice", 24 | "Shownotificationswhenmountedandlaunched": "Show Notifications When Mounted and Launched", 25 | "Shownotificationswhenupdatesareavailable": "Show Notifications When Updates are Available", 26 | "Notifywhendiskvolumeisabnormal": "Notify When Disk Volume is Abnormal", 27 | "Shownotificationswhenanupdatedversionisofficiallyavailable": "Show Notifications When an Updated Version is Officially Available", 28 | "Diskvolumemaybeabnormalduetoabnormaldisconnection": "Disk Volume May Be Abnormal Due to Abnormal Disconnection", 29 | "Alldatacollectedcanbeviewedintheupdatedprivacypolicy": "All Data Collected Can Be Viewed in the Updated Privacy Policy", 30 | "Readtheprivacypolicy": "Read the Privacy Policy", 31 | "Checkforupdatesautomatically": "Check for Updates Automatically", 32 | "DetectBetaversionupdates": "Detect Beta Version Updates", 33 | "Pleaseupdatetothebetaversion1": "Please Update to the Beta Version Cautiously, as They Contain Experimental Features. These Features are Unstable and May Cause Data Loss", 34 | "Checkforupdates": "Check for Updates", 35 | "Resetallconfiguration": "Reset All Configuration", 36 | "Open": "Open", 37 | "unmount": "Unmount", 38 | "protocol": "Protocol", 39 | "mount": "Mount", 40 | "Unmounted": "Unmounted", 41 | "Clicktoopenthedisk": "Click to Open the Disk", 42 | "Quit": "Quit", 43 | "feedback": "Feedback", 44 | "Username": "Username", 45 | "Password": "Password", 46 | "Version": "Version", 47 | "Feedbackform": "Feedback Form", 48 | "Pleaseprovidedescription": "Please Provide a Detailed Description of Your Issue, Suggestion, Bug Report, or Question so That We Can Offer the Most Effective Response After Understanding Your Concerns Clearly.", 49 | "Submitoperatingdata": "Submit Operating Data, Logs, and Other Information to Help Understand Your Device Information and Improve Our Application", 50 | "sendfeedback": "Send Feedback", 51 | "Mounting": "Mounting", 52 | "Automatically_mount_NTFS_disk": "Automatically Mount NTFS Disk", 53 | "NoMsg": "No Message", 54 | "OuterDisk": "External Disk", 55 | "Install": "Install", 56 | "SystemDiskCanotUnmount": "System Disk Cannot Unmount", 57 | "UnmountorMountDisk": "Unmount or Mount Disk", 58 | "UnMount": "Unmount", 59 | "Mount": "Mount", 60 | "SystemDiskNotNeedFix": "System Disk Does Not Need Repair", 61 | "FixDisk": "Fix Disk", 62 | "Fix": "Fix", 63 | "Rename": "Rename", 64 | "Set": "Set", 65 | "About": "About", 66 | "NowReadonlyIfNeedWritePleaseInstallDriver": "Currently in Read-Only Mode, If You Need to Write Files, Please Install the Driver", 67 | "total": "Total", 68 | "used": "Used", 69 | "available": "Available", 70 | "NoMounted": "Not Mounted", 71 | "MountedPoint": "Mounted Point", 72 | "Readonly": "Read-Only", 73 | "TotalVolume": "Total Volume", 74 | "Format": "Format", 75 | "HoldUser": "Owner", 76 | "Connect": "Connect", 77 | "Device": "Device", 78 | "PleaseInstallSystemKextAllow": "Please Install System Kernel Extension Permission First", 79 | "ScanToKnowHowtoOpenSystemKextAllow": "'Please Scan with Your Phone to See How to Enable 'System Kernel Extension Permission'. Click Confirm to Shutdown and Follow the Instructions.", 80 | "Cancel": "Cancel", 81 | "Confirm": "Confirm", 82 | 83 | "system": "System", 84 | active_status: "Active Status", 85 | actioning: "Actioning", 86 | user: "User", 87 | email: "Email", 88 | trying: "Trying", 89 | actived: "Actived", 90 | expired: "Expired", 91 | expiretimeto: "Expire Time To", 92 | reactive: "Reactive", 93 | buactivecode: "Buy Active Code", 94 | expire_time: "Expire Time", 95 | input_active_code: "Input Active Code", 96 | confirm_active: "Confirm Active", 97 | delete: "Delete", 98 | details: "Details", 99 | cancel_active: "Cancel Active", 100 | active: "Active", 101 | disk_name_error: "Disk Name Error", 102 | install_succ: "Install Succ", 103 | please_allow_action_and_system_will_start_2times: "Please Allow Action And System Will Start 2 Times", 104 | agree: "Agree", 105 | confirm_restart: "Confirm Restart", 106 | system_will_restart: "System Will Restart", 107 | reinstall: "Reinstall", 108 | checked_kext_sign_err: "Checked Kext Sign Err", 109 | agree_text: "Agree Text", 110 | } -------------------------------------------------------------------------------- /lang/es.js: -------------------------------------------------------------------------------- 1 | export default { 2 | "lang_select": "Selección de idioma", 3 | "preferences": "Preferencias", 4 | "general": "General", 5 | "notification": "Notificaciones", 6 | "ignoredisk": "Ignorar disco", 7 | "privacy": "Privacidad", 8 | "update": "Actualizar", 9 | "menu": "Menú", 10 | "activated": "Activado", 11 | "closed": "Cerrado", 12 | "disable": "Desactivar", 13 | "enable": "Activar", 14 | "Followthesystemstartup": "Seguir el inicio del sistema", 15 | "Howtodealwithmountingbadvolumes": "Cómo tratar con volúmenes dañados al montar", 16 | "Automaticprocessing": "Procesamiento automático", 17 | "Promptbeforeprocessing": "Preguntar antes de procesar", 18 | "Donothing": "No hacer nada", 19 | "Howtodealwithhibernation": "Cómo tratar con la hibernación", 20 | "Switchtobackground": "Cambiar a segundo plano", 21 | "Askhow": "Preguntar cómo manejar", 22 | "Autoclose": "Cierre automático", 23 | "notice": "Aviso", 24 | "Shownotificationswhenmountedandlaunched": "Mostrar notificaciones cuando se monte y se inicie", 25 | "Shownotificationswhenupdatesareavailable": "Mostrar notificaciones cuando haya actualizaciones disponibles", 26 | "Notifywhendiskvolumeisabnormal": "Notificar cuando el volumen del disco sea anormal", 27 | "Shownotificationswhenanupdatedversionisofficiallyavailable": "Mostrar notificaciones cuando haya una versión actualizada oficialmente disponible", 28 | "Diskvolumemaybeabnormalduetoabnormaldisconnection": "El volumen del disco puede ser anormal debido a una desconexión anormal", 29 | "Alldatacollectedcanbeviewedintheupdatedprivacypolicy": "Todos los datos recogidos se pueden ver en la política de privacidad actualizada", 30 | "Readtheprivacypolicy": "Leer la política de privacidad", 31 | "Checkforupdatesautomatically": "Buscar actualizaciones automáticamente", 32 | "DetectBetaversionupdates": "Detectar actualizaciones de la versión Beta", 33 | "Pleaseupdatetothebetaversion1": "Por favor, actualice a la versión beta con precaución, ya que contiene características experimentales. Estas funciones son inestables y pueden causar pérdida de datos", 34 | "Checkforupdates": "Buscar actualizaciones", 35 | "Resetallconfiguration": "Restablecer toda la configuración", 36 | "Open": "Abrir", 37 | "unmount": "Desmontar", 38 | "protocol": "Protocolo", 39 | "mount": "Montar", 40 | "Unmounted": "Desmontado", 41 | "Clicktoopenthedisk": "Haga clic para abrir el disco", 42 | "Quit": "Salir", 43 | "feedback": "Retroalimentación", 44 | "Username": "Nombre de usuario", 45 | "Password": "Contraseña", 46 | "Version": "Versión", 47 | "Feedbackform": "Formulario de retroalimentación", 48 | "Pleaseprovidedescription": "Por favor, proporcione una descripción detallada de su problema, sugerencia, informe de error o pregunta, para que podamos entender su solicitud claramente y proporcionarle la respuesta más efectiva.", 49 | "Submitoperatingdata": "Enviar datos operativos, registros y otra información para ayudar a comprender la información de su dispositivo y mejorar nuestra aplicación", 50 | "sendfeedback": "Enviar retroalimentación", 51 | "Mounting": "Montando", 52 | "Automatically_mount_NTFS_disk": "Montar disco NTFS automáticamente", 53 | "NoMsg": "Ninguno", 54 | "OuterDisk": "Disco externo", 55 | "Install": "Instalar", 56 | "SystemDiskCanotUnmount": "El disco del sistema no se puede desmontar", 57 | "UnmountorMountDisk": "Desmontar o montar disco", 58 | "UnMount": "Desmontar", 59 | "Mount": "Montar", 60 | "SystemDiskNotNeedFix": "El disco del sistema no necesita reparación", 61 | "FixDisk": "Reparar disco", 62 | "Fix": "Reparar", 63 | "Rename": "Renombrar", 64 | "Set": "Configurar", 65 | "About": "Acerca de", 66 | "NowReadonlyIfNeedWritePleaseInstallDriver": "Actualmente en modo de solo lectura, si necesita escribir, por favor instale el controlador", 67 | "total": "Total", 68 | "used": "Usado", 69 | "available": "Disponible", 70 | "NoMounted": "No montado", 71 | "MountedPoint": "Punto de montaje", 72 | "Readonly": "Solo lectura", 73 | "TotalVolume": "Volumen total", 74 | "Format": "Formato", 75 | "HoldUser": "Propietario", 76 | "Connect": "Conectar", 77 | "Device": "Dispositivo", 78 | "PleaseInstallSystemKextAllow": "Por favor, instale primero el permiso de ejecución de la extensión del kernel del sistema", 79 | "ScanToKnowHowtoOpenSystemKextAllow": "Escanea para saber cómo habilitar 'Permiso de ejecución de la extensión del kernel del sistema', hacer clic en confirmar apagará tu computadora y sigue las instrucciones.", 80 | "Cancel": "Cancelar", 81 | "Confirm": "Confirmar", 82 | 83 | system: "Sistema", 84 | active_status: "Estado activo", 85 | actioning: "Acción en curso", 86 | user: "Usuario", 87 | email: "Correo electrónico", 88 | trying: "Intentando", 89 | actived: "Activado", 90 | expired: "Expirado", 91 | expiretimeto: "Vencimiento", 92 | reactive: "Reactivar", 93 | buactivecode: "Comprar código de activación", 94 | expire_time: "Hora de expiración", 95 | input_active_code: "Ingresar código activo", 96 | confirm_active: "Confirmar activación", 97 | delete: "Eliminar", 98 | details: "Detalles", 99 | cancel_active: "Cancelar activación", 100 | active: "Activar", 101 | disk_name_error: "Error en el nombre del disco", 102 | install_succ: "Instalación exitosa", 103 | please_allow_action_and_system_will_start_2times: "Por favor, permita la acción y el sistema se reiniciará 2 veces.", 104 | agree: "Aceptar", 105 | confirm_restart: "Confirmar reinicio", 106 | system_will_restart: "El sistema se reiniciará pronto, asegúrese de saber cómo habilitar la extensión.", 107 | reinstall: "Reinstalar", 108 | checked_kext_sign_err: "Error de firma de Kext verificado", 109 | agree_text: "Este aplicación instalará la extensión del kernel NTFS de MacOS autorizada por Apple. Debido a los requisitos del sistema MacOS, solo se permite una extensión por formato de archivo, estar de acuerdo significa elegir esta extensión como la extensión predeterminada y eliminar / desinstalar automáticamente otras extensiones de terceros.", 110 | } -------------------------------------------------------------------------------- /lang/fa.js: -------------------------------------------------------------------------------- 1 | export default { 2 | lang_select: 'انتخاب زبان', 3 | preferences: 'ترجیحات', 4 | general: 'عمومی', 5 | notification: 'اعلان', 6 | ignoredisk: 'صرفنظر از دیسک', 7 | privacy: 'حریم خصوصی', 8 | update: 'بهروزرسانی', 9 | menu: 'منو', 10 | activated: 'فعال شده', 11 | closed: 'بسته شده', 12 | disable: 'غیرفعال', 13 | enable: 'فعال', 14 | Followthesystemstartup: 'پیروی از راهاندازی سیستم', 15 | Howtodealwithmountingbadvolumes: 'چگونگی برخورد با حجمهای بد مونت شده', 16 | Automaticprocessing: 'پردازش خودکار', 17 | Promptbeforeprocessing: 'هشدار قبل از پردازش', 18 | Donothing: 'هیچ کاری انجام نده', 19 | Howtodealwithhibernation: 'چگونگی برخورد با خواب اژیر', 20 | Switchtobackground: 'تغییر به پسزمینه', 21 | Askhow: 'پرسیدن چگونگی', 22 | Autoclose: 'بستهشدن خودکار', 23 | notice: 'اعلان', 24 | Shownotificationswhenmountedandlaunched: 'نمایش اعلانها هنگام مونت شده و راهاندازی شده است', 25 | Shownotificationswhenupdatesareavailable: 'نمایش اعلانها هنگامی که بهروزرسانیها در دسترس هستند', 26 | Notifywhendiskvolumeisabnormal: 'اطلاعرسانی هنگامی که حجم دیسک نامعمول است', 27 | Shownotificationswhenanupdatedversionisofficiallyavailable: 'نمایش اعلانها هنگامی که یک نسخه بهروزرسانی شده به صورت رسمی در دسترس است', 28 | Diskvolumemaybeabnormalduetoabnormaldisconnection: 'ممکن است حجم دیسک به دلیل قطع نامعمول غیرطبیعی باشد', 29 | Alldatacollectedcanbeviewedintheupdatedprivacypolicy: 'تمام دادههای جمعآوریشده قابل مشاهده در سیاست حریم خصوصی بهروزرسانیشده است', 30 | Readtheprivacypolicy: 'مطالعه سیاست حریم خصوصی', 31 | Checkforupdatesautomatically: 'بررسی خودکار برای بهروزرسانیها', 32 | DetectBetaversionupdates: 'شناسایی بهروزرسانیهای نسخه بتا', 33 | Pleaseupdatetothebetaversion1: 'لطفاً به نسخه بتا 1 بهروزرسانی کنید، زیرا شامل ویژگیهای آزمایشی است. این ویژگیها غیرپایدار هستند و ممکن است منجر به از دست رفتن داده شوند', 34 | Checkforupdates: 'بررسی بهروزرسانیها', 35 | Resetallconfiguration: 'بازنشانی تمام تنظیمات', 36 | Open: 'باز کردن', 37 | unmount: 'خارج کردن', 38 | protocol: 'پروتکل', 39 | mount: 'مونت', 40 | Unmounted: 'خارجشده', 41 | Clicktoopenthedisk: 'برای باز کردن دیسک کلیک کنید', 42 | Quit: 'خروج', 43 | feedback: 'بازخورد', 44 | Username: 'نام کاربری', 45 | Password: 'رمز عبور', 46 | Version: 'نسخه', 47 | Feedbackform: 'فرم بازخورد', 48 | Pleaseprovidedescription: 'لطفاً توضیحات دقیق در مورد مشکل، پیشنهاد، گزارش باگ یا سوال خود ارائه کنید تا پس از درک دقیق تقاضای شما، پاسخ موثرتری ارائه شود', 49 | Submitoperatingdata: 'ارسال دادههای عملیاتی، لاگها و اطلاعات دیگر برای کمک به درک اطلاعات دستگاه شما و بهبود برنامه ما', 50 | sendfeedback: 'ارسال بازخورد', 51 | Mounting: 'در حال مونت شدن', 52 | Automatically_mount_NTFS_disk: 'خودکار مونت کردن دیسک NTFS', 53 | NoMsg: 'پیامی وجود ندارد', 54 | OuterDisk: 'دیسک خارجی', 55 | Install: 'نصب', 56 | SystemDiskCanotUnmount: 'دیسک سیستم نمیتواند خارج شود', 57 | UnmountorMountDisk: 'خارجکردن یا مونت کردن دیسک', 58 | UnMount: 'خارج کردن', 59 | Mount: 'مونت', 60 | SystemDiskNotNeedFix: 'دیسک سیستم نیازی به تعمیر ندارد', 61 | FixDisk: 'تعمیر دیسک', 62 | Fix: 'تعمیر', 63 | Rename: 'تغییر نام', 64 | Set: 'تنظیم', 65 | About: 'درباره', 66 | NowReadonlyIfNeedWritePleaseInstallDriver: 'در حال حاضر فقط حالت فقط خواندنی، لطفاً اگر نیاز به نوشتن دارید، راننده را نصب کنید', 67 | total: 'کل', 68 | used: 'مصرف شده', 69 | available: 'در دسترس', 70 | NoMounted: 'بدون مونت شدن', 71 | MountedPoint: 'نقطه مونت شده', 72 | Readonly: 'فقط خواندنی', 73 | TotalVolume: 'حجم کل', 74 | Format: 'فرمت', 75 | HoldUser: 'کاربر نگهدارنده', 76 | Connect: 'اتصال', 77 | Device: 'دستگاه', 78 | PleaseInstallSystemKextAllow: 'لطفاً ابتدا اجازه اجرای افزونه هسته سیستمی را نصب کنید', 79 | ScanToKnowHowtoOpenSystemKextAllow: 'لطفاً یکبار دیگر تلفن همراه خود را برای مشاهده چگونگی باز کردن "اجازه اجرای افزونه هسته سیستمی" اسکن کنید، برای خاموش کردن دستگاه خود روی تایید کلیک کنید و سپس دستورالعمل را دنبال کنید', 80 | Cancel: 'لغو', 81 | Confirm: 'تایید', 82 | 83 | "system": "سیستم", 84 | "active_status": "وضعیت فعال", 85 | "actioning": "در حال اقدام", 86 | "user": "کاربر", 87 | "email": "ایمیل", 88 | "trying": "در حال تست", 89 | "actived": "فعال شده", 90 | "expired": "منقضی شده", 91 | "expiretimeto": "منقضی شدن در", 92 | "reactive": "فعالسازی مجدد", 93 | "buactivecode": "خرید کد فعالسازی", 94 | "expire_time": "زمان انقضا", 95 | "input_active_code": "ورود کد فعالسازی", 96 | "confirm_active": "تأیید فعالسازی", 97 | "delete": "حذف", 98 | "details": "جزئیات", 99 | "cancel_active": "لغو فعالسازی", 100 | "active": "فعال", 101 | "disk_name_error": "خطا در نام دیسک", 102 | "install_succ": "نصب با موفقیت انجام شد", 103 | "please_allow_action_and_system_will_start_2times": "لطفاً اجازه دهید و سیستم دو بار راهاندازی مجدد میشود.", 104 | "agree": "موافقم", 105 | "confirm_restart": "تأیید راهاندازی مجدد", 106 | "system_will_restart": "سیستم به زودی دوباره راهاندازی میشود. لطفاً تأیید کنید که چگونه مجوز افزونه را فعال میکنید.", 107 | "reinstall": "نصب مجدد", 108 | "checked_kext_sign_err": "خطا در امضای افزونه چک شد، احتمالاً اجازه اجرای افزونه غیرفعال است", 109 | "agree_text": "این برنامه افزونهی هسته ntfs مکاواس را که توسط اپل تأیید شده است نصب خواهد کرد. به دلیل نیازهای مکاواس، تنها یک افزونه برای هر قالب فایل مجاز است. موافقت به معنای انتخاب این افزونه به عنوان افزونه پیشفرض است، در عین حال افزونههای جانبی دیگر را به طور خودکار حذف/غیرفعال میکند." 110 | } -------------------------------------------------------------------------------- /lang/fr.js: -------------------------------------------------------------------------------- 1 | export default { 2 | lang_select: 'Choix de langue', 3 | preferences: 'Préférences', 4 | general: 'Général', 5 | notification: 'Notifications', 6 | ignoredisk: 'Ignorer le disque', 7 | privacy: 'Confidentialité', 8 | update: 'Mettre à jour', 9 | menu: 'Menu', 10 | activated: 'Activé', 11 | closed: 'Fermé', 12 | disable: 'Désactiver', 13 | enable: 'Activer', 14 | Followthesystemstartup: 'Suivre le démarrage du système', 15 | Howtodealwithmountingbadvolumes: 'Comment gérer les volumes défectueux', 16 | Automaticprocessing: 'Traitement automatique', 17 | Promptbeforeprocessing: 'Demander avant de traiter', 18 | Donothing: 'Ne rien faire', 19 | Howtodealwithhibernation: 'Comment gérer l’hibernation', 20 | Switchtobackground: 'Basculer en arrière-plan', 21 | Askhow: 'Demander comment gérer', 22 | Autoclose: 'Fermeture automatique', 23 | notice: 'Avis', 24 | Shownotificationswhenmountedandlaunched: "Afficher les notifications lors du montage et du lancement", 25 | Shownotificationswhenupdatesareavailable: "Afficher les notifications lorsque des mises à jour sont disponibles", 26 | Notifywhendiskvolumeisabnormal: "Notifier lorsque le volume du disque est anormal", 27 | Shownotificationswhenanupdatedversionisofficiallyavailable: 'Afficher les notifications quand une version mise à jour est officiellement disponible', 28 | Diskvolumemaybeabnormalduetoabnormaldisconnection: 'Le volume du disque peut être anormal en raison d’une déconnexion anormale', 29 | Alldatacollectedcanbeviewedintheupdatedprivacypolicy: 'Toutes les données collectées peuvent être consultées dans la politique de confidentialité mise à jour', 30 | Readtheprivacypolicy: 'Lire la politique de confidentialité', 31 | Checkforupdatesautomatically: 'Vérifier automatiquement les mises à jour', 32 | DetectBetaversionupdates: 'Détecter les mises à jour de version Beta', 33 | Pleaseupdatetothebetaversion1: 'Veuillez mettre à jour vers la version bêta avec prudence, car elle peut contenir des fonctionnalités expérimentales. Ces fonctionnalités peuvent être instables et entraîner une perte de données', 34 | Checkforupdates: 'Vérifier les mises à jour', 35 | Resetallconfiguration: 'Réinitialiser toute la configuration', 36 | Open: 'Ouvrir', 37 | unmount: 'Démonter', 38 | protocol: 'Protocole', 39 | mount: "Monter", 40 | Unmounted: "Démonté", 41 | Clicktoopenthedisk: "Cliquer pour ouvrir le disque", 42 | Quit: "Quitter", 43 | feedback: "Retour d’information", 44 | Username: "Nom d'utilisateur", 45 | Password: "Mot de passe", 46 | Version: "Version", 47 | Feedbackform: "Formulaire de retour d’information", 48 | Pleaseprovidedescription: "Veuillez fournir une description détaillée de votre problème, suggestion, rapport de bug ou question afin que nous puissions vous fournir la réponse la plus efficace après avoir compris votre demande.", 49 | Submitoperatingdata: "Soumettre des données d'exploitation, des journaux, etc., pour aider à comprendre les informations de votre appareil et à améliorer notre application", 50 | sendfeedback: "Envoyer le retour", 51 | Mounting: "Montage", 52 | Automatically_mount_NTFS_disk: "Monter automatiquement le disque NTFS", 53 | NoMsg: "Aucun message", 54 | OuterDisk: "Disque externe", 55 | Install: "Installer", 56 | SystemDiskCanotUnmount: "Le disque système ne peut pas être démonté", 57 | UnmountorMountDisk: "Démonter ou monter le disque", 58 | UnMount: "Démonter", 59 | Mount: "Monter", 60 | SystemDiskNotNeedFix: "Le disque système n'a pas besoin de réparation", 61 | FixDisk: "Réparer le disque", 62 | Fix: "Réparer", 63 | Rename: "Renommer", 64 | Set: "Régler", 65 | About: "À propos", 66 | NowReadonlyIfNeedWritePleaseInstallDriver: "Actuellement en lecture seule, si vous avez besoin d'écrire, veuillez installer le pilote", 67 | total: 'Total', 68 | used: 'Utilisé', 69 | available: 'Disponible', 70 | NoMounted: 'Non monté', 71 | MountedPoint: 'Point de montage', 72 | Readonly: "Lecture seule", 73 | TotalVolume: "Volume total", 74 | Format: "Format", 75 | HoldUser: "Propriétaire", 76 | Connect: "Connecter", 77 | Device: "Dispositif", 78 | PleaseInstallSystemKextAllow: "Veuillez d'abord installer l'autorisation d'exécution de l'extension du noyau système", 79 | ScanToKnowHowtoOpenSystemKextAllow: 'Veuillez scanner pour savoir comment activer "l’autorisation d’exécution de l’extension du noyau système", cliquer sur confirmer va éteindre votre appareil, suivez ensuite les instructions.', 80 | Cancel: "Annuler", 81 | Confirm: "Confirmer", 82 | 83 | "system": "Système", 84 | "active_status": "Statut actif", 85 | "actioning": "En cours d'action", 86 | "user": "Utilisateur", 87 | "email": "Email", 88 | "trying": "En essai", 89 | "actived": "Activé", 90 | "expired": "Expiré", 91 | "expiretimeto": "Expiration", 92 | "reactive": "Réactiver", 93 | "buactivecode": "Acheter un code d'activation", 94 | "expire_time": "Date d'expiration", 95 | "input_active_code": "Entrez le code d'activation", 96 | "confirm_active": "Confirmer l'activation", 97 | "delete": "Supprimer", 98 | "details": "Détails", 99 | "cancel_active": "Annuler l'activation", 100 | "active": "Activer", 101 | "disk_name_error": "Erreur de nom de disque", 102 | "install_succ": "Installation réussie", 103 | "please_allow_action_and_system_will_start_2times": "Veuillez autoriser l'action et le système redémarrera 2 fois.", 104 | "agree": "Accepter", 105 | "confirm_restart": "Confirmer le redémarrage", 106 | "system_will_restart": "Le système va redémarrer, veuillez confirmer que vous savez comment autoriser l'extension.", 107 | "reinstall": "Réinstaller", 108 | "checked_kext_sign_err": "Erreur de signature de l'extension, peut-être que l'autorisation pour les extensions n'est pas activée.", 109 | "agree_text": "Cette application installera une extension de noyau NTFS macOS autorisée par Apple. En raison des exigences du système macOS, une seule extension par format de fichier est autorisée. En acceptant, vous choisissez cette extension comme extension par défaut et automatiquement supprimez/désinstallez les autres extensions tierces." 110 | 111 | } -------------------------------------------------------------------------------- /lang/hi.js: -------------------------------------------------------------------------------- 1 | export default { 2 | "lang_select": "भाषा चुनें", 3 | "preferences": "प्राथमिकताएँ", 4 | "general": "सामान्य", 5 | "notification": "सूचनाएँ", 6 | "ignoredisk": "डिस्क को अनदेखा करें", 7 | "privacy": "गोपनीयता", 8 | "update": "अपडेट", 9 | "menu": "मेनू", 10 | "activated": "सक्रिय", 11 | "closed": "बंद", 12 | "disable": "अक्षम करें", 13 | "enable": "सक्षम करें", 14 | "Followthesystemstartup": "सिस्टम स्टार्टअप का पालन करें", 15 | "Howtodealwithmountingbadvolumes": "खराब वॉल्यूम माउंट करने के साथ कैसे निपटें", 16 | "Automaticprocessing": "स्वचालित प्रक्रिया", 17 | "Promptbeforeprocessing": "प्रक्रिया से पहले संकेत", 18 | "Donothing": "कुछ न करें", 19 | "Howtodealwithhibernation": "हाइबरनेशन के साथ कैसे निपटें", 20 | "Switchtobackground": "पृष्ठभूमि में जाएँ", 21 | "Askhow": "पूछें कैसे निपटें", 22 | "Autoclose": "स्वत: बंद", 23 | "notice": "नोटिस", 24 | "Shownotificationswhenmountedandlaunched": "माउंट और लॉन्च होने पर सूचनाएँ दिखाएँ", 25 | "Shownotificationswhenupdatesareavailable": "अपडेट उपलब्ध होने पर सूचनाएँ दिखाएँ", 26 | "Notifywhendiskvolumeisabnormal": "डिस्क वॉल्यूम असामान्य होने पर सूचित करें", 27 | "Shownotificationswhenanupdatedversionisofficiallyavailable": "आधिकारिक रूप से अपडेटेड वर्जन उपलब्ध होने पर सूचनाएँ दिखाएँ", 28 | "Diskvolumemaybeabnormalduetoabnormaldisconnection": "असामान्य डिस्कनेक्शन के कारण डिस्क वॉल्यूम असामान्य हो सकता है", 29 | "Alldatacollectedcanbeviewedintheupdatedprivacypolicy": "एकत्रित सभी डेटा अपडेटेड गोपनीयता नीति में देखा जा सकता है", 30 | "Readtheprivacypolicy": "गोपनीयता नीति पढ़ें", 31 | "Checkforupdatesautomatically": "स्वचालित रूप से अपडेट्स की जाँच करें", 32 | "DetectBetaversionupdates": "बीटा संस्करण अपडेट्स का पता लगाएं", 33 | "Pleaseupdatetothebetaversion1": "कृपया सावधानीपूर्वक बीटा संस्करण में अपडेट करें, क्योंकि यह प्रायोगिक सुविधाएँ शामिल करता है। ये सुविधाएँ अस्थिर हो सकती हैं और डेटा हानि का कारण बन सकती हैं।", 34 | "Checkforupdates": "अपडेट्स की जाँच करें", 35 | "Resetallconfiguration": "सभी कॉन्फ़िगरेशन रीसेट करें", 36 | "Open": "खोलें", 37 | "unmount": "अनमाउंट", 38 | "protocol": "प्रोटोकॉल", 39 | "mount": "माउंट", 40 | "Unmounted": "अनमाउंटेड", 41 | "Clicktoopenthedisk": "डिस्क खोलने के लिए क्लिक करें", 42 | "Quit": "छोड़ें", 43 | "feedback": "प्रतिक्रिया", 44 | "Username": "उपयोगकर्ता नाम", 45 | "Password": "पासवर्ड", 46 | "Version": "संस्करण", 47 | "Feedbackform": "प्रतिक्रिया फ़ॉर्म", 48 | "Pleaseprovidedescription": "कृपया अपनी समस्या, सुझाव, बग रिपोर्ट्स या प्रश्नों का विस्तृत वर्णन प्रदान करें, ताकि हम आपकी मांग को स्पष्ट समझने के बाद आपको सबसे प्रभावी उत्तर दे सकें।", 49 | "Submitoperatingdata": "अपने उपकरण की जानकारी समझने और हमारे ऐप में सुधार करने के लिए ऑपरेटिंग डेटा, लॉग इत्यादि की जानकारी सबमिट करें।", 50 | "sendfeedback": "प्रतिक्रिया भेजें", 51 | "Mounting": "माउंटिंग", 52 | "Automatically_mount_NTFS_disk": "स्वचालित रूप से NTFS डिस्क माउंट करें", 53 | "NoMsg": "कोई संदेश नहीं", 54 | "OuterDisk": "बाहरी डिस्क", 55 | "Install": "इंस्टॉल करें", 56 | "SystemDiskCanotUnmount": "सिस्टम डिस्क अनमाउंट नहीं किया जा सकता", 57 | "UnmountorMountDisk": "डिस्क अनमाउंट या माउंट करें", 58 | "UnMount": "अनमाउंट", 59 | "Mount": "माउंट", 60 | "SystemDiskNotNeedFix": "सिस्टम डिस्क की मरम्मत की आवश्यकता नहीं है", 61 | "FixDisk": "डिस्क ठीक करें", 62 | "Fix": "ठीक करें", 63 | "Rename": "नाम बदलें", 64 | "Set": "सेट करें", 65 | "About": "के बारे में", 66 | "NowReadonlyIfNeedWritePleaseInstallDriver": "अब केवल पढ़ने के लिए, यदि लिखने की आवश्यकता है तो कृपया ड्राइवर इंस्टॉल करें", 67 | "total": "कुल", 68 | "used": "इस्तेमाल किया गया", 69 | "available": "उपलब्ध", 70 | "NoMounted": "माउंट नहीं किया गया", 71 | "MountedPoint": "माउंटेड पॉइंट", 72 | "Readonly": "केवल पढ़ने के लिए", 73 | "TotalVolume": "कुल मात्रा", 74 | "Format": "प्रारूप", 75 | "HoldUser": "धारक उपयोगकर्ता", 76 | "Connect": "कनेक्ट", 77 | "Device": "डिवाइस", 78 | "PleaseInstallSystemKextAllow": "कृपया पहले सिस्टम कर्नेल एक्सटेंशन चलाने की अनुमति इंस्टॉल करें", 79 | "ScanToKnowHowtoOpenSystemKextAllow": "'सिस्टम कर्नेल एक्सटेंशन चलाने की अनुमति' कैसे खोलें यह जानने के लिए कृपया अपने मोबाइल से स्कैन करें, 'कन्फर्म' पर क्लिक करेंगे तो शटडाउन हो जाएगा, और निर्देशों का पालन करें।", 80 | "Cancel": "रद्द करें", 81 | "Confirm": "पुष्टि करें", 82 | 83 | "system": "सिस्टम", 84 | "active_status": "सक्रिय स्थिति", 85 | "actioning": "कार्रवाई में", 86 | "user": "उपयोगकर्ता", 87 | "email": "ईमेल", 88 | "trying": "प्रयास", 89 | "actived": "सक्रिय", 90 | "expired": "समाप्त", 91 | "expiretimeto": "समय सीमा", 92 | "reactive": "पुनः सक्रिय", 93 | "buactivecode": "सक्रिय कोड खरीदें", 94 | "expire_time": "समाप्ति समय", 95 | "input_active_code": "सक्रिय कोड दर्ज करें", 96 | "confirm_active": "सक्रिय की पुष्टि करें", 97 | "delete": "हटाएं", 98 | "details": "विवरण", 99 | "cancel_active": "सक्रिय रद्द करें", 100 | "active": "सक्रिय", 101 | "disk_name_error": "डिस्क नाम त्रुटि", 102 | "install_succ": "स्थापना सफल", 103 | "please_allow_action_and_system_will_start_2times": "कृपया क्रिया की अनुमति दें और सिस्टम दो बार पुनः शुरू होगा।", 104 | "agree": "सहमत", 105 | "confirm_restart": "पुनः प्रारंभ करें", 106 | "system_will_restart": "सिस्टम पुनः प्रारंभ होगा, कृपया विस्तार अनुमति कैसे शुरू करने का ज्ञान होने की पुष्टि करें।", 107 | "reinstall": "पुनः स्थापित करें", 108 | "checked_kext_sign_err": "क्षेत्रीय विस्तार के साइन की त्रुटि की जाँच की गई, संभवतः क्षेत्रीय विस्तार की अनुमति स्विच्च अक्षम है।", 109 | "agree_text": "यह एप्लिकेशन एप्पल द्वारा प्रमाणित मैकोएस एनटीएफएस कर्नेल एक्सटेंशन स्थापित करेगा। मैकोएस सिस्टम की मांग के कारण, एक ही फ़ाइल प्रारूप पर केवल एक एक्सटेंशन स्वीकृत है। सहमति देना अर्थात इस एक्सटेंशन को डिफ़ॉल्ट एक्सटेंशन के रूप में चुनना है और स्वचालित रूप से अन्य तीसरे पक्ष एक्सटेंशन को हटा देगा/अनइंस्टॉल करेगा।" 110 | 111 | } -------------------------------------------------------------------------------- /lang/id.js: -------------------------------------------------------------------------------- 1 | export default { 2 | lang_select: 'Pilih Bahasa', 3 | preferences: 'Preferensi', 4 | general: 'Umum', 5 | notification: 'Notifikasi', 6 | ignoredisk: 'Abaikan Disk', 7 | privacy: 'Privasi', 8 | update: 'Perbarui', 9 | menu: 'Menu', 10 | activated: 'Diaktifkan', 11 | closed: 'Ditutup', 12 | disable: 'Nonaktifkan', 13 | enable: 'Aktifkan', 14 | Followthesystemstartup: 'Ikuti Startup Sistem', 15 | Howtodealwithmountingbadvolumes: 'Bagaimana Menangani Volume Buruk yang Dipasang', 16 | Automaticprocessing: 'Pemrosesan Otomatis', 17 | Promptbeforeprocessing: 'Tanya Sebelum Memproses', 18 | Donothing: 'Tidak Melakukan Apa-Apa', 19 | Howtodealwithhibernation: 'Bagaimana Menangani Hibernasi', 20 | Switchtobackground: 'Beralih ke Latar Belakang', 21 | Askhow: 'Tanyakan Bagaimana', 22 | Autoclose: 'Tutup Otomatis', 23 | notice: 'Peringatan', 24 | Shownotificationswhenmountedandlaunched: 'Tampilkan Notifikasi Saat Dipasang dan Diluncurkan', 25 | Shownotificationswhenupdatesareavailable: 'Tampilkan Notifikasi Ketika Pembaruan Tersedia', 26 | Notifywhendiskvolumeisabnormal: 'Beritahu Saat Volume Disk Tidak Normal', 27 | Shownotificationswhenanupdatedversionisofficiallyavailable: 'Tampilkan Notifikasi Saat Versi Terbaru Tersedia Secara Resmi', 28 | Diskvolumemaybeabnormalduetoabnormaldisconnection: 'Volume Disk Mungkin Tidak Normal karena Putus Koneksi Tidak Normal', 29 | Alldatacollectedcanbeviewedintheupdatedprivacypolicy: 'Semua Data yang Dikumpulkan Dapat Dilihat dalam Kebijakan Privasi yang Diperbarui', 30 | Readtheprivacypolicy: 'Baca Kebijakan Privasi', 31 | Checkforupdatesautomatically: 'Periksa Pembaruan Secara Otomatis', 32 | DetectBetaversionupdates: 'Deteksi Pembaruan Versi Beta', 33 | Pleaseupdatetothebetaversion1: 'Harap Perbarui ke Versi Beta, karena Mereka Mengandung Fitur Eksperimental. Fitur Ini Tidak Stabil dan Dapat Menyebabkan Kehilangan Data', 34 | Checkforupdates: 'Periksa Pembaruan', 35 | Resetallconfiguration: 'Reset Semua Konfigurasi', 36 | Open: 'Buka', 37 | unmount: 'Lepas', 38 | protocol: 'Protokol', 39 | mount: 'Pasang', 40 | Unmounted: 'Tidak Dipasang', 41 | Clicktoopenthedisk: 'Klik Untuk Membuka Disk', 42 | Quit: 'Keluar', 43 | feedback: 'Umpan Balik', 44 | Username: 'Nama Pengguna', 45 | Password: 'Kata Sandi', 46 | Version: 'Versi', 47 | Feedbackform: 'Formulir Umpan Balik', 48 | Pleaseprovidedescription: 'Berikan Deskripsi Detail tentang Masalah Anda, Saran, Laporan Kerentanan, atau Pertanyaan Anda, agar Kami Dapat Memberikan Balasan yang Efektif', 49 | Submitoperatingdata: 'Kirim Data Operasional, Log, dan Informasi Lainnya untuk Membantu Memahami Informasi Perangkat Anda dan Meningkatkan Aplikasi Kami', 50 | sendfeedback: 'Kirim Umpan Balik', 51 | Mounting: 'Sedang Dipasang', 52 | Automatically_mount_NTFS_disk: 'Pasang Otomatis Disk NTFS', 53 | NoMsg: 'Tidak Ada', 54 | OuterDisk: 'Disk Luar', 55 | Install: 'Pasang', 56 | SystemDiskCanotUnmount: 'Disk Sistem Tidak Dapat Dilepas', 57 | UnmountorMountDisk: 'Lepas atau Pasang Disk', 58 | UnMount: 'Lepas', 59 | Mount: 'Pasang', 60 | SystemDiskNotNeedFix: 'Disk Sistem Tidak Perlu Diperbaiki', 61 | FixDisk: 'Perbaiki Disk', 62 | Fix: 'Perbaiki', 63 | Rename: 'Ganti Nama', 64 | Set: 'Atur', 65 | About: 'Tentang', 66 | NowReadonlyIfNeedWritePleaseInstallDriver: 'Sekarang Hanya Baca Saja, Jika Perlu Menulis, Silakan Instal Driver', 67 | total: 'Total', 68 | used: 'Digunakan', 69 | available: 'Tersedia', 70 | NoMounted: 'Tidak Dipasang', 71 | MountedPoint: 'Titik Dipasang', 72 | Readonly: 'Hanya Baca', 73 | TotalVolume: 'Total Volume', 74 | Format: 'Format', 75 | HoldUser: 'Pemegang', 76 | Connect: 'Hubungkan', 77 | Device: 'Perangkat', 78 | PleaseInstallSystemKextAllow: 'Harap Instal Izin Sistem Kext', 79 | ScanToKnowHowtoOpenSystemKextAllow: 'Pindai Untuk Mengetahui Cara Membuka Izin Sistem Kext, Klik Konfirmasi untuk Mematikan dan Ikuti Petunjuknya.', 80 | Cancel: 'Batal', 81 | Confirm: 'Konfirmasi', 82 | 83 | "system": "Sistem", 84 | "active_status": "Status Aktif", 85 | "actioning": "Sedang Memproses", 86 | "user": "Pengguna", 87 | "email": "Surel", 88 | "trying": "Mencoba", 89 | "actived": "Telah Aktif", 90 | "expired": "Telah Kadaluarsa", 91 | "expiretimeto": "Kadaluarsa Pada", 92 | "reactive": "Aktifkan Kembali", 93 | "buactivecode": "Beli Kode Aktif", 94 | "expire_time": "Waktu Kadaluarsa", 95 | "input_active_code": "Masukkan Kode Aktif", 96 | "confirm_active": "Konfirmasi Aktif", 97 | "delete": "Hapus", 98 | "details": "Detail", 99 | "cancel_active": "Batal Aktif", 100 | "active": "Aktifkan", 101 | "disk_name_error": "Kesalahan Nama Disk", 102 | "install_succ": "Pemasangan Berhasil", 103 | "please_allow_action_and_system_will_start_2times": "Harap izinkan tindakan dan sistem akan memulai 2 kali.", 104 | "agree": "Setuju", 105 | "confirm_restart": "Konfirmasi Restart", 106 | "system_will_restart": "Sistem akan restart, harap pastikan Anda tahu cara mengaktifkan izin ekstensi.", 107 | "reinstall": "Pasang Ulang", 108 | "checked_kext_sign_err": "Kesalahan penandaan ekstensi terdeteksi, mungkin tombol izin ekstensi tidak aktif.", 109 | "agree_text": "Aplikasi ini akan menginstal ekstensi kernel NTFS macOS yang disertifikasi oleh Apple. Karena persyaratan sistem macOS, hanya satu ekstensi per format file yang diizinkan. Dengan menyetujui, Anda memilih ekstensi ini sebagai ekstensi default dan secara otomatis menghapus/menghapuskan ekstensi pihak lainnya." 110 | 111 | } -------------------------------------------------------------------------------- /lang/index.js: -------------------------------------------------------------------------------- 1 | import ar from './ar' 2 | import bn from './bn' 3 | import de from './de' 4 | import en from './en' 5 | import es from './es' 6 | import fr from './fr' 7 | import hi from './hi' 8 | import id from './id' 9 | import it from './it' 10 | import ko from './ko' 11 | import pt from './pt' 12 | import fa from './fa' 13 | import ru from './ru' 14 | import sw from './sw' 15 | import th from './th' 16 | import tr from './tr' 17 | import vi from './vi' 18 | import zhCN from './zhCN' 19 | import zhTW from './zhTW' 20 | import ja from './ja' 21 | 22 | const languages_select = { 23 | languages: [ 24 | { text: "Arabic", val: 'ar' }, 25 | { text: "Bengali", val: 'bn' }, 26 | { text: "Deutsch", val: 'de' }, 27 | { text: "English", val: 'en' }, 28 | { text: "Espanol", val: 'es' }, 29 | { text: "French", val: 'fr' }, 30 | { text: "Hindi", val: 'hi' }, 31 | { text: "Indonesian", val: 'id' }, 32 | { text: "Italian", val: 'it' }, 33 | { text: "Korea", val: 'ko' }, 34 | { text: "Portuguese", val: 'pt' }, 35 | { text: "Persian", val: 'fa' }, 36 | { text: "Русский", val: 'ru' }, 37 | { text: "Swahili", val: 'sw' }, 38 | { text: "Thai", val: 'th' }, 39 | { text: "Turkish", val: 'tr' }, 40 | { text: "Vietnamese", val: 'vi' }, 41 | { text: "中文 (简体)", val: 'zhCN' }, 42 | { text: "中文 (繁體)", val: 'zhTW' }, 43 | { text: "日本語", val: 'ja' } 44 | ] 45 | }; 46 | 47 | export const messages = { 48 | ar: { ...ar, ...languages_select }, 49 | bn: { ...bn, ...languages_select }, 50 | de: { ...de, ...languages_select }, 51 | en: { ...en, ...languages_select }, 52 | es: { ...es, ...languages_select }, 53 | fr: { ...fr, ...languages_select }, 54 | hi: { ...hi, ...languages_select }, 55 | id: { ...id, ...languages_select }, 56 | it: { ...it, ...languages_select }, 57 | ko: { ...ko, ...languages_select }, 58 | pt: { ...pt, ...languages_select }, 59 | fa: { ...fa, ...languages_select }, 60 | ru: { ...ru, ...languages_select }, 61 | sw: { ...sw, ...languages_select }, 62 | th: { ...th, ...languages_select }, 63 | tr: { ...tr, ...languages_select }, 64 | vi: { ...vi, ...languages_select }, 65 | sw: { ...sw, ...languages_select }, 66 | zhCN: { ...zhCN, ...languages_select }, 67 | zhTW: { ...zhTW, ...languages_select }, 68 | ja: { ...ja, ...languages_select }, 69 | }; 70 | 71 | 72 | export function matchLanguage() { 73 | const userLanguage = navigator.language || navigator.userLanguage; 74 | 75 | 76 | const formattedUserLanguage = userLanguage.replace('-', ''); 77 | 78 | const matchedLanguage = languages_select.languages.find((lang) => 79 | formattedUserLanguage.toLowerCase().includes(lang.val.toLowerCase()) 80 | ); 81 | 82 | return matchedLanguage ? matchedLanguage.val : 'en'; 83 | } -------------------------------------------------------------------------------- /lang/it.js: -------------------------------------------------------------------------------- 1 | export default { 2 | "lang_select": "Selezione lingua", 3 | "preferences": "Preferenze", 4 | "general": "Generale", 5 | "notification": "Notifiche", 6 | "ignoredisk": "Ignora disco", 7 | "privacy": "Privacy", 8 | "update": "Aggiorna", 9 | "menu": "Menu", 10 | "activated": "Attivato", 11 | "closed": "Chiuso", 12 | "disable": "Disabilita", 13 | "enable": "Abilita", 14 | "Followthesystemstartup": "Segui l'avvio del sistema", 15 | "Howtodealwithmountingbadvolumes": "Come gestire i volumi danneggiati", 16 | "Automaticprocessing": "Elaborazione automatica", 17 | "Promptbeforeprocessing": "Chiedi prima di procedere", 18 | "Donothing": "Non fare nulla", 19 | "Howtodealwithhibernation": "Come gestire l'ibernazione", 20 | "Switchtobackground": "Passa in background", 21 | "Askhow": "Chiedi come procedere", 22 | "Autoclose": "Chiusura automatica", 23 | "notice": "Avviso", 24 | "Shownotificationswhenmountedandlaunched": "Mostra notifiche quando è montato e avviato", 25 | "Shownotificationswhenupdatesareavailable": "Mostra notifiche quando sono disponibili aggiornamenti", 26 | "Notifywhendiskvolumeisabnormal": "Notifica quando il volume del disco è anormale", 27 | "Shownotificationswhenanupdatedversionisofficiallyavailable": "Mostra notifiche quando è disponibile ufficialmente una versione aggiornata", 28 | "Diskvolumemaybeabnormalduetoabnormaldisconnection": "Il volume del disco potrebbe essere anormale a causa di una disconnessione anormale", 29 | "Alldatacollectedcanbeviewedintheupdatedprivacypolicy": "Tutti i dati raccolti possono essere visualizzati nella politica sulla privacy aggiornata", 30 | "Readtheprivacypolicy": "Leggi la politica sulla privacy", 31 | "Checkforupdatesautomatically": "Controlla automaticamente gli aggiornamenti", 32 | "DetectBetaversionupdates": "Rileva aggiornamenti della versione Beta", 33 | "Pleaseupdatetothebetaversion1": "Si prega di aggiornare alla versione beta con cautela, poiché potrebbe contenere funzionalità sperimentali. Queste funzionalità potrebbero essere instabili e causare la perdita di dati.", 34 | "Checkforupdates": "Controlla gli aggiornamenti", 35 | "Resetallconfiguration": "Reimposta tutte le configurazioni", 36 | "Open": "Apri", 37 | "unmount": "Smonta", 38 | "protocol": "Protocollo", 39 | "mount": "Monta", 40 | "Unmounted": "Smontato", 41 | "Clicktoopenthedisk": "Clicca per aprire il disco", 42 | "Quit": "Esci", 43 | "feedback": "Feedback", 44 | "Username": "Nome utente", 45 | "Password": "Password", 46 | "Version": "Versione", 47 | "Feedbackform": "Modulo di feedback", 48 | "Pleaseprovidedescription": "Si prega di fornire una descrizione dettagliata del problema, suggerimenti, report di bug o dubbi, in modo da poter fornire la risposta più efficace dopo aver compreso chiaramente la tua richiesta.", 49 | "Submitoperatingdata": "Invia dati operativi, log e altre informazioni per aiutare a comprendere le informazioni sul tuo dispositivo e migliorare la nostra applicazione", 50 | "sendfeedback": "Invia feedback", 51 | "Mounting": "Montaggio", 52 | "Automatically_mount_NTFS_disk": "Monta automaticamente disco NTFS", 53 | "NoMsg": "Nessun messaggio", 54 | "OuterDisk": "Disco esterno", 55 | "Install": "Installa", 56 | "SystemDiskCanotUnmount": "Il disco di sistema non può essere smontato", 57 | "UnmountorMountDisk": "Smonta o monta disco", 58 | "UnMount": "Smonta", 59 | "Mount": "Monta", 60 | "SystemDiskNotNeedFix": "Il disco di sistema non necessita di riparazione", 61 | "FixDisk": "Ripara disco", 62 | "Fix": "Ripara", 63 | "Rename": "Rinomina", 64 | "Set": "Imposta", 65 | "About": "Informazioni", 66 | "NowReadonlyIfNeedWritePleaseInstallDriver": "Attualmente in sola lettura, se necessario scrivere, si prega di installare il driver", 67 | "total": "Totale", 68 | "used": "Usato", 69 | "available": "Disponibile", 70 | "NoMounted": "Non montato", 71 | "MountedPoint": "Punto di montaggio", 72 | "Readonly": "Sola lettura", 73 | "TotalVolume": "Volume totale", 74 | "Format": "Formato", 75 | "HoldUser": "Proprietario", 76 | "Connect": "Connectti", 77 | "Device": "Dispositivo", 78 | "PleaseInstallSystemKextAllow": "Si prega di installare prima l'estensione del kernel di sistema consentita", 79 | "ScanToKnowHowtoOpenSystemKextAllow": "Scansiona per sapere come aprire 'Consenti estensione kernel di sistema', cliccando su conferma il sistema si spegnerà, segui le istruzioni.", 80 | "Cancel": "Annulla", 81 | "Confirm": "Conferma", 82 | 83 | "system": "Sistema", 84 | "active_status": "Stato attivo", 85 | "actioning": "In azione", 86 | "user": "Utente", 87 | "email": "Email", 88 | "trying": "In prova", 89 | "actived": "Attivato", 90 | "expired": "Scaduto", 91 | "expiretimeto": "Scade il", 92 | "reactive": "Riattiva", 93 | "buactivecode": "Acquista codice attivo", 94 | "expire_time": "Scadenza", 95 | "input_active_code": "Inserisci codice attivo", 96 | "confirm_active": "Conferma attivo", 97 | "delete": "Elimina", 98 | "details": "Dettagli", 99 | "cancel_active": "Annulla attivo", 100 | "active": "Attiva", 101 | "disk_name_error": "Errore nel nome del disco", 102 | "install_succ": "Installazione completata", 103 | "please_allow_action_and_system_will_start_2times": "Si prega di consentire l'azione e il sistema si avvierà 2 volte.", 104 | "agree": "Accetto", 105 | "confirm_restart": "Conferma riavvio", 106 | "system_will_restart": "Il sistema si riavvierà, si prega di confermare di sapere come abilitare l'estensione.", 107 | "reinstall": "Reinstalla", 108 | "checked_kext_sign_err": "Errore nella firma dell'estensione, potrebbe essere che l'interruttore di autorizzazione per le estensioni non sia attivo.", 109 | "agree_text": "Questa applicazione installerà un'estensione del kernel NTFS macOS autorizzata da Apple. A causa dei requisiti del sistema macOS, è consentita solo un'estensione per formato file. Accettando, si sceglie questa estensione come estensione predefinita ed elimina/disinstalla automaticamente altre estensioni di terze parti." 110 | 111 | } -------------------------------------------------------------------------------- /lang/ja.js: -------------------------------------------------------------------------------- 1 | export default { 2 | lang_select: '言語選択', 3 | preferences: '設定', 4 | general: '一般', 5 | notification: '通知', 6 | ignoredisk: 'ディスクを無視', 7 | privacy: 'プライバシー', 8 | update: 'アップデート', 9 | menu: 'メニュー', 10 | activated: '有効', 11 | closed: '閉じる', 12 | disable: '無効', 13 | enable: '有効化', 14 | Followthesystemstartup: 'システム起動に従う', 15 | Howtodealwithmountingbadvolumes: '不良ボリュームのマウント方法', 16 | Automaticprocessing: '自動処理', 17 | Promptbeforeprocessing: '処理前に確認', 18 | Donothing: '何もしない', 19 | Howtodealwithhibernation: '休止状態の処理方法', 20 | Switchtobackground: 'バックグラウンドに切り替える', 21 | Askhow: '処理方法を尋ねる', 22 | Autoclose: '自動で閉じる', 23 | notice: '通知', 24 | Shownotificationswhenmountedandlaunched: 'マウントおよび起動時に通知を表示', 25 | Shownotificationswhenupdatesareavailable: 'アップデートが利用可能なときに通知を表示', 26 | Notifywhendiskvolumeisabnormal: 'ディスクボリュームが異常なときに通知', 27 | Shownotificationswhenanupdatedversionisofficiallyavailable: '公式に更新されたバージョンが利用可能なときに通知を表示', 28 | Diskvolumemaybeabnormalduetoabnormaldisconnection: 'ディスクボリュームは異常な切断のために異常になる可能性があります', 29 | Alldatacollectedcanbeviewedintheupdatedprivacypolicy: '収集したすべてのデータは更新されたプライバシーポリシーで確認できます', 30 | Readtheprivacypolicy: 'プライバシーポリシーを読む', 31 | Checkforupdatesautomatically: '自動的にアップデートを確認', 32 | DetectBetaversionupdates: 'ベータ版のアップデートを検出', 33 | Pleaseupdatetothebetaversion1: 'ベータ版に更新してください。実験的な機能が含まれています。これらの機能は不安定であり、データの損失が発生する可能性があります', 34 | Checkforupdates: 'アップデートを確認', 35 | Resetallconfiguration: 'すべての設定をリセット', 36 | Open: '開く', 37 | unmount: 'アンマウント', 38 | protocol: 'プロトコル', 39 | mount: 'マウント', 40 | Unmounted: 'アンマウントされました', 41 | Clicktoopenthedisk: 'ディスクを開くにはクリック', 42 | Quit: '終了', 43 | feedback: 'フィードバック', 44 | Username: 'ユーザー名', 45 | Password: 'パスワード', 46 | Version: 'バージョン', 47 | Feedbackform: 'フィードバックフォーム', 48 | Pleaseprovidedescription: '問題の詳細な説明、提案、バグレポート、または質問を提供してください。これにより、要求に対する明確な理解を得て最も効果的な回答を提供できます。', 49 | Submitoperatingdata: '実行データ、ログなどの情報を提出して、デバイス情報を把握し、アプリを改善するのに役立てます', 50 | sendfeedback: 'フィードバックを送信', 51 | Mounting: 'マウント中', 52 | Automatically_mount_NTFS_disk: 'NTFSディスクを自動的にマウントする', 53 | NoMsg: 'メッセージなし', 54 | OuterDisk: '外部ディスク', 55 | Install: 'インストール', 56 | SystemDiskCanotUnmount: 'システムディスクはアンマウントできません', 57 | UnmountorMountDisk: 'ディスクのアンマウントまたはマウント', 58 | UnMount: 'アンマウント', 59 | Mount: 'マウント', 60 | SystemDiskNotNeedFix: 'システムディスクは修正の必要がありません', 61 | FixDisk: 'ディスクを修正', 62 | Fix: '修正', 63 | Rename: '名前を変更', 64 | Set: '設定', 65 | About: '情報', 66 | NowReadonlyIfNeedWritePleaseInstallDriver: '現在読み取り専用モードです。書き込みが必要な場合はドライバーをインストールしてください', 67 | total: '合計', 68 | used: '使用済み', 69 | available: '利用可能', 70 | NoMounted: '未マウント', 71 | MountedPoint: 'マウントポイント', 72 | Readonly: '読み取り専用', 73 | TotalVolume: '総容量', 74 | Format: 'フォーマット', 75 | HoldUser: '所有者', 76 | Connect: '接続', 77 | Device: 'デバイス', 78 | PleaseInstallSystemKextAllow: 'システムカーネル拡張の許可をインストールしてください', 79 | ScanToKnowHowtoOpenSystemKextAllow: 'システムカーネル拡張の許可を開く方法を確認するには、携帯電話でスキャンしてください。"システムカーネル拡張の許可"、クリックしてシャットダウンし、ガイドに従って操作してください。', 80 | Cancel: 'キャンセル', 81 | Confirm: '確認', 82 | 83 | "system": "システム", 84 | "active_status": "アクティブ状態", 85 | "actioning": "処理中", 86 | "user": "ユーザー", 87 | "email": "メールアドレス", 88 | "trying": "試用中", 89 | "actived": "アクティブ化済み", 90 | "expired": "期限切れ", 91 | "expiretimeto": "有効期限まで", 92 | "reactive": "再アクティブ化", 93 | "buactivecode": "アクティベーションコード購入", 94 | "expire_time": "期限切れ時間", 95 | "input_active_code": "アクティベーションコードを入力", 96 | "confirm_active": "アクティベーションを確認", 97 | "delete": "削除", 98 | "details": "詳細", 99 | "cancel_active": "アクティベーションをキャンセル", 100 | "active": "アクティブ", 101 | "disk_name_error": "ディスク名の形式エラー", 102 | "install_succ": "インストール成功", 103 | "please_allow_action_and_system_will_start_2times": "システムの指示に従って操作を許可してください、システムは2回再起動されます。", 104 | "agree": "同意する", 105 | "confirm_restart": "再起動を確認", 106 | "system_will_restart": "システムが再起動されます。拡張機能をどのように有効にするかを確認してください。", 107 | "reinstall": "再インストール", 108 | "checked_kext_sign_err": "拡張機能の実行署名のチェックに失敗しました。拡張機能の実行許可が有効になっていない可能性があります。", 109 | "agree_text": "このアプリケーションは、Appleが認証したmacos ntfsカーネル拡張機能をインストールします。また、macosシステム要件により、同一ファイル形式に対して1つの拡張機能のみ存在することが許可されているため、同意することはこの拡張機能をデフォルトとして選択し、他の拡張機能を自動的に削除/アンインストールすることを意味します。" 110 | } -------------------------------------------------------------------------------- /lang/ko.js: -------------------------------------------------------------------------------- 1 | export default { 2 | lang_select: '언어 선택', 3 | preferences: '환경 설정', 4 | general: '일반', 5 | notification: '알림', 6 | ignoredisk: '디스크 무시', 7 | privacy: '개인 정보', 8 | update: '업데이트', 9 | menu: '메뉴', 10 | activated: '활성화됨', 11 | closed: '닫힘', 12 | disable: '비활성화', 13 | enable: '활성화', 14 | Followthesystemstartup: '시스템 시작에 따름', 15 | Howtodealwithmountingbadvolumes: '마운트된 나쁜 볼륨 처리 방법', 16 | Automaticprocessing: '자동 처리', 17 | Promptbeforeprocessing: '처리 전 안내', 18 | Donothing: '아무것도 안 함', 19 | Howtodealwithhibernation: '절전 모드 처리 방법', 20 | Switchtobackground: '백그라운드로 전환', 21 | Askhow: '어떻게 할지 묻기', 22 | Autoclose: '자동 닫기', 23 | notice: '알림', 24 | Shownotificationswhenmountedandlaunched: '마운트 및 시작 시 알림 표시', 25 | Shownotificationswhenupdatesareavailable: '업데이트 가능 시 알림 표시', 26 | Notifywhendiskvolumeisabnormal: '디스크 볼륨이 비정상일 때 알림', 27 | Shownotificationswhenanupdatedversionisofficiallyavailable: '새로운 버전 업데이트 공식 알림', 28 | Diskvolumemaybeabnormalduetoabnormaldisconnection: '비정상적인 연결로 인해 디스크 볼륨이 비정상일 수 있음', 29 | Alldatacollectedcanbeviewedintheupdatedprivacypolicy: '수집된 모든 데이터는 최신 개인 정보 정책에서 확인할 수 있음', 30 | Readtheprivacypolicy: '개인 정보 정책 읽기', 31 | Checkforupdatesautomatically: '자동 업데이트 확인', 32 | DetectBetaversionupdates: '베타 버전 업데이트 감지', 33 | Pleaseupdatetothebetaversion1: '실험 기능이 포함된 베타 버전에 주의하세요. 이러한 기능은 불안정하며 데이터 손실이 발생할 수 있습니다', 34 | Checkforupdates: '업데이트 확인', 35 | Resetallconfiguration: '모든 설정 초기화', 36 | Open: '열기', 37 | unmount: '마운트 해제', 38 | protocol: '프로토콜', 39 | mount: '마운트', 40 | Unmounted: '마운트 해제됨', 41 | Clicktoopenthedisk: '디스크 열기', 42 | Quit: '종료', 43 | feedback: '피드백', 44 | Username: '사용자 이름', 45 | Password: '비밀번호', 46 | Version: '버전', 47 | Feedbackform: '피드백 양식', 48 | Pleaseprovidedescription: '문제에 대한 자세한 설명, 제안, 취약점 보고 또는 질문을 제공하여 명확한 답변을 얻을 수 있도록 해 주세요', 49 | Submitoperatingdata: '운영 데이터, 로그 등을 제출하여 기기 정보를 이해하고 앱을 개선하는 데 도움을 줄 수 있습니다', 50 | sendfeedback: '피드백 보내기', 51 | Mounting: '마운팅 중', 52 | Automatically_mount_NTFS_disk: '자동으로 NTFS 디스크 마운트', 53 | NoMsg: '메시지 없음', 54 | OuterDisk: '외부 디스크', 55 | Install: '설치', 56 | SystemDiskCanotUnmount: '시스템 디스크를 마운트 해제할 수 없습니다', 57 | UnmountorMountDisk: '디스크 마운트 또는 마운트 해제', 58 | UnMount: '마운트 해제', 59 | Mount: '마운트', 60 | SystemDiskNotNeedFix: '시스템 디스크를 수정할 필요가 없습니다', 61 | FixDisk: '디스크 수정', 62 | Fix: '수정', 63 | Rename: '이름 바꾸기', 64 | Set: '설정', 65 | About: '정보', 66 | NowReadonlyIfNeedWritePleaseInstallDriver: '현재 읽기 전용 모드이므로 쓰기가 필요한 경우 드라이버를 설치해 주세요', 67 | total: '총량', 68 | used: '사용함', 69 | available: '사용 가능', 70 | NoMounted: '마운트되지 않음', 71 | MountedPoint: '마운트 지점', 72 | Readonly: '읽기 전용', 73 | TotalVolume: '총 볼륨', 74 | Format: '포맷', 75 | HoldUser: '소유자', 76 | Connect: '연결', 77 | Device: '장치', 78 | PleaseInstallSystemKextAllow: '시스템 Kext 설치 권한 부탁드립니다', 79 | ScanToKnowHowtoOpenSystemKextAllow: '"시스템 Kext 실행 권한"을 열기 위한 방법을 확인하려면 휴대전화로 스캔하십시오. 확인을 클릭하면 종료되고 안내에 따라 조치하십시오', 80 | Cancel: '취소', 81 | Confirm: '확인', 82 | 83 | "system": "시스템", 84 | "active_status": "활성 상태", 85 | "actioning": "작업 중", 86 | "user": "사용자", 87 | "email": "이메일", 88 | "trying": "시도 중", 89 | "actived": "활성화됨", 90 | "expired": "만료됨", 91 | "expiretimeto": "만료 시간", 92 | "reactive": "재활성화", 93 | "buactivecode": "활성화 코드 구매", 94 | "expire_time": "만료 시간", 95 | "input_active_code": "활성화 코드 입력", 96 | "confirm_active": "활성화 확인", 97 | "delete": "삭제", 98 | "details": "세부 정보", 99 | "cancel_active": "활성 취소", 100 | "active": "활성화", 101 | "disk_name_error": "디스크 이름 오류", 102 | "install_succ": "설치 완료", 103 | "please_allow_action_and_system_will_start_2times": "작업을 허용하고 시스템이 2 번 다시 시작됩니다.", 104 | "agree": "동의", 105 | "confirm_restart": "재시작 확인", 106 | "system_will_restart": "시스템이 다시 시작됩니다. 확장 허용 방법을 알고 있는지 확인하십시오.", 107 | "reinstall": "재설치", 108 | "checked_kext_sign_err": "확장 서명 오류가 감지되었습니다. 확장 허용 스위치가 비활성화되어 있을 수 있습니다.", 109 | "agree_text": "이 응용 프로그램은 Apple에서 인증 한 macOS NTFS 커널 확장을 설치합니다. macOS 시스템 요구 사항으로 인해 파일 형식당 하나의 확장 만 허용됩니다. 동의하면이 확장을 기본 확장으로 선택하고 다른 제 3자 확장을 자동으로 삭제/제거합니다." 110 | 111 | } -------------------------------------------------------------------------------- /lang/pt.js: -------------------------------------------------------------------------------- 1 | export default { 2 | lang_select: 'Seleção de Idioma', 3 | preferences: 'Preferências', 4 | general: 'Geral', 5 | notification: 'Notificação', 6 | ignoredisk: 'Ignorar Disco', 7 | privacy: 'Privacidade', 8 | update: 'Atualizar', 9 | menu: 'Menu', 10 | activated: 'Ativado', 11 | closed: 'Fechado', 12 | disable: 'Desativar', 13 | enable: 'Ativar', 14 | Followthesystemstartup: 'Seguir Inicialização do Sistema', 15 | Howtodealwithmountingbadvolumes: 'Como Lidar com Volumes Ruins em Montagem', 16 | Automaticprocessing: 'Processamento Automático', 17 | Promptbeforeprocessing: 'Perguntar Antes do Processamento', 18 | Donothing: 'Não Fazer Nada', 19 | Howtodealwithhibernation: 'Como Lidar com a Hibernação', 20 | Switchtobackground: 'Alternar para o Fundo', 21 | Askhow: 'Perguntar Como', 22 | Autoclose: 'Fechar Automaticamente', 23 | notice: 'Aviso', 24 | Shownotificationswhenmountedandlaunched: 'Mostrar Notificações ao Ser Montado e Iniciado', 25 | Shownotificationswhenupdatesareavailable: 'Mostrar Notificações Quando Atualizações Estiverem Disponíveis', 26 | Notifywhendiskvolumeisabnormal: 'Notificar Quando o Volume do Disco Estiver Anormal', 27 | Shownotificationswhenanupdatedversionisofficiallyavailable: 'Mostrar Notificações Quando uma Versão Atualizada Estiver Disponível Oficialmente', 28 | Diskvolumemaybeabnormalduetoabnormaldisconnection: 'O Volume do Disco Pode Estar Anormal devido a uma Desconexão Anormal', 29 | Alldatacollectedcanbeviewedintheupdatedprivacypolicy: 'Todos os Dados Coletados Podem ser Visualizados na Política de Privacidade Atualizada', 30 | Readtheprivacypolicy: 'Ler a Política de Privacidade', 31 | Checkforupdatesautomatically: 'Verificar Atualizações Automaticamente', 32 | DetectBetaversionupdates: 'Detectar Atualizações da Versão Beta', 33 | Pleaseupdatetothebetaversion1: 'Por favor, Atualize para a Versão Beta com Cuidado, pois Elas Contêm Recursos Experimentais. Esses Recursos são Instáveis e Podem Causar Perda de Dados', 34 | Checkforupdates: 'Verificar Atualizações', 35 | Resetallconfiguration: 'Redefinir Todas as Configurações', 36 | Open: 'Abrir', 37 | unmount: 'Desmontar', 38 | protocol: 'Protocolo', 39 | mount: 'Montar', 40 | Unmounted: 'Desmontado', 41 | Clicktoopenthedisk: 'Clique para Abrir o Disco', 42 | Quit: 'Sair', 43 | feedback: 'Feedback', 44 | Username: 'Nome de Usuário', 45 | Password: 'Senha', 46 | Version: 'Versão', 47 | Feedbackform: 'Formulário de Feedback', 48 | Pleaseprovidedescription: 'Forneça uma Descrição Detalhada do seu Problema, Sugestão, Relatório de Vulnerabilidade ou sua Pergunta, para que possamos dar a resposta mais eficaz', 49 | Submitoperatingdata: 'Envie Dados de Operação, Logs, etc., para nos Ajudar a Entender as Informações do seu Dispositivo e Melhorar nosso Aplicativo', 50 | sendfeedback: 'Enviar Feedback', 51 | Mounting: 'Montando', 52 | Automatically_mount_NTFS_disk: 'Montar Automaticamente Disco NTFS', 53 | NoMsg: 'Sem Mensagem', 54 | OuterDisk: 'Disco Externo', 55 | Install: 'Instalar', 56 | SystemDiskCanotUnmount: 'Disco do Sistema Não Pode ser Desmontado', 57 | UnmountorMountDisk: 'Desmontar ou Montar Disco', 58 | UnMount: 'Desmontar', 59 | Mount: 'Montar', 60 | SystemDiskNotNeedFix: 'Disco do Sistema Não Precisa de Reparo', 61 | FixDisk: 'Reparar Disco', 62 | Fix: 'Reparar', 63 | Rename: 'Renomear', 64 | Set: 'Configurar', 65 | About: 'Sobre', 66 | NowReadonlyIfNeedWritePleaseInstallDriver: 'Agora Somente Leitura. Se Precisar Escrever, por Favor, Instale o Driver', 67 | total: 'Total', 68 | used: 'Usado', 69 | available: 'Disponível', 70 | NoMounted: 'Não Montado', 71 | MountedPoint: 'Ponto de Montagem', 72 | Readonly: 'Somente Leitura', 73 | TotalVolume: 'Volume Total', 74 | Format: 'Formato', 75 | HoldUser: 'Usuário Principal', 76 | Connect: 'Conectar', 77 | Device: 'Dispositivo', 78 | PleaseInstallSystemKextAllow: 'Por Favor, Instale a Permissão de Execução do Kernel do Sistema', 79 | ScanToKnowHowtoOpenSystemKextAllow: 'Digitalize para Saber Como Abrir a Permissão de Execução do Kernel do Sistema. Clique em Confirmar para Desligar e Siga as Instruções.', 80 | Cancel: 'Cancelar', 81 | Confirm: 'Confirmar', 82 | 83 | "system": "Sistema", 84 | "active_status": "Estado Ativo", 85 | "actioning": "Em Ação", 86 | "user": "Usuário", 87 | "email": "E-mail", 88 | "trying": "Em Teste", 89 | "actived": "Ativo", 90 | "expired": "Expirado", 91 | "expiretimeto": "Expira em", 92 | "reactive": "Reativar", 93 | "buactivecode": "Comprar Código de Ativação", 94 | "expire_time": "Tempo de Expiração", 95 | "input_active_code": "Inserir Código de Ativação", 96 | "confirm_active": "Confirmar Ativação", 97 | "delete": "Excluir", 98 | "details": "Detalhes", 99 | "cancel_active": "Cancelar Ativação", 100 | "active": "Ativar", 101 | "disk_name_error": "Erro no Nome do Disco", 102 | "install_succ": "Instalação Concluída", 103 | "please_allow_action_and_system_will_start_2times": "Por favor, permita a ação e o sistema reiniciará duas vezes.", 104 | "agree": "Concordar", 105 | "confirm_restart": "Confirmar Reinício", 106 | "system_will_restart": "O sistema será reiniciado. Por favor, confirme que sabe como permitir a extensão.", 107 | "reinstall": "Reinstalar", 108 | "checked_kext_sign_err": "Erro de Assinatura da Extensão Verificado. Pode ser que a permissão da extensão não esteja ativada.", 109 | "agree_text": "Este aplicativo instalará a extensão do kernel ntfs do macOS, autenticada pela Apple. Devido às exigências do macOS, apenas uma extensão por formato de arquivo é permitida. Concordar implica na escolha desta extensão como padrão, enquanto automaticamente remove/desinstala extensões de terceiros." 110 | } -------------------------------------------------------------------------------- /lang/ru.js: -------------------------------------------------------------------------------- 1 | export default { 2 | lang_select: 'Выбор языка', 3 | preferences: 'Настройки', 4 | general: 'Общие', 5 | notification: 'Уведомление', 6 | ignoredisk: 'Игнорировать диск', 7 | privacy: 'Конфиденциальность', 8 | update: 'Обновление', 9 | menu: 'Меню', 10 | activated: 'Активировано', 11 | closed: 'Закрыто', 12 | disable: 'Отключить', 13 | enable: 'Включить', 14 | Followthesystemstartup: 'Следовать за запуском системы', 15 | Howtodealwithmountingbadvolumes: 'Как обрабатывать монтирование плохих томов', 16 | Automaticprocessing: 'Автоматическая обработка', 17 | Promptbeforeprocessing: 'Запрос перед обработкой', 18 | Donothing: 'Ничего не делать', 19 | Howtodealwithhibernation: 'Как обрабатывать гибернацию', 20 | Switchtobackground: 'Переключиться в фоновый режим', 21 | Askhow: 'Спросить как', 22 | Autoclose: 'Автоматически закрыть', 23 | notice: 'Уведомление', 24 | Shownotificationswhenmountedandlaunched: 'Показывать уведомления при монтировании и запуске', 25 | Shownotificationswhenupdatesareavailable: 'Показывать уведомления, когда доступны обновления', 26 | Notifywhendiskvolumeisabnormal: 'Уведомлять, когда объем диска ненормален', 27 | Shownotificationswhenanupdatedversionisofficiallyavailable: 'Показывать уведомления, когда доступна обновленная версия официально', 28 | Diskvolumemaybeabnormalduetoabnormaldisconnection: 'Объем диска может быть аномальным из-за аномального отключения', 29 | Alldatacollectedcanbeviewedintheupdatedprivacypolicy: 'Вся собранная информация может быть просмотрена в обновленной политике конфиденциальности', 30 | Readtheprivacypolicy: 'Прочитать политику конфиденциальности', 31 | Checkforupdatesautomatically: 'Проверять обновления автоматически', 32 | DetectBetaversionupdates: 'Обнаруживать обновления бета-версии', 33 | Pleaseupdatetothebetaversion1: 'Пожалуйста, обновитесь до бета-версии 1, поскольку она содержит экспериментальные функции. Эти функции нестабильны и могут привести к потере данных', 34 | Checkforupdates: 'Проверить наличие обновлений', 35 | Resetallconfiguration: 'Сбросить все настройки', 36 | Open: 'Открыть', 37 | unmount: 'Отключить', 38 | protocol: 'Протокол', 39 | mount: 'Монтировать', 40 | Unmounted: 'Отключено', 41 | Clicktoopenthedisk: 'Нажмите, чтобы открыть диск', 42 | Quit: 'Выход', 43 | feedback: 'Обратная связь', 44 | Username: 'Имя пользователя', 45 | Password: 'Пароль', 46 | Version: 'Версия', 47 | Feedbackform: 'Форма обратной связи', 48 | Pleaseprovidedescription: 'Пожалуйста, предоставьте подробное описание вашей проблемы, предложения, отчет о баге или ваши вопросы, чтобы мы могли дать вам наиболее эффективный ответ после ясного понимания вашего запроса', 49 | Submitoperatingdata: 'Отправить данные об использовании, журналы и другую информацию, чтобы помочь понять информацию о вашем устройстве и улучшить наше приложение', 50 | sendfeedback: 'Отправить обратную связь', 51 | Mounting: 'Монтирование', 52 | Automatically_mount_NTFS_disk: 'Автоматически монтировать диск NTFS', 53 | NoMsg: 'Нет сообщений', 54 | OuterDisk: 'Внешний диск', 55 | Install: 'Установить', 56 | SystemDiskCanotUnmount: 'Системный диск не может быть отключен', 57 | UnmountorMountDisk: 'Отключить или монтировать диск', 58 | UnMount: 'Отключить', 59 | Mount: 'Монтировать', 60 | SystemDiskNotNeedFix: 'Системный диск не нуждается в исправлении', 61 | FixDisk: 'Исправить диск', 62 | Fix: 'Исправить', 63 | Rename: 'Переименовать', 64 | Set: 'Настройка', 65 | About: 'О', 66 | NowReadonlyIfNeedWritePleaseInstallDriver: 'Сейчас только для чтения. Если вам нужна запись, установите драйвер', 67 | total: 'Всего', 68 | used: 'Использовано', 69 | available: 'Доступно', 70 | NoMounted: 'Не монтировано', 71 | MountedPoint: 'Точка монтирования', 72 | Readonly: 'Только для чтения', 73 | TotalVolume: 'Общий объем', 74 | Format: 'Формат', 75 | HoldUser: 'Владелец', 76 | Connect: 'Подключение', 77 | Device: 'Устройство', 78 | PleaseInstallSystemKextAllow: 'Пожалуйста, установите системное расширение ядра для разрешения выполнения', 79 | ScanToKnowHowtoOpenSystemKextAllow: 'Пожалуйста, отсканируйте, чтобы узнать, как открыть "Разрешение выполнения системного расширения ядра". Нажмите подтвердить, чтобы выключить, и следуйте инструкциям.', 80 | Cancel: 'Отмена', 81 | Confirm: 'Подтвердить', 82 | 83 | "system": "Система", 84 | "active_status": "Активный статус", 85 | "actioning": "Выполняется", 86 | "user": "Пользователь", 87 | "email": "Электронная почта", 88 | "trying": "Испытание", 89 | "actived": "Активирован", 90 | "expired": "Истек срок", 91 | "expiretimeto": "Истекает", 92 | "reactive": "Повторная активация", 93 | "buactivecode": "Купить код активации", 94 | "expire_time": "Срок действия истекает", 95 | "input_active_code": "Введите код активации", 96 | "confirm_active": "Подтвердить активацию", 97 | "delete": "Удалить", 98 | "details": "Детали", 99 | "cancel_active": "Отменить активацию", 100 | "active": "Активировать", 101 | "disk_name_error": "Ошибка имени диска", 102 | "install_succ": "Установка завершена успешно", 103 | "please_allow_action_and_system_will_start_2times": "Пожалуйста, разрешите действие, и система перезагрузится дважды.", 104 | "agree": "Согласиться", 105 | "confirm_restart": "Подтвердить перезагрузку", 106 | "system_will_restart": "Система будет перезагружена. Пожалуйста, подтвердите, что вы знаете, как разрешить расширение.", 107 | "reinstall": "Переустановить", 108 | "checked_kext_sign_err": "Обнаружена ошибка подписи расширения, возможно, разрешение на запуск расширения не включено", 109 | "agree_text": "Это приложение установит ядреное расширение ntfs macOS, авторизованное Apple. В соответствии с требованиями macOS разрешено наличие только одного расширения для одного формата файла. Согласие подразумевает выбор этого расширения в качестве расширения по умолчанию, а также автоматическое удаление/деинсталляцию сторонних расширений." 110 | } -------------------------------------------------------------------------------- /lang/sw.js: -------------------------------------------------------------------------------- 1 | export default { 2 | lang_select: 'Chagua Lugha', 3 | preferences: 'Mapendeleo', 4 | general: 'Jumla', 5 | notification: 'Taarifa', 6 | ignoredisk: 'Puuza Diski', 7 | privacy: 'Faragha', 8 | update: 'Sasisha', 9 | menu: 'Menyu', 10 | activated: 'Imewashwa', 11 | closed: 'Imefungwa', 12 | disable: 'Zima', 13 | enable: 'Washa', 14 | Followthesystemstartup: 'Fuata Kuanza Kwa Mfumo', 15 | Howtodealwithmountingbadvolumes: 'Jinsi ya Kushughulikia Kufunga Vyanzo Vibaya', 16 | Automaticprocessing: 'Usindikaji wa Kiotomatiki', 17 | Promptbeforeprocessing: 'Onyo Kabla ya Kusindika', 18 | Donothing: 'Usifanye chochote', 19 | Howtodealwithhibernation: 'Jinsi ya Kushughulikia Kusinzia', 20 | Switchtobackground: 'Badili kwenye Hali ya Mandharinyuma', 21 | Askhow: 'Uliza Jinsi', 22 | Autoclose: 'Funga Kiotomatiki', 23 | notice: 'Taarifa', 24 | Shownotificationswhenmountedandlaunched: 'Onyesha Taarifa Unapotumia na Kuzindua', 25 | Shownotificationswhenupdatesareavailable: 'Onyesha Taarifa Unapopatikana Sasisho', 26 | Notifywhendiskvolumeisabnormal: 'Taarifa Unapofunguwa Diski ni Si ya Kawaida', 27 | Shownotificationswhenanupdatedversionisofficiallyavailable: 'Onyesha Taarifa Unapopatikana Toleo Jipya Rasmi', 28 | Diskvolumemaybeabnormalduetoabnormaldisconnection: 'Kiasi cha Diski kinaweza kuwa sio cha Kawaida kutokana na Ukatizi wa Sio wa Kawaida', 29 | Alldatacollectedcanbeviewedintheupdatedprivacypolicy: 'Data yote iliyokusanywa inaweza kuonekana katika Sera mpya ya Faragha', 30 | Readtheprivacypolicy: 'Soma Sera ya Faragha', 31 | Checkforupdatesautomatically: 'Angalia Sasisho kiotomatiki', 32 | DetectBetaversionupdates: 'Gundua Sasisho la Toleo la Beta', 33 | Pleaseupdatetothebetaversion1: 'Tafadhali Sasaisha kwa Toleo la Beta kwa uangalifu, kwani lina vipengele vya majaribio. Vipengele hivi sio thabiti na vinaweza kusababisha upotezaji wa data', 34 | Checkforupdates: 'Angalia Sasisho', 35 | Resetallconfiguration: 'Rejesha Mipangilio Yote', 36 | Open: 'Fungua', 37 | unmount: 'Ondoa', 38 | protocol: 'Itifaki', 39 | mount: 'Funga', 40 | Unmounted: 'Haijafungwa', 41 | Clicktoopenthedisk: 'Bonyeza kufungua Diski', 42 | Quit: 'Acha', 43 | feedback: 'Mrejesho', 44 | Username: 'Jina la Mtumiaji', 45 | Password: 'Nenosiri', 46 | Version: 'Toleo', 47 | Feedbackform: 'Fomu ya Mrejesho', 48 | Pleaseprovidedescription: 'Tafadhali toa maelezo kuhusu tatizo lako, mapendekezo, ripoti za kasoro au maswali yako ili tuweze kutoa jibu sahihi kwako', 49 | Submitoperatingdata: 'Wasilisha data ya uendeshaji, logi na habari nyingine ili kusaidia kuelewa vifaa vyako na kuboresha programu yetu', 50 | sendfeedback: 'Tuma Mrejesho', 51 | Mounting: 'Inafungwa', 52 | Automatically_mount_NTFS_disk: 'Funga Diski ya NTFS kiotomatiki', 53 | NoMsg: 'Hakuna Ujumbe', 54 | OuterDisk: 'Diski ya Nje', 55 | Install: 'Sakinisha', 56 | SystemDiskCanotUnmount: 'Diski ya Mfumo Haiwezi Kufungwa', 57 | UnmountorMountDisk: 'Ondoa au Funga Diski', 58 | UnMount: 'Ondoa', 59 | Mount: 'Funga', 60 | SystemDiskNotNeedFix: 'Diski ya Mfumo Haitaji Kurekebishwa', 61 | FixDisk: 'Rekebisha Diski', 62 | Fix: 'Rekebisha', 63 | Rename: 'Badilisha Jina', 64 | Set: 'Weka', 65 | About: 'Kuhusu', 66 | NowReadonlyIfNeedWritePleaseInstallDriver: 'Sasa Ni Kusoma tu, Tafadhali Sakinisha Dereva Ikiwa Unahitaji Kuandika', 67 | total: 'Jumla', 68 | used: 'Imetumika', 69 | available: 'Inapatikana', 70 | NoMounted: 'Haijafungwa', 71 | MountedPoint: 'Mahali pa Kufungwa', 72 | Readonly: 'Kusoma tu', 73 | TotalVolume: 'Kiasi Jumla', 74 | Format: 'Muundo', 75 | HoldUser: 'Mmiliki', 76 | Connect: 'unganisha', 77 | Device: 'Kifaa', 78 | PleaseInstallSystemKextAllow: 'Tafadhali Sakinisha Kibali cha Mfumo wa Kext', 79 | ScanToKnowHowtoOpenSystemKextAllow: 'Tafadhali piga simu ya kiotomatiki kujua jinsi ya kufungua "Kibali cha Mfumo wa Kext", bofya kuthibitisha kuzima na fuata maelekezo.', 80 | Cancel: 'Ghairi', 81 | Confirm: 'Thibitisha', 82 | 83 | "system": "Mfumo", 84 | "active_status": "Hali ya Kuwasha", 85 | "actioning": "Inatekelezwa", 86 | "user": "Mtumiaji", 87 | "email": "Barua pepe", 88 | "trying": "Kujaribu", 89 | "actived": "Imewashwa", 90 | "expired": "Imeisha Muda", 91 | "expiretimeto": "Muda wa Muda", 92 | "reactive": "Kuwasha tena", 93 | "buactivecode": "Nunua Nambari ya Kuwasha", 94 | "expire_time": "Muda wa Mwisho", 95 | "input_active_code": "Ingiza Nambari ya Kuwasha", 96 | "confirm_active": "Thibitisha Kuwasha", 97 | "delete": "Futa", 98 | "details": "Maelezo", 99 | "cancel_active": "Ghairi Kuwasha", 100 | "active": "Washa", 101 | "disk_name_error": "Kosa la Jina la Gari", 102 | "install_succ": "Imewekwa Kwa Mafanikio", 103 | "please_allow_action_and_system_will_start_2times": "Tafadhali ruhusu hatua na mfumo utaanza upya mara mbili.", 104 | "agree": "Kubaliana", 105 | "confirm_restart": "Thibitisha Kuanzisha tena", 106 | "system_will_restart": "Mfumo utaanza upya hivi karibuni. Tafadhali thibitisha kwamba unajua jinsi ya kuruhusu upanuzi.", 107 | "reinstall": "Sakinisha tena", 108 | "checked_kext_sign_err": "Kosa la Kusainiwa kwa Kigeni lilichunguzwa, inawezekana ruhusa ya kukimbia haijaamilishwa", 109 | "agree_text": "Programu hii itasakinisha nyongeza ya msingi ya ntfs ya macOS, iliyo thibitishwa na Apple. Kulingana na mahitaji ya macOS, inaruhusiwa kuwa na nyongeza moja tu kwa muundo wa faili. Kukubali kunamaanisha kuchagua nyongeza hii kama chaguo-msingi, wakati huo huo kuondoa/kufuta kiotomatiki nyongeza za tatu." 110 | 111 | } -------------------------------------------------------------------------------- /lang/th.js: -------------------------------------------------------------------------------- 1 | export default { 2 | lang_select: 'การเลือกภาษา', 3 | preferences: 'การตั้งค่า', 4 | general: 'ทั่วไป', 5 | notification: 'การแจ้งเตือน', 6 | ignoredisk: 'ละเว้นดิสก์', 7 | privacy: 'ความเป็นส่วนตัว', 8 | update: 'อัปเดต', 9 | menu: 'เมนู', 10 | activated: 'เปิดใช้งานแล้ว', 11 | closed: 'ปิดแล้ว', 12 | disable: 'ปิดใช้งาน', 13 | enable: 'เปิดใช้งาน', 14 | Followthesystemstartup: 'ติดตามการเริ่มต้นของระบบ', 15 | Howtodealwithmountingbadvolumes: 'วิธีการจัดการกับการติดตั้งปริมาณที่ผิด', 16 | Automaticprocessing: 'การประมวลผลอัตโนมัติ', 17 | Promptbeforeprocessing: 'แจ้งเตือนก่อนการประมวลผล', 18 | Donothing: 'ไม่ทำอะไร', 19 | Howtodealwithhibernation: 'วิธีการจัดการกับการหลับ', 20 | Switchtobackground: 'สลับไปยังพื้นหลัง', 21 | Askhow: 'ถามว่าจะทำอย่างไร', 22 | Autoclose: 'ปิดอัตโนมัติ', 23 | notice: 'ประกาศ', 24 | Shownotificationswhenmountedandlaunched: 'แสดงการแจ้งเตือนเมื่อติดตั้งและเริ่มใช้งาน', 25 | Shownotificationswhenupdatesareavailable: 'แสดงการแจ้งเตือนเมื่อมีการอัปเดตที่พร้อมใช้งาน', 26 | Notifywhendiskvolumeisabnormal: 'แจ้งเตือนเมื่อปริมาณดิสก์ผิดปกติ', 27 | Shownotificationswhenanupdatedversionisofficiallyavailable: 'แสดงการแจ้งเตือนเมื่อมีเวอร์ชันอัปเดตที่พร้อมใช้งานอย่างเป็นทางการ', 28 | Diskvolumemaybeabnormalduetoabnormaldisconnection: 'ปริมาณดิสก์อาจผิดปกติเนื่องจากการตัดการเชื่อมต่อที่ผิดปกติ', 29 | Alldatacollectedcanbeviewedintheupdatedprivacypolicy: 'ข้อมูลทั้งหมดที่เก็บรวบรวมสามารถดูได้ในนโยบายความเป็นส่วนตัวที่อัปเดต', 30 | Readtheprivacypolicy: 'อ่านนโยบายความเป็นส่วนตัว', 31 | Checkforupdatesautomatically: 'ตรวจสอบการอัปเดตโดยอัตโนมัติ', 32 | DetectBetaversionupdates: 'ตรวจจับการอัปเดตเวอร์ชันเบต้า', 33 | Pleaseupdatetothebetaversion1: 'โปรดอัปเดตเป็นเวอร์ชันเบต้า 1 อย่างระมัดระวังเนื่องจากมีคุณลักษณะทดลอง คุณลักษณะเหล่านี้ไม่เสถียรและอาจทำให้ข้อมูลสูญหาย', 34 | Checkforupdates: 'ตรวจสอบการอัปเดต', 35 | Resetallconfiguration: 'รีเซ็ตการกำหนดค่าทั้งหมด', 36 | Open: 'เปิด', 37 | unmount: 'ยกเลิกการติดตั้ง', 38 | protocol: 'โปรโตคอล', 39 | mount: 'ติดตั้ง', 40 | Unmounted: 'ไม่ได้ติดตั้ง', 41 | Clicktoopenthedisk: 'คลิกเพื่อเปิดดิสก์', 42 | Quit: 'ออก', 43 | feedback: 'ข้อเสนอแนะ', 44 | Username: 'ชื่อผู้ใช้', 45 | Password: 'รหัสผ่าน', 46 | Version: 'เวอร์ชัน', 47 | Feedbackform: 'แบบฟอร์มข้อเสนอแนะ', 48 | Pleaseprovidedescription: 'โปรดให้คำอธิบายเกี่ยวกับปัญหาของคุณ คำแนะนำ รายงานข้อบกพร่องหรือคำถามของคุณเพื่อให้เราเข้าใจความต้องการของคุณอย่างชัดเจนก่อนที่จะให้คำตอบที่มีประสิทธิภาพที่สุดแก่คุณ', 49 | Submitoperatingdata: 'ส่งข้อมูลการทำงาน บันทึกและข้อมูลอื่น ๆ เพื่อช่วยให้เรารู้จักเครื่องของคุณและปรับปรุงแอปของเรา', 50 | sendfeedback: 'ส่งข้อเสนอแนะ', 51 | Mounting: 'กำลังติดตั้ง', 52 | Automatically_mount_NTFS_disk: 'ติดตั้งดิสก์ NTFS โดยอัตโนมัติ', 53 | NoMsg: 'ไม่มีข้อความ', 54 | OuterDisk: 'ดิสก์ภายนอก', 55 | Install: 'ติดตั้ง', 56 | SystemDiskCanotUnmount: 'ไม่สามารถยกเลิกการติดตั้งดิสก์ระบบ', 57 | UnmountorMountDisk: 'ยกเลิกการติดตั้งหรือติดตั้งดิสก์', 58 | UnMount: 'ยกเลิกการติดตั้ง', 59 | Mount: 'ติดตั้ง', 60 | SystemDiskNotNeedFix: 'ไม่จำเป็นต้องซ่อมแซมดิสก์ระบบ', 61 | FixDisk: 'ซ่อมแซมดิสก์', 62 | Fix: 'ซ่อมแซม', 63 | Rename: 'เปลี่ยนชื่อ', 64 | Set: 'ตั้งค่า', 65 | About: 'เกี่ยวกับ', 66 | NowReadonlyIfNeedWritePleaseInstallDriver: 'ตอนนี้เป็นโหมดอ่านอย่างเดียว กรุณาติดตั้งไดรเวอร์หากต้องการเขียน', 67 | total: 'ทั้งหมด', 68 | used: 'ใช้แล้ว', 69 | available: 'ใช้งานได้', 70 | NoMounted: 'ไม่ได้ติดตั้ง', 71 | MountedPoint: 'จุดที่ติดตั้ง', 72 | Readonly: 'อ่านอย่างเดียว', 73 | TotalVolume: 'ปริมาณทั้งหมด', 74 | Format: 'รูปแบบ', 75 | HoldUser: 'ผู้ถือ', 76 | Connect: 'เชื่อมต่อ', 77 | Device: 'อุปกรณ์', 78 | PleaseInstallSystemKextAllow: 'โปรดติดตั้งการอนุญาต Kernel Extension ของระบบ', 79 | ScanToKnowHowtoOpenSystemKextAllow: 'โปรดสแกนเพื่อทราบวิธีเปิดใช้งาน "การอนุญาต Kernel Extension ของระบบ" กดยืนยันเพื่อปิดเครื่องและปฏิบัติตามคำแนะนำ', 80 | Cancel: 'ยกเลิก', 81 | Confirm: 'ยืนยัน', 82 | 83 | "system": "ระบบ", 84 | "active_status": "สถานะการเปิดใช้งาน", 85 | "actioning": "กำลังดำเนินการ", 86 | "user": "ผู้ใช้", 87 | "email": "อีเมล", 88 | "trying": "กำลังทดลอง", 89 | "actived": "เปิดใช้งานแล้ว", 90 | "expired": "หมดอายุ", 91 | "expiretimeto": "หมดอายุใน", 92 | "reactive": "เปิดใช้งานใหม่", 93 | "buactivecode": "ซื้อรหัสเปิดใช้งาน", 94 | "expire_time": "เวลาหมดอายุ", 95 | "input_active_code": "ป้อนรหัสเปิดใช้งาน", 96 | "confirm_active": "ยืนยันการเปิดใช้งาน", 97 | "delete": "ลบ", 98 | "details": "รายละเอียด", 99 | "cancel_active": "ยกเลิกการเปิดใช้งาน", 100 | "active": "เปิดใช้งาน", 101 | "disk_name_error": "รูปแบบชื่อดิสก์ผิดพลาด", 102 | "install_succ": "ติดตั้งสำเร็จ", 103 | "please_allow_action_and_system_will_start_2times": "กรุณาดำเนินการตามคำแนะนำของระบบ ระบบจะทำการรีสตาร์ท 2 ครั้ง.", 104 | "agree": "ยอมรับ", 105 | "confirm_restart": "ยืนยันการรีสตาร์ท", 106 | "system_will_restart": "ระบบจะทำการรีสตาร์ท เราขอให้คุณยืนยันว่าทราบวิธีการเปิดใช้งานส่วนขยาย.", 107 | "reinstall": "ติดตั้งใหม่", 108 | "checked_kext_sign_err": "ตรวจพบว่าการเซ็นส่วนขยายไม่สำเร็จ อาจเป็นเพราะไม่ได้เปิดการอนุญาตสำหรับส่วนขยาย.", 109 | "agree_text": "แอพนี้จะติดตั้งส่วนขยายภายในของ macos ntfs ที่ได้รับอนุญาตจาก Apple. นอกจากนี้ เนื่องจากความต้องการของระบบ macos ที่อนุญาตให้มีส่วนขยายได้เพียงหนึ่งส่วนสำหรับแต่ละรูปแบบไฟล์ การยอมรับหมายความว่าคุณเลือกใช้ส่วนขยายนี้เป็นค่าเริ่มต้นและจะลบ/ถอนการติดตั้งส่วนขยายอื่นๆ." 110 | 111 | } -------------------------------------------------------------------------------- /lang/tr.js: -------------------------------------------------------------------------------- 1 | export default { 2 | lang_select: 'Dil Seçimi', 3 | preferences: 'Tercihler', 4 | general: 'Genel', 5 | notification: 'Bildirimler', 6 | ignoredisk: 'Diski Yoksay', 7 | privacy: 'Gizlilik', 8 | update: 'Güncelle', 9 | menu: 'Menü', 10 | activated: 'Etkinleştirildi', 11 | closed: 'Kapalı', 12 | disable: 'Devre Dışı Bırak', 13 | enable: 'Etkinleştir', 14 | Followthesystemstartup: 'Sisteme Başlangıçta Eşlik Et', 15 | Howtodealwithmountingbadvolumes: 'Kötü Birimleri Nasıl Monteleme', 16 | Automaticprocessing: 'Otomatik İşleme', 17 | Promptbeforeprocessing: 'İşlem Öncesi Uyar', 18 | Donothing: 'Hiçbir Şey Yapma', 19 | Howtodealwithhibernation: 'Uykuda Nasıl Davranılmalı', 20 | Switchtobackground: 'Arka Plana Geç', 21 | Askhow: 'Nasıl Davranılacağını Sor', 22 | Autoclose: 'Otomatik Kapat', 23 | notice: 'Uyarı', 24 | Shownotificationswhenmountedandlaunched: 'Monte Edildiğinde ve Başlatıldığında Bildirimleri Göster', 25 | Shownotificationswhenupdatesareavailable: 'Güncelleme Mevcut Olduğunda Bildirimleri Göster', 26 | Notifywhendiskvolumeisabnormal: 'Disk Birimi Anormal Olduğunda Bildirim Gönder', 27 | Shownotificationswhenanupdatedversionisofficiallyavailable: 'Güncellenmiş Sürümü Resmi Olarak Mevcut Olduğunda Bildirimleri Göster', 28 | Diskvolumemaybeabnormalduetoabnormaldisconnection: 'Disk Birimi Anormal Bağlantı Nedeniyle Anormal Olabilir', 29 | Alldatacollectedcanbeviewedintheupdatedprivacypolicy: 'Toplanan Tüm Veriler Güncellenmiş Gizlilik Politikasında Görüntülenebilir', 30 | Readtheprivacypolicy: 'Gizlilik Politikasını Oku', 31 | Checkforupdatesautomatically: 'Güncellemeleri Otomatik Olarak Kontrol Et', 32 | DetectBetaversionupdates: 'Beta Sürüm Güncellemelerini Algıla', 33 | Pleaseupdatetothebetaversion1: 'Lütfen Beta Sürüme Güncelleme Yapın, Çünkü deneysel özellikler içerir. Bu özellikler kararlı değildir ve veri kaybına neden olabilir.', 34 | Checkforupdates: 'Güncellemeleri Kontrol Et', 35 | Resetallconfiguration: 'Tüm Yapılandırmaları Sıfırla', 36 | Open: 'Aç', 37 | unmount: 'Çıkart', 38 | protocol: 'Protokol', 39 | mount: 'Monte Et', 40 | Unmounted: 'Monte Edilmedi', 41 | Clicktoopenthedisk: 'Diski Açmak İçin Tıklayın', 42 | Quit: 'Çıkış', 43 | feedback: 'Geribildirim', 44 | Username: 'Kullanıcı Adı', 45 | Password: 'Şifre', 46 | Version: 'Sürüm', 47 | Feedbackform: 'Geribildirim Formu', 48 | Pleaseprovidedescription: 'Lütfen probleminizle ilgili detaylı açıklama, öneri, hata raporu veya sorularınızı sağlayın, böylece talebinizi net bir şekilde anladıktan sonra en etkili yanıtı verebiliriz.', 49 | Submitoperatingdata: 'Çalışma verilerini, günlükleri vb. bilgileri göndererek cihazınızın bilgilerini anlamamıza ve uygulamamızı iyileştirmemize yardımcı olun', 50 | sendfeedback: 'Geribildirim Gönder', 51 | Mounting: 'Montaj Yapılıyor', 52 | Automatically_mount_NTFS_disk: 'NTFS Diski Otomatik Olarak Monte Et', 53 | NoMsg: 'Mesaj Yok', 54 | OuterDisk: 'Harici Disk', 55 | Install: 'Yükle', 56 | SystemDiskCanotUnmount: 'Sistem Diski Çıkartılamaz', 57 | UnmountorMountDisk: 'Diski Çıkart veya Monte Et', 58 | UnMount: 'Çıkart', 59 | Mount: 'Monte Et', 60 | SystemDiskNotNeedFix: 'Sistem Diski Onarıma İhtiyaç Duymuyor', 61 | FixDisk: 'Diski Onar', 62 | Fix: 'Onar', 63 | Rename: 'Yeniden Adlandır', 64 | Set: 'Ayarla', 65 | About: 'Hakkında', 66 | NowReadonlyIfNeedWritePleaseInstallDriver: 'Şu Anda Salt Okunur Durumda, Dosya Yazılması Gerekiyorsa Lütfen Sürücüyü Yükleyin', 67 | total: 'Toplam', 68 | used: 'Kullanılan', 69 | available: 'Kullanılabilir', 70 | NoMounted: 'Monte Edilmemiş', 71 | MountedPoint: 'Montaj Noktası', 72 | Readonly: 'Salt Okunur', 73 | TotalVolume: 'Toplam Hacim', 74 | Format: 'Biçim', 75 | HoldUser: 'Kullanıcı', 76 | Connect: 'Bağlan', 77 | Device: 'Cihaz', 78 | PleaseInstallSystemKextAllow: 'Lütfen Sistem Kext İzni Yükleyin', 79 | ScanToKnowHowtoOpenSystemKextAllow: '"Sistem Kext İzni Yüklemek" için nasıl yapılacağını öğrenmek için lütfen tarama yapın, Onayla\'yı tıkladığınızda kapanacak ve yönergeleri izleyebileceksiniz.', 80 | Cancel: 'İptal', 81 | Confirm: 'Onayla', 82 | 83 | "system": "Sistem", 84 | "active_status": "Aktif Durum", 85 | "actioning": "İşlemde", 86 | "user": "Kullanıcı", 87 | "email": "E-posta", 88 | "trying": "Deneme Aşamasında", 89 | "actived": "Aktif Edildi", 90 | "expired": "Süresi Doldu", 91 | "expiretimeto": "Geçerlilik Süresi", 92 | "reactive": "Yeniden Aktif Et", 93 | "buactivecode": "Aktivasyon Kodu Satın Al", 94 | "expire_time": "Süre Sonu", 95 | "input_active_code": "Aktivasyon Kodu Gir", 96 | "confirm_active": "Aktivasyonu Onayla", 97 | "delete": "Sil", 98 | "details": "Detaylar", 99 | "cancel_active": "Aktivasyonu İptal Et", 100 | "active": "Aktif", 101 | "disk_name_error": "Disk Adı Formatı Hatalı", 102 | "install_succ": "Başarıyla Yüklendi", 103 | "please_allow_action_and_system_will_start_2times": "Lütfen sistem talimatlarına göre hareket edin, sistem iki kez yeniden başlatılacak.", 104 | "agree": "Kabul Et", 105 | "confirm_restart": "Yeniden Başlatmayı Onayla", 106 | "system_will_restart": "Sistem yeniden başlatılacak, lütfen genişletme izinlerini nasıl açacağınızı teyit edin.", 107 | "reinstall": "Yeniden Yükle", 108 | "checked_kext_sign_err": "Genişletme imzası kontrolünde hata tespit edildi, genişletme çalıştırma izni açık olmayabilir", 109 | "agree_text": "Bu uygulama, Apple tarafından yetkilendirilmiş macos ntfs çekirdek genişletmesini yükleyecektir. Ayrıca, macos sistem gereksinimleri nedeniyle, aynı dosya formatı için yalnızca bir genişletmenin var olmasına izin verildiğinden, kabul etmek bu genişletmeyi varsayılan olarak seçtiğiniz ve diğer tüm genişletmeleri otomatik olarak silip/kaldırdığınız anlamına gelir." 110 | 111 | } -------------------------------------------------------------------------------- /lang/vi.js: -------------------------------------------------------------------------------- 1 | export default { 2 | lang_select: 'Chọn ngôn ngữ', 3 | preferences: 'Tuỳ chọn', 4 | general: 'Chung', 5 | notification: 'Thông báo', 6 | ignoredisk: 'Bỏ qua ổ đĩa', 7 | privacy: 'Quyền riêng tư', 8 | update: 'Cập nhật', 9 | menu: 'Menu', 10 | activated: 'Đã kích hoạt', 11 | closed: 'Đã đóng', 12 | disable: 'Tắt', 13 | enable: 'Bật', 14 | Followthesystemstartup: 'Theo dõi khởi động hệ thống', 15 | Howtodealwithmountingbadvolumes: 'Xử lý các ổ đĩa xấu khi gắn', 16 | Automaticprocessing: 'Xử lý tự động', 17 | Promptbeforeprocessing: 'Nhắc trước khi xử lý', 18 | Donothing: 'Không làm gì', 19 | Howtodealwithhibernation: 'Xử lý chế độ ngủ', 20 | Switchtobackground: 'Chuyển sang nền', 21 | Askhow: 'Hỏi cách xử lý', 22 | Autoclose: 'Tự động đóng', 23 | notice: 'Thông báo', 24 | Shownotificationswhenmountedandlaunched: 'Hiển thị thông báo khi gắn và khởi chạy', 25 | Shownotificationswhenupdatesareavailable: 'Hiển thị thông báo khi có cập nhật', 26 | Notifywhendiskvolumeisabnormal: 'Thông báo khi dung lượng ổ đĩa không bình thường', 27 | Shownotificationswhenanupdatedversionisofficiallyavailable: 'Hiển thị thông báo khi có phiên bản cập nhật chính thức', 28 | Diskvolumemaybeabnormalduetoabnormaldisconnection: 'Dung lượng ổ đĩa có thể không bình thường do mất kết nối không bình thường', 29 | Alldatacollectedcanbeviewedintheupdatedprivacypolicy: 'Tất cả dữ liệu được thu thập có thể xem trong chính sách quyền riêng tư đã cập nhật', 30 | Readtheprivacypolicy: 'Đọc chính sách quyền riêng tư', 31 | Checkforupdatesautomatically: 'Kiểm tra cập nhật tự động', 32 | DetectBetaversionupdates: 'Phát hiện cập nhật phiên bản Beta', 33 | Pleaseupdatetothebetaversion1: 'Vui lòng cập nhật lên phiên bản Beta, vì chúng chứa các tính năng thử nghiệm. Những tính năng này không ổn định và có thể gây mất dữ liệu.', 34 | Checkforupdates: 'Kiểm tra cập nhật', 35 | Resetallconfiguration: 'Đặt lại tất cả cấu hình', 36 | Open: 'Mở', 37 | unmount: 'Thoát', 38 | protocol: 'Giao thức', 39 | mount: 'Gắn', 40 | Unmounted: 'Chưa gắn', 41 | Clicktoopenthedisk: 'Nhấn để mở ổ đĩa', 42 | Quit: 'Thoát', 43 | feedback: 'Phản hồi', 44 | Username: 'Tên đăng nhập', 45 | Password: 'Mật khẩu', 46 | Version: 'Phiên bản', 47 | Feedbackform: 'Mẫu phản hồi', 48 | Pleaseprovidedescription: 'Vui lòng cung cấp mô tả chi tiết về vấn đề của bạn, đề xuất, báo cáo lỗi hoặc câu hỏi của bạn để chúng tôi có thể cung cấp câu trả lời hiệu quả nhất.', 49 | Submitoperatingdata: 'Gửi dữ liệu hoạt động, nhật ký vv. để giúp hiểu thông tin thiết bị của bạn và cải thiện ứng dụng của chúng tôi', 50 | sendfeedback: 'Gửi phản hồi', 51 | Mounting: 'Đang gắn', 52 | Automatically_mount_NTFS_disk: 'Tự động gắn ổ đĩa NTFS', 53 | NoMsg: 'Không có tin nhắn', 54 | OuterDisk: 'Ổ đĩa ngoài', 55 | Install: 'Cài đặt', 56 | SystemDiskCanotUnmount: 'Không thể tháo ổ đĩa hệ thống', 57 | UnmountorMountDisk: 'Tháo hoặc Gắn ổ đĩa', 58 | UnMount: 'Tháo', 59 | Mount: 'Gắn', 60 | SystemDiskNotNeedFix: 'Ổ đĩa hệ thống không cần sửa chữa', 61 | FixDisk: 'Sửa chữa ổ đĩa', 62 | Fix: 'Sửa', 63 | Rename: 'Đổi tên', 64 | Set: 'Cài đặt', 65 | About: 'Về chúng tôi', 66 | NowReadonlyIfNeedWritePleaseInstallDriver: 'Hiện đang ở chế độ chỉ đọc, nếu cần ghi, vui lòng cài đặt trình điều khiển', 67 | total: 'Tổng cộng', 68 | used: 'Đã sử dụng', 69 | available: 'Khả dụng', 70 | NoMounted: 'Chưa gắn', 71 | MountedPoint: 'Điểm gắn', 72 | Readonly: 'Chỉ đọc', 73 | TotalVolume: 'Tổng dung lượng', 74 | Format: 'Định dạng', 75 | HoldUser: 'Người dùng', 76 | Connect: 'Kết nối', 77 | Device: 'Thiết bị', 78 | PleaseInstallSystemKextAllow: 'Vui lòng cài đặt Giấy phép chạy Kernel hệ thống', 79 | ScanToKnowHowtoOpenSystemKextAllow: 'Vui lòng quét để biết cách mở "Giấy phép chạy Kernel hệ thống", khi bấm Xác nhận, điện thoại sẽ tắt nguồn và bạn sẽ được hướng dẫn.', 80 | Cancel: 'Hủy', 81 | Confirm: 'Xác nhận', 82 | 83 | "Connect":"Connect", 84 | "system": "Hệ thống", 85 | "active_status": "Trạng thái kích hoạt", 86 | "actioning": "Đang xử lý", 87 | "user": "Người dùng", 88 | "email": "Email", 89 | "trying": "Đang thử", 90 | "actived": "Đã kích hoạt", 91 | "expired": "Đã hết hạn", 92 | "expiretimeto": "Hạn sử dụng đến", 93 | "reactive": "Kích hoạt lại", 94 | "buactivecode": "Mua mã kích hoạt", 95 | "expire_time": "Thời gian hết hạn", 96 | "input_active_code": "Nhập mã kích hoạt", 97 | "confirm_active": "Xác nhận kích hoạt", 98 | "delete": "Xóa", 99 | "details": "Chi tiết", 100 | "cancel_active": "Hủy kích hoạt", 101 | "active": "Kích hoạt", 102 | "disk_name_error": "Lỗi định dạng tên đĩa", 103 | "install_succ": "Cài đặt thành công", 104 | "please_allow_action_and_system_will_start_2times": "Vui lòng thực hiện theo hướng dẫn của hệ thống, hệ thống sẽ khởi động lại 2 lần.", 105 | "agree": "Đồng ý", 106 | "confirm_restart": "Xác nhận khởi động lại", 107 | "system_will_restart": "Hệ thống sẽ khởi động lại, vui lòng xác nhận bạn biết cách bật quyền mở rộng.", 108 | "reinstall": "Cài đặt lại", 109 | "checked_kext_sign_err": "Phát hiện lỗi chữ ký mở rộng, có thể do chưa bật chức năng cho phép mở rộng chạy.", 110 | "agree_text": "Ứng dụng này sẽ cài đặt phần mở rộng hạt nhân macos ntfs được Apple cấp phép. Ngoài ra, do yêu cầu của hệ thống macos chỉ cho phép một phần mở rộng tồn tại cho mỗi định dạng tệp, việc đồng ý có nghĩa là bạn chọn phần mở rộng này làm mặc định và tự động xóa/gỡ cài đặt các phần mở rộng khác." 111 | 112 | } -------------------------------------------------------------------------------- /lang/zhCN.js: -------------------------------------------------------------------------------- 1 | export default { 2 | lang_select: '语言选择', 3 | preferences: '偏好设置', 4 | general: '常规', 5 | notification: '消息通知', 6 | ignoredisk: '忽略磁盘', 7 | privacy: '隐私', 8 | update: '更新', 9 | menu: '菜单', 10 | activated: '已启用', 11 | closed: '已关闭', 12 | disable: '禁用', 13 | enable: '开启', 14 | Followthesystemstartup: '跟随系统启动', 15 | Howtodealwithmountingbadvolumes: '如何处理安装坏卷', 16 | Automaticprocessing: '自动处理', 17 | Promptbeforeprocessing: '处理前询问', 18 | Donothing: '不作任何处理', 19 | Howtodealwithhibernation: '如何处理休眠', 20 | Switchtobackground: '切换到后台', 21 | Askhow: '询问如何处理', 22 | Autoclose: '自动关闭', 23 | notice: '提醒', 24 | Shownotificationswhenmountedandlaunched:"当挂载的时候显示提醒", 25 | Shownotificationswhenupdatesareavailable:"更新可用时显示提醒", 26 | Notifywhendiskvolumeisabnormal:"当磁盘异常时显示提醒", 27 | Shownotificationswhenanupdatedversionisofficiallyavailable: '官方存在更新版本时显示通知', 28 | Diskvolumemaybeabnormalduetoabnormaldisconnection: '磁盘卷宗可能因为异常断开造成数据异常', 29 | Alldatacollectedcanbeviewedintheupdatedprivacypolicy: '收集的所有数据均可在更新后的隐私政策中查看', 30 | Readtheprivacypolicy: '阅读隐私政策', 31 | Checkforupdatesautomatically: '自动检查更新', 32 | DetectBetaversionupdates: '检查 Beta 版本更新', 33 | Pleaseupdatetothebetaversion1: '请谨慎更新到测试版本,因为它们包含实验性的功能.这些功能不稳定,也可能造成数据丢失', 34 | Checkforupdates: '检查更新', 35 | Resetallconfiguration: '重置所有配置', 36 | Open: '打开', 37 | unmount: '卸下', 38 | protocol: '协议', 39 | mount:"挂载", 40 | Unmounted: "未挂载", 41 | Clicktoopenthedisk: "点击打开磁盘", 42 | Quit: "退出", 43 | feedback: "反馈", 44 | Username: "用户名", 45 | Password: "密码", 46 | Version: "版本", 47 | Feedbackform: "反馈表单", 48 | Pleaseprovidedescription: "请提供关于您问题的详细描述、建议、漏洞报告或者您的疑问,以便我们对您的诉求有了清晰的认识之后才能给您最有效的答复。", 49 | Submitoperatingdata: "提交运行数据、日志等信息,从而帮助了解您的设备信息并改善我们的应用", 50 | sendfeedback: "发送反馈", 51 | Mounting:"正在加载", 52 | Automatically_mount_NTFS_disk:"自动挂载NTFS磁盘", 53 | NoMsg: "无", 54 | OuterDisk:"外置", 55 | Install:"安装", 56 | SystemDiskCanotUnmount:"系统磁盘无法卸载", 57 | UnmountorMountDisk:"卸载或者挂载磁盘", 58 | UnMount:"卸载", 59 | Mount:"挂载", 60 | SystemDiskNotNeedFix:"系统磁盘无需修复", 61 | FixDisk:"修复磁盘", 62 | Fix:"修复", 63 | Rename:"重命名", 64 | Set: "设置", 65 | About: "关于", 66 | NowReadonlyIfNeedWritePleaseInstallDriver: "当前只读模式,如需读写文件,请安装驱动", 67 | total: '总共', 68 | used: '已用', 69 | available: '可用', 70 | NoMounted: '未装载', 71 | MountedPoint: '装载点', 72 | Readonly:"只读", 73 | TotalVolume:"容量", 74 | Format:"格式", 75 | HoldUser:"所有者", 76 | Connect:"连接", 77 | Device:"设备", 78 | PleaseInstallSystemKextAllow:"请先安装系统内核扩展运行许可", 79 | ScanToKnowHowtoOpenSystemKextAllow: '请拿出手机扫码查看如何开启"系统内核扩展运行许可",点击确认将关机,并按照指导操作.', 80 | Cancel: "取消", 81 | Confirm: "确定", 82 | 83 | 84 | system:"系统", 85 | active_status:"激活状态", 86 | actioning:"处理中", 87 | user:"用户", 88 | email:"邮箱", 89 | trying:"试用中", 90 | actived:"已激活", 91 | expired:"已过期", 92 | expiretimeto:"有效期至", 93 | reactive:"重新激活", 94 | buactivecode:"购买激活码", 95 | expire_time:"到期时间", 96 | input_active_code:"输入激活码", 97 | confirm_active:"确认激活", 98 | delete:"删除", 99 | details:"详情", 100 | cancel_active:"取消激活", 101 | active: "激活", 102 | disk_name_error: "磁盘名称格式错误", 103 | install_succ: "安装成功", 104 | please_allow_action_and_system_will_start_2times: "请按照系统提示进行扩展运行允许操作,期间系统会重启2次.", 105 | agree: "同意", 106 | confirm_restart: "确认重启", 107 | system_will_restart: "系统即将重启,请确认知晓如何开启扩展允许.", 108 | reinstall: "重新安装", 109 | checked_kext_sign_err: "检测到扩展运行签名失败,可能是扩展运行许可开关未开启", 110 | agree_text: "本应用将安装Apple授权认证的 macos ntfs 内核扩展.同时由于macos系统要求,同一文件格式只允许一种扩展存在,同意表示选择本扩展作为默认扩展,同时自动删除/卸载其他方扩展.", 111 | } -------------------------------------------------------------------------------- /lang/zhTW.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author service@ntfstool.com 3 | * Copyright (c) 2020 ntfstool.com 4 | * Copyright (c) 2020 alfw.com 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the MIT General Public License as published by 8 | * the Free Software Foundation; either version 2 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * MIT General Public License for more details. 15 | * 16 | * You should have received a copy of the MIT General Public License 17 | * along with this program (in the main directory of the NTFS Tool 18 | * distribution in the file COPYING); if not, write to the service@ntfstool.com 19 | */ 20 | export default { 21 | lang_select: '語言選擇', 22 | preferences: '偏好設定', 23 | general: '一般', 24 | notification: '消息通知', 25 | ignoredisk: '忽略磁盤', 26 | privacy: '隱私', 27 | update: '更新', 28 | menu: '菜单', 29 | activated: '已啟用', 30 | closed: '已關閉', 31 | disable: '停用', 32 | enable: '啟用', 33 | Followthesystemstartup: '跟隨系統啟動', 34 | Howtodealwithmountingbadvolumes: '處理掛載壞卷', 35 | Automaticprocessing: '自動處理', 36 | Promptbeforeprocessing: '處理前詢問', 37 | Donothing: '不執行任何操作', 38 | Howtodealwithhibernation: '處理休眠', 39 | Switchtobackground: '切換到背景', 40 | Askhow: '詢問處理方式', 41 | Autoclose: '自動關閉', 42 | notice: '通知', 43 | Shownotificationswhenmountedandlaunched: '掛載並啟動時顯示通知', 44 | Shownotificationswhenupdatesareavailable: '有更新可用時顯示通知', 45 | Notifywhendiskvolumeisabnormal: '磁盤卷異常時發出通知', 46 | Shownotificationswhenanupdatedversionisofficiallyavailable: '官方版本更新時發出通知', 47 | Diskvolumemaybeabnormalduetoabnormaldisconnection: '磁盤可能因異常斷開而異常', 48 | Alldatacollectedcanbeviewedintheupdatedprivacypolicy: '收集的所有數據可在更新的隱私政策中查看', 49 | Readtheprivacypolicy: '閱讀隱私政策', 50 | Checkforupdatesautomatically: '自動檢查更新', 51 | DetectBetaversionupdates: '檢測 Beta 版本更新', 52 | Pleaseupdatetothebetaversion1: '請謹慎更新到測試版本,因為它們包含實驗性功能。這些功能可能不穩定,也可能導致數據丟失', 53 | Checkforupdates: '檢查更新', 54 | Resetallconfiguration: '重置所有配置', 55 | Open: '開啟', 56 | unmount: '卸載', 57 | protocol: '協議', 58 | mount: '掛載', 59 | Unmounted: '未掛載', 60 | Clicktoopenthedisk: '點擊打開磁盤', 61 | Quit: '退出', 62 | feedback: '反饋', 63 | Username: '用戶名', 64 | Password: '密碼', 65 | Version: '版本', 66 | Feedbackform: '反饋表單', 67 | Pleaseprovidedescription: '請提供您問題的詳細描述、建議、漏洞報告或疑問,以便我們清晰了解您的需求並給予最有效的回應', 68 | Submitoperatingdata: '提交運行數據、日誌等信息,幫助我們了解您的設備信息並改善我們的應用', 69 | sendfeedback: '發送反饋', 70 | Mounting: '正在裝載', 71 | Automatically_mount_NTFS_disk: '自動掛載NTFS磁盤', 72 | NoMsg: '無', 73 | OuterDisk: '外部磁盤', 74 | Install: '安裝', 75 | SystemDiskCanotUnmount: '系統磁盤無法卸載', 76 | UnmountorMountDisk: '卸載或掛載磁盤', 77 | UnMount: '卸載', 78 | Mount: '掛載', 79 | SystemDiskNotNeedFix: '系統磁盤無需修復', 80 | FixDisk: '修復磁盤', 81 | Fix: '修復', 82 | Rename: '重新命名', 83 | Set: '設定', 84 | About: '關於', 85 | NowReadonlyIfNeedWritePleaseInstallDriver: '目前為唯讀模式,如需讀寫文件,請安裝驅動程序', 86 | total: '總共', 87 | used: '已使用', 88 | available: '可用', 89 | NoMounted: '未安裝', 90 | MountedPoint: '掛載點', 91 | Readonly: '唯讀', 92 | TotalVolume: '容量', 93 | Format: '格式', 94 | HoldUser: '持有者', 95 | Connect: '連接', 96 | Device: '設備', 97 | PleaseInstallSystemKextAllow: '請先安裝系統內核擴展運行許可', 98 | ScanToKnowHowtoOpenSystemKextAllow: '請掃碼查看如何開啟「系統內核擴展運行許可」,點擊確認將關機,並按照指導操作', 99 | Cancel: '取消', 100 | Confirm: '確認', 101 | 102 | "system": "系統", 103 | "active_status": "激活狀態", 104 | "actioning": "處理中", 105 | "user": "用戶", 106 | "email": "郵箱", 107 | "trying": "試用中", 108 | "actived": "已激活", 109 | "expired": "已過期", 110 | "expiretimeto": "有效期至", 111 | "reactive": "重新激活", 112 | "buactivecode": "購買激活碼", 113 | "expire_time": "到期時間", 114 | "input_active_code": "輸入激活碼", 115 | "confirm_active": "確認激活", 116 | "delete": "刪除", 117 | "details": "詳情", 118 | "cancel_active": "取消激活", 119 | "active": "激活", 120 | "disk_name_error": "磁盤名稱格式錯誤", 121 | "install_succ": "安裝成功", 122 | "please_allow_action_and_system_will_start_2times": "請按照系統提示進行擴展運行允許操作,期間系統會重啟2次.", 123 | "agree": "同意", 124 | "confirm_restart": "確認重啟", 125 | "system_will_restart": "系統即將重啟,請確認知曉如何開啟擴展允許.", 126 | "reinstall": "重新安裝", 127 | "checked_kext_sign_err": "檢測到擴展運行簽名失敗,可能是擴展運行許可開關未開啟", 128 | "agree_text": "本應用將安裝Apple授權認證的 macos ntfs 內核擴展.同時由於macos系統要求,同一文件格式只允許一種擴展存在,同意表示選擇本擴展作爲默認擴展,同時自動刪除/卸載其他方擴展." 129 | 130 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ntfs-tool", 3 | "version": "2.3.3", 4 | "description": "Aile Mac OS NTFS Tools", 5 | "homepage": "https://ntfstool.com", 6 | "author": { 7 | "name": "NTFS Tool", 8 | "email": "service@ntfstool.com" 9 | }, 10 | "copyright": "Copyright© ntfstool.com", 11 | "license": "MIT", 12 | "main": "./dist/electron/main.js", 13 | "scripts": { 14 | "build": "node .electron-vue/build.js && electron-builder", 15 | "build:dir": "node .electron-vue/build.js && electron-builder --dir", 16 | "build:clean": "cross-env BUILD_TARGET=clean node .electron-vue/build.js", 17 | "build:web": "cross-env BUILD_TARGET=web node .electron-vue/build.js", 18 | "dev": "node .electron-vue/dev-runner.js", 19 | "e2e": "npm run pack && mocha test/e2e", 20 | "pack": "npm run pack:main && npm run pack:renderer", 21 | "pack:main": "cross-env NODE_ENV=production webpack --progress --colors --config .electron-vue/webpack.main.config.js", 22 | "pack:renderer": "cross-env NODE_ENV=production webpack --progress --colors --config .electron-vue/webpack.renderer.config.js", 23 | "test": "npm run unit && npm run e2e", 24 | "unit": "karma start test/unit/karma.conf.js", 25 | "postinstall": "" 26 | }, 27 | "build": { 28 | "productName": "NTFSTool", 29 | "appId": "com.ntfstool.aile", 30 | "asarUnpack": [ 31 | "**/ntfstool/node_modules/ntfstool/*" 32 | ], 33 | "directories": { 34 | "output": "build" 35 | }, 36 | "files": [ 37 | "dist/electron/**/*" 38 | ], 39 | "dmg": { 40 | "contents": [ 41 | { 42 | "x": 410, 43 | "y": 150, 44 | "type": "link", 45 | "path": "/Applications" 46 | }, 47 | { 48 | "x": 130, 49 | "y": 150, 50 | "type": "file" 51 | } 52 | ] 53 | }, 54 | "publish": [ 55 | { 56 | "provider": "generic", 57 | "url": "https://store.alfw.com/ntfstool/update" 58 | } 59 | ], 60 | "mac": { 61 | "icon": "build/icons/icon.icns", 62 | "extendInfo": { 63 | "LSUIElement": 1, 64 | "Application Category": "Utilities", 65 | "Copyright(All)": "Copyright © 2020 ntfstool.com . All rights reserved.", 66 | "NSUserNotificationAlertStyle": "alert" 67 | } 68 | } 69 | }, 70 | "dependencies": { 71 | "axios": "^0.19.2", 72 | "diskutil": "latest", 73 | "electron-log": "^4.0.7", 74 | "electron-store": "^5.0.0", 75 | "electron-updater": "^4.2.5", 76 | "element-ui": "2.13.0", 77 | "get": "^1.4.0", 78 | "lodash": "^4.17.15", 79 | "md5": "^2.2.1", 80 | "node-cache": "^5.1.0", 81 | "ntfstool": "latest", 82 | "usb-detection": "^4.7.0", 83 | "vue": "^2.6.11", 84 | "vue-electron": "^1.0.6", 85 | "vue-i18n": "^8.15.3", 86 | "vue-router": "^3.1.5", 87 | "vuex": "^3.1.2", 88 | "watch-mac": "latest" 89 | }, 90 | "devDependencies": { 91 | "electron-middle-sass": "^1.0.2", 92 | "electron-rebuild": "^1.10.1", 93 | "@babel/plugin-proposal-object-rest-spread": "^7.8.3", 94 | "babel-core": "^6.25.0", 95 | "babel-loader": "^7.1.1", 96 | "babel-plugin-istanbul": "^4.1.1", 97 | "babel-plugin-transform-runtime": "^6.23.0", 98 | "babel-preset-env": "^1.6.0", 99 | "babel-preset-stage-0": "^6.24.1", 100 | "babel-register": "^6.24.1", 101 | "babili-webpack-plugin": "^0.1.2", 102 | "cfonts": "^1.1.3", 103 | "chai": "^4.0.0", 104 | "chalk": "^2.2.0", 105 | "copy-webpack-plugin": "^4.0.1", 106 | "cross-env": "^5.0.5", 107 | "css-loader": "^0.28.4", 108 | "del": "^3.0.0", 109 | "devtron": "^1.4.0", 110 | "electron": "^8.0.2", 111 | "electron-builder": "^22.3.6", 112 | "electron-debug": "^3.0.0", 113 | "electron-devtools-installer": "^2.2.4", 114 | "extract-text-webpack-plugin": "^3.0.0", 115 | "file-loader": "^0.11.2", 116 | "html-webpack-plugin": "^2.30.1", 117 | "inject-loader": "^3.0.0", 118 | "karma": "^1.3.0", 119 | "karma-chai": "^0.1.0", 120 | "karma-coverage": "^1.1.1", 121 | "karma-electron": "^5.1.1", 122 | "karma-mocha": "^1.2.0", 123 | "karma-sourcemap-loader": "^0.3.7", 124 | "karma-spec-reporter": "^0.0.31", 125 | "karma-webpack": "^2.0.1", 126 | "mocha": "^3.0.2", 127 | "multispinner": "^0.2.1", 128 | "node-loader": "^0.6.0", 129 | "node-sass": "^4.13.1", 130 | "prettier": "^1.12.1", 131 | "require-dir": "^0.3.0", 132 | "sass-loader": "^7.3.1", 133 | "spectron": "^3.7.1", 134 | "style-loader": "^0.18.2", 135 | "url-loader": "^0.5.9", 136 | "vue-html-loader": "^1.2.4", 137 | "vue-loader": "^13.0.5", 138 | "vue-style-loader": "^3.0.1", 139 | "vue-template-compiler": "^2.4.2", 140 | "webpack": "^3.12.0", 141 | "webpack-dev-server": "^2.7.1", 142 | "webpack-hot-middleware": "^2.18.2", 143 | "webpack-merge": "^4.1.0" 144 | } 145 | } 146 | -------------------------------------------------------------------------------- /screenshots/256x256@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/screenshots/256x256@2x.png -------------------------------------------------------------------------------- /screenshots/ntfs-display.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/screenshots/ntfs-display.jpg -------------------------------------------------------------------------------- /screenshots/ntfstool-main2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/screenshots/ntfstool-main2.png -------------------------------------------------------------------------------- /src/common/disk/constDisk.js: -------------------------------------------------------------------------------- 1 | export const diskStatus = { 2 | mounted: 1, 3 | needMounted: 1, 4 | BLUE: 2 5 | } 6 | 7 | 8 | export const eventType = { 9 | newDev:"newDev", 10 | } 11 | 12 | -------------------------------------------------------------------------------- /src/common/disk/eventDisk.js: -------------------------------------------------------------------------------- 1 | var event = null; 2 | 3 | function event(){ 4 | return event === null ? new EventEmitter() : event; 5 | } 6 | 7 | 8 | export function newDevEvent(){ 9 | console.warn("send " + eventType.newDev) 10 | event().emit(eventType.newDev); 11 | } 12 | 13 | export function onNewDevEvent(callback){ 14 | event.on(eventType.newDev, function(data) { 15 | console.warn("on " + eventType.newDev) 16 | callback(data); 17 | }); 18 | } 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/common/disk/mainDisk.js: -------------------------------------------------------------------------------- 1 | // import {listenVolume,mainMonitor} from "./moniterDisk" 2 | export function startMainDisk(){ 3 | // listenVolume(); 4 | // 5 | // mainMonitor(); 6 | // 7 | // queueDisk.viewUpdateEvent(function () { 8 | // //when need update and update the global view 9 | // //view Page only need listen the viewUpdateEvent,and update the view 10 | // sendGlobalViewEvent({ 11 | // volumeName:"...", 12 | // status:{ 13 | // //...emnu type 14 | // } 15 | // }); 16 | // }); 17 | // 18 | // onGlobalEvent(function (action,data) { 19 | // if(action == "pushAll"){ 20 | // 21 | // }else if(action == "push"){ 22 | // 23 | // }else if(action == "remount"){ 24 | // 25 | // }else if(action == "checkView"){ 26 | // 27 | // } 28 | // }); 29 | 30 | }; -------------------------------------------------------------------------------- /src/common/disk/moniterDisk.js: -------------------------------------------------------------------------------- 1 | import {event} from "./queueDisk"; 2 | 3 | var watch = require('node-watch') 4 | import {onNewDevEvent} from "./eventDisk" 5 | 6 | 7 | //call the listenVolume to monitor the volume mount event 8 | function listenVolume() { 9 | watch("./data", {recursive: true}, function (evt, name) { 10 | console.warn({evt, name}, "watchFile"); 11 | if (evt == "remove") { 12 | queueListRemove(name); 13 | } else { 14 | queueListAdd(name); 15 | } 16 | }) 17 | } 18 | 19 | 20 | //call the listenVolume to monitor the volume mount event 21 | function mainMonitor() { 22 | // queueDisk.addEvent() listen.... todo 23 | onNewDevEvent(() => { 24 | console.warn("newDevEvent"); 25 | 26 | // //step1 get new dev info and update view 27 | // sendGlobalUpdate();//global view update(from store) 28 | // 29 | // //setp check2 ntfs and update 30 | // if (action === NTFS_Mount) { 31 | // workerDisk.autoMount(function () { 32 | // sendGlobalUpdate();//global view update again 33 | // }); 34 | // } 35 | }) 36 | 37 | }; 38 | 39 | export function moniterDisk() { 40 | 41 | } 42 | 43 | -------------------------------------------------------------------------------- /src/common/disk/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "module" 3 | } -------------------------------------------------------------------------------- /src/common/disk/queueDisk.js: -------------------------------------------------------------------------------- 1 | var Queue = []; 2 | var storeList = null; 3 | var _ = require('lodash'); 4 | 5 | import {newDevEvent} from "./eventDisk" 6 | 7 | function queueList(){ 8 | Queue === null ? [] : Queue; 9 | } 10 | 11 | export function queueListAdd(name){ 12 | Queue.push({ 13 | name:name, 14 | type:"", 15 | try_times:0, 16 | }); 17 | newDevEvent(); 18 | } 19 | 20 | 21 | export function queueListRemove(name){ 22 | _.remove(Queue, function (data) { 23 | return data.name == name 24 | }); 25 | newDevEvent(); 26 | } 27 | 28 | // export function retryQueue(name){ 29 | // _.map(Queue, function (data) { 30 | // if(data.name == name){ 31 | // data.try_times = data.try_times + 1; 32 | // } 33 | // return data; 34 | // }); 35 | // newDevEvent(); 36 | // } 37 | 38 | export function sendGlobalUpdate(name){ 39 | //save store 40 | //send global update event 41 | } 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /src/common/disk/workerDisk.js: -------------------------------------------------------------------------------- 1 | export function autoMount(){ 2 | try{ 3 | // step check isntfs and only 4 | 5 | //unmount disk 6 | 7 | //mount disk 8 | 9 | resove(); 10 | }catch (e) { 11 | reject(); 12 | } 13 | } -------------------------------------------------------------------------------- /src/common/lang/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author service@ntfstool.com 3 | * Copyright (c) 2020 ntfstool.com 4 | * Copyright (c) 2020 alfw.com 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the MIT General Public License as published by 8 | * the Free Software Foundation; either version 2 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * MIT General Public License for more details. 15 | * 16 | * You should have received a copy of the MIT General Public License 17 | * along with this program (in the main directory of the NTFS Tool 18 | * distribution in the file COPYING); if not, write to the service@ntfstool.com 19 | */ 20 | 21 | import en from './en' 22 | import zhCN from './zhCN' 23 | import zhTW from './zhTW' 24 | import ja from './ja' 25 | import ko from './ko' 26 | import es from './es' 27 | import ru from './ru' 28 | import de from './de' 29 | 30 | import enLocale from 'element-ui/lib/locale/lang/en' 31 | import zhcnLocale from 'element-ui/lib/locale/lang/zh-CN' 32 | import zhtwLocale from 'element-ui/lib/locale/lang/zh-TW' 33 | import koLocale from 'element-ui/lib/locale/lang/ko' 34 | import jaLocale from 'element-ui/lib/locale/lang/ja' 35 | import esLocale from 'element-ui/lib/locale/lang/es' 36 | import ruLocale from 'element-ui/lib/locale/lang/ru-RU' 37 | import deLocale from 'element-ui/lib/locale/lang/de' 38 | 39 | const languages_select = { 40 | languages: [ 41 | { 42 | text: "English", 43 | val: 'en' 44 | }, { 45 | text: "中文 (简体)", 46 | val: 'zhCN' 47 | } 48 | , { 49 | text: "中文 (繁體)", 50 | val: 'zhTW' 51 | }, { 52 | text: "日本語", 53 | val: 'ja' 54 | }, { 55 | text: "Korea", 56 | val: 'ko' 57 | }, { 58 | text: "Espanol", 59 | val: 'es' 60 | }, { 61 | text: "Русский", 62 | val: 'ru' 63 | }, { 64 | text: "Deutsch", 65 | val: 'de' 66 | } 67 | 68 | ] 69 | }; 70 | 71 | export default { 72 | en: {...en, ...languages_select, ...enLocale}, 73 | zhCN: {...zhCN, ...languages_select, ...zhcnLocale}, 74 | zhTW: {...zhTW, ...languages_select, ...zhtwLocale}, 75 | ja: {...ja, ...languages_select, ...jaLocale}, 76 | ko: {...ko, ...languages_select, ...koLocale}, 77 | es: {...es, ...languages_select, ...esLocale}, 78 | ru: {...ru, ...languages_select, ...ruLocale}, 79 | de: {...de, ...languages_select, ...deLocale} 80 | } -------------------------------------------------------------------------------- /src/common/lang/zhCN.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author service@ntfstool.com 3 | * Copyright (c) 2020 ntfstool.com 4 | * Copyright (c) 2020 alfw.com 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the MIT General Public License as published by 8 | * the Free Software Foundation; either version 2 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * MIT General Public License for more details. 15 | * 16 | * You should have received a copy of the MIT General Public License 17 | * along with this program (in the main directory of the NTFS Tool 18 | * distribution in the file COPYING); if not, write to the service@ntfstool.com 19 | */ 20 | 21 | export default { 22 | lang_select: '语言选择', 23 | preferences: '偏好设置', 24 | general: '常规', 25 | notification: '消息通知', 26 | ignoredisk: '忽略磁盘', 27 | privacy: '隐私', 28 | update: '更新', 29 | menu: '菜单', 30 | activated: '已启用', 31 | closed: '已关闭', 32 | disable: '禁用', 33 | enable: '开启', 34 | notice_cannot_do_disk01: '警告: 禁用后您将无法直接菜单栏操作卷宗', 35 | notice_cannot_do_disk02: '提示: 开启后将在右上角显示快捷操作菜单', 36 | Followthesystemstartup: '跟随系统启动', 37 | theme: '外观', 38 | system: '系统', 39 | dark: '暗', 40 | light: '亮', 41 | Howtodealwithmountingbadvolumes: '如何处理安装坏卷', 42 | Automaticprocessing: '自动处理', 43 | Promptbeforeprocessing: '处理前询问', 44 | Donothing: '不作任何处理', 45 | Howtodealwithhibernation: '如何处理休眠', 46 | Switchtobackground: '切换到后台', 47 | Askhow: '询问如何处理', 48 | Autoclose: '自动关闭', 49 | notice: '提醒', 50 | Shownotificationswhenmountedandlaunched:"当挂载的时候显示提醒", 51 | Shownotificationswhenupdatesareavailable:"更新可用时显示提醒", 52 | Notifywhendiskvolumeisabnormal:"当磁盘异常时显示提醒", 53 | Shownotificationswhenanupdatedversionisofficiallyavailable: '官方存在更新版本时显示通知', 54 | Diskvolumemaybeabnormalduetoabnormaldisconnection: '磁盘卷宗可能因为异常断开造成数据异常', 55 | Alldatacollectedcanbeviewedintheupdatedprivacypolicy: '收集的所有数据均可在更新后的隐私政策中查看', 56 | Readtheprivacypolicy: '阅读隐私政策', 57 | Checkforupdatesautomatically: '自动检查更新', 58 | DetectBetaversionupdates: '检查 Beta 版本更新', 59 | Pleaseupdatetothebetaversion1: '请谨慎更新到测试版本,因为它们包含实验性的功能.这些功能不稳定,也可能造成数据丢失', 60 | Checkforupdates: '检查更新', 61 | Resetallconfiguration: '重置所有配置', 62 | Lastchecktime: '上次更新时间', 63 | Systemvolume: '系统卷', 64 | Externalvolume: '扩展卷', 65 | Open: '打开', 66 | Certification: '证书', 67 | erase: '抹去', 68 | unmount: '卸下', 69 | installed: '已安装', 70 | Builtin: '内建', 71 | Pathnode: '路径节点', 72 | Mountnode: '挂载节点', 73 | Partitiontype: '分区类型', 74 | Mounttype: '安装类型', 75 | protocol: '协议', 76 | Diskuse: '磁盘使用', 77 | Nearingthelimit1: '接近极限,请立即整理您的数据以避免丢失', 78 | Cancontinuetobeusedsafely: '可以继续安全使用', 79 | Lessforsafestorage: '更少用于安全存储', 80 | total: '总', 81 | used: '已用', 82 | available: '可用', 83 | Erasingthediskwilldelete: '擦除磁盘将删除所有数据', 84 | Detectsystemdisktoolisabouttojump: '检测系统磁盘工具,即将跳转', 85 | Internaldiskcannotbeunmounted: '内部磁盘,无法卸载', 86 | OKtounmountthedisk: '单击确定以卸载磁盘', 87 | ImageVolume: "镜像卷", 88 | mount:"挂载", 89 | Unmounted: "未挂载", 90 | Clicktoopenthedisk: "点击打开磁盘", 91 | Quit: "退出", 92 | Submitfeedback: "提交反馈", 93 | feedback: "反馈", 94 | Clearpassword: "清除密码", 95 | About: "关于", 96 | Attemptingtocallsystemdiskoperationpermissions: "正在尝试调用系统磁盘操作权限", 97 | Enterthepasswordtoallowthisoperation: "输入密码以允许此次操作", 98 | Username: "用户名", 99 | Password: "密码", 100 | LostFuse: "检测到系统缺少Fuse磁盘内核依赖,请点击确认并正常安装,方可继续使用本软件", 101 | Introduction: "介绍", 102 | Cancel: "取消", 103 | Confirm: "确定", 104 | SerialNumber: "系列号", 105 | Version: "版本", 106 | Ulock: "解锁", 107 | OfficialTechnologyExchangeGroup: "官方技术交流群", 108 | Feedbackform: "反馈表单", 109 | Pleaseprovidedescription: "请提供关于您问题的详细描述、建议、漏洞报告或者您的疑问,以便我们对您的诉求有了清晰的认识之后才能给您最有效的答复。", 110 | Supportrequest: "支持请求", 111 | errorreport: "错误报告", 112 | Submitoperatingdata: "提交运行数据、日志等信息,从而帮助了解您的设备信息并改善我们的应用", 113 | sendfeedback: "发送反馈", 114 | Itisrecommended: "建议您勾选提交运行数据、日志等信息...", 115 | Youhavegivenupsu: "您已放弃提交运行数据、日志等信息,我们可能无法复原您的问题,确定继续提交?", 116 | Submitinformation: "提交信息成功", 117 | Failedtosubmitinformation: "提交信息失败", 118 | Disksintheignore: "忽略列表里的磁盘将不再出现在磁盘列表", 119 | Opendesktop: "打开桌面", 120 | Submittherunninglog: "提交NTFSTool应用的运行日志,从而帮助开发者改善他们的应用", 121 | Theanalysisdata: "分析数据已提交,即将跳转在线帮助页面...", 122 | Youhavegivenup: "您已放弃提交分析数据,暂无法提供免费技术支持", 123 | Pleaseenteranewname: "请输入新名称", 124 | Diskuninstallsucceeded: "磁盘卸载成功", 125 | Uninstallfailed: "卸载失败", 126 | Diskmountedsuccessfully: "磁盘挂载成功", 127 | Thediskisnotmounted: "该磁盘没有挂载", 128 | NoFuseinstallation: "暂未发现Fuse安装包,准备前往官网手动下载", 129 | ConfirmConfigtoreset: "确认重置所有配置为默认", 130 | Theresetissuccessful: "重置成功,请重新开启配置页面", 131 | Resetfailed: "重置失败", 132 | Mounting:"正在加载", 133 | Readonly:"只读", 134 | AlreadyUsing:"我正在使用Ntfstool工具,我很喜欢他.", 135 | FindMore:"如果你感兴趣,在这里发现更多的信息:", 136 | RecommendUsing:"我推荐使用NTFSTool工具去操作MAC系统NTFS磁盘", 137 | SendEmailForHelp:"发送邮件寻求帮助", 138 | Viewthetranslation:"查看翻译文件,并将更新翻译后的内容以邮件的方式发送到", 139 | Helpsoftwaretranslation:"帮助软件完善翻译功能", 140 | new_device_event:"发现新设备", 141 | remove_device_event:"设备已移除", 142 | 143 | dbclicktoopen:"双击打开磁盘", 144 | click_can_forbid:"点击可以禁止", 145 | cancel_usb_notify:"取消USB通知?", 146 | canceled_usb_notify:"已取消通知", 147 | Automatically_mount_NTFS_disk:"自动挂载NTFS磁盘", 148 | Sorryitisnotsupported:"抱歉,暂不支持普通权限用户使用(请使用管理员账户运行软件)", 149 | } -------------------------------------------------------------------------------- /src/common/lang/zhTW.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author service@ntfstool.com 3 | * Copyright (c) 2020 ntfstool.com 4 | * Copyright (c) 2020 alfw.com 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the MIT General Public License as published by 8 | * the Free Software Foundation; either version 2 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * MIT General Public License for more details. 15 | * 16 | * You should have received a copy of the MIT General Public License 17 | * along with this program (in the main directory of the NTFS Tool 18 | * distribution in the file COPYING); if not, write to the service@ntfstool.com 19 | */ 20 | // 原文參考連結: https://github.com/ntfstool/ntfstool/blob/master/src/common/lang/en.js 21 | 22 | export default { 23 | lang_select: '選擇語言', 24 | preferences: '偏好設定', 25 | general: '一般', 26 | notification: '消息通知', 27 | ignoredisk: '忽略磁碟', 28 | privacy: '隱私', 29 | update: '更新', 30 | menu: '選單', 31 | activated: '已啟用', 32 | closed: '已關閉', 33 | disable: '停用', 34 | enable: '開啟', 35 | notice_cannot_do_disk01: '警告: 停用後您將無法直接在選單列操作卷宗', 36 | notice_cannot_do_disk02: '提示: 開啟後將在右上角顯示快速操作選單', 37 | Followthesystemstartup: '跟隨系統啟動', 38 | theme: '主題', 39 | system: '系統', 40 | dark: '暗色', 41 | light: '亮色', 42 | Howtodealwithmountingbadvolumes: '如何處理安裝損壞卷宗', 43 | Automaticprocessing: '自動處理', 44 | Promptbeforeprocessing: '處理前詢問', 45 | Donothing: '不作任何處理', 46 | Howtodealwithhibernation: '如何處理休眠', 47 | Switchtobackground: '切換到背景', 48 | Askhow: '詢問如何處理', 49 | Autoclose: '自動關閉', 50 | notice: '提醒', 51 | Shownotificationswhenmountedandlaunched: "當掛載的時候顯示提醒", 52 | Shownotificationswhenupdatesareavailable: "更新可用時顯示提醒", 53 | Notifywhendiskvolumeisabnormal: "當磁碟異常時顯示提醒", 54 | Shownotificationswhenanupdatedversionisofficiallyavailable: '官方存在更新版本時顯示通知', 55 | Diskvolumemaybeabnormalduetoabnormaldisconnection: '磁碟卷宗可能因為異常中斷造成資料異常', 56 | Alldatacollectedcanbeviewedintheupdatedprivacypolicy: '收集的所有資料均可在更新後的隱私權政策中檢視', 57 | Readtheprivacypolicy: '閱讀隱私政策', 58 | Checkforupdatesautomatically: '自動檢查更新', 59 | DetectBetaversionupdates: '檢查 Beta 版本更新', 60 | Pleaseupdatetothebetaversion1: '請謹慎更新到測試版本,因為它們包含實驗性的功能。這些功能不穩定,可能會造成資料遺失', 61 | Checkforupdates: '檢查更新', 62 | Resetallconfiguration: '回復初始設定', 63 | Lastchecktime: '上次更新時間', 64 | Systemvolume: '系統卷宗', 65 | Externalvolume: '外部卷宗', 66 | Open: '打開', 67 | Certification: '證書', 68 | erase: '清除', 69 | unmount: '退出', 70 | installed: '已安裝', 71 | Builtin: '內建', 72 | Pathnode: '路徑節點', 73 | Mountnode: '掛載節點', 74 | Partitiontype: '分區類型', 75 | Mounttype: '安裝類型', 76 | protocol: '協議', 77 | Diskuse: '磁碟使用', 78 | Nearingthelimit1: '接近極限,請立即整理您的數據以避免遺失', 79 | Cancontinuetobeusedsafely: '可以繼續安全使用', 80 | Lessforsafestorage: '更少用於安全儲存', 81 | total: '全部', 82 | used: '已用', 83 | available: '可用', 84 | Erasingthediskwilldelete: '清除磁碟將刪除所有資料', 85 | Detectsystemdisktoolisabouttojump: '檢測系統磁碟工具,立即跳轉', 86 | Internaldiskcannotbeunmounted: '內部磁碟,無法退出', 87 | OKtounmountthedisk: '點按確定來退出磁碟', 88 | ImageVolume: "磁碟映像檔", 89 | mount: "掛載", 90 | Unmounted: "未掛載", 91 | Clicktoopenthedisk: "點按來打開磁碟", 92 | Quit: "結束", 93 | Submitfeedback: "送出意見", 94 | feedback: "意見", 95 | Clearpassword: "清除密碼", 96 | About: "關於", 97 | Attemptingtocallsystemdiskoperationpermissions: "正在嘗試取用系統磁碟操作權限", 98 | Enterthepasswordtoallowthisoperation: "輸入密碼以授予此次操作", 99 | Username: "使用者名稱", 100 | Password: "密碼", 101 | LostFuse: "檢測到系統缺少 Fuse 磁碟內核依賴,請點按確定並正確安裝,以繼續使用本軟體", 102 | Introduction: "介紹", 103 | Cancel: "取消", 104 | Confirm: "確定", 105 | SerialNumber: "序號", 106 | Version: "版本", 107 | Ulock: "解鎖", 108 | OfficialTechnologyExchangeGroup: "官方技術交流群組", 109 | Feedbackform: "意見回饋表單", 110 | Pleaseprovidedescription: "請提供關於您問題的詳細描述、建議、漏洞報告或者您的疑問,以便我們對您的訴求有了清晰的認識之後才能給您最有效的回覆。", 111 | Supportrequest: "支援請求", 112 | errorreport: "錯誤報告", 113 | Submitoperatingdata: "提交運作資料、日誌等訊息,從而幫助了解您的裝置資訊並改善我們的應用程式", 114 | sendfeedback: "提交意見", 115 | Itisrecommended: "建議您勾選提交執行資料、日誌等訊息...", 116 | Youhavegivenupsu: "您已放棄提交執行資料、日誌等訊息,我們可能無法復原您的問題,確定繼續送出?", 117 | Submitinformation: "訊息提交成功", 118 | Failedtosubmitinformation: "訊息提交失敗", 119 | Disksintheignore: "忽略列表裡的磁碟將不再出現在磁碟列表", 120 | Opendesktop: "打開桌面", 121 | Submittherunninglog: "提交 NTFSTool 應用程式的執行日誌,以協助開發者改善他們的程式", 122 | Theanalysisdata: "分析數據已提交,即將跳轉線上說明頁面...", 123 | Youhavegivenup: "您已放棄提交分資料,暫無法提供免費技術支援", 124 | Pleaseenteranewname: "請輸入新名稱", 125 | Diskuninstallsucceeded: "磁碟卸除成功", 126 | Uninstallfailed: "卸除失敗", 127 | Diskmountedsuccessfully: "磁碟掛載成功", 128 | Thediskisnotmounted: "該磁碟尚未掛載", 129 | NoFuseinstallation: "暫未發現 Fuse 安裝套件,準備前往官網手動下載", 130 | ConfirmConfigtoreset: "確認重置所有設定為預設值", 131 | Theresetissuccessful: "重置成功,請重新開啟設定頁面", 132 | Resetfailed: "重置失敗", 133 | Mounting:"正在載入", 134 | Readonly:"唯讀", 135 | AlreadyUsing:"我正在使用 Ntfstool 工具,我非常喜歡。", 136 | FindMore:"如果你感興趣,在這裡可以發現更多資訊:", 137 | RecommendUsing:"我推薦使用 NTFSTool 工具去操作 Mac 系統的 NTFS 磁碟", 138 | SendEmailForHelp:"發送郵件尋求協助", 139 | OS: "作業系統", 140 | Viewthetranslation:"查看翻譯檔案,並將更新翻譯後的內容以郵件的方式傳送到", 141 | Helpsoftwaretranslation:"協助翻譯來完善軟體語言", 142 | dbclicktoopen:"點按兩次來打開磁碟", 143 | click_can_forbid:"點按可以停用", 144 | cancel_usb_notify:"取消 USB 通知?", 145 | canceled_usb_notify:"已取消通知", 146 | Automatically_mount_NTFS_disk:"自動掛載 NTFS 磁碟", 147 | Sorryitisnotsupported:"抱歉,暫不支援普通權限使用者使用(請使用管理員賬戶運行軟件)", 148 | } 149 | -------------------------------------------------------------------------------- /src/common/router/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author service@ntfstool.com 3 | * Copyright (c) 2020 ntfstool.com 4 | * Copyright (c) 2020 alfw.com 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the MIT General Public License as published by 8 | * the Free Software Foundation; either version 2 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * MIT General Public License for more details. 15 | * 16 | * You should have received a copy of the MIT General Public License 17 | * along with this program (in the main directory of the NTFS Tool 18 | * distribution in the file COPYING); if not, write to the service@ntfstool.com 19 | */ 20 | import Vue from 'vue' 21 | import Router from 'vue-router' 22 | import Home from '@/renderer/page/Home' 23 | import Setting from '@/renderer/page/Setting' 24 | import Tray from '@/renderer/page/Tray' 25 | import Dialog from '@/renderer/page/Dialog' 26 | import FeedBack from '@/renderer/page/FeedBack' 27 | Vue.use(Router) 28 | 29 | export default new Router({ 30 | routes: [ 31 | { 32 | path: '/', 33 | name: 'Home', 34 | component:Home 35 | }, 36 | { 37 | path: '/setting', 38 | name: 'Setting', 39 | component:Setting 40 | }, 41 | { 42 | path: '/dialog', 43 | name: 'Dialog', 44 | component:Dialog 45 | }, 46 | { 47 | path: '/feedBack', 48 | name: 'FeedBack', 49 | component:FeedBack 50 | }, 51 | { 52 | path: '/tray', 53 | name: 'Tray', 54 | component:Tray 55 | }, 56 | { 57 | path: '*', 58 | redirect: '/' 59 | } 60 | ] 61 | }) 62 | -------------------------------------------------------------------------------- /src/common/utils/AlfwConst.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author service@ntfstool.com 3 | * Copyright (c) 2020 ntfstool.com 4 | * Copyright (c) 2020 alfw.com 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the MIT General Public License as published by 8 | * the Free Software Foundation; either version 2 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * MIT General Public License for more details. 15 | * 16 | * You should have received a copy of the MIT General Public License 17 | * along with this program (in the main directory of the NTFS Tool 18 | * distribution in the file COPYING); if not, write to the service@ntfstool.com 19 | */ 20 | export const POST_LOG_URL = 'https://ntfstool.cn-hongkong.log.aliyuncs.com/logstores/ntfstool/track'; 21 | 22 | export const AlConst = { 23 | DiskListEvent : "DiskListEvent", 24 | DiskList:"DiskList", 25 | SudoPwdEvent:"SudoPwdEvent", 26 | InstallFuseEvent:"InstallFuseEvent", 27 | NotSudoerEvent:"NotSudoerEvent", 28 | GlobalViewUpdate:"GlobalViewUpdate", 29 | }; -------------------------------------------------------------------------------- /src/common/utils/AlfwStore.js: -------------------------------------------------------------------------------- 1 | const saveLog = require('electron-log'); 2 | const Store = require('electron-store'); 3 | const {_} = require('lodash') 4 | import {AlConst} from '@/common/utils/AlfwConst' 5 | import {getSystemInfo, noticeTheSystemError} from '@/common/utils/AlfwCommon' 6 | const store = new Store(); 7 | 8 | const alfwStore = { 9 | name: "Alntfs", 10 | auto_run: true, 11 | auto_mount: true, 12 | theme: "", 13 | lang: "en", 14 | show_menu: true, 15 | common: { 16 | website_url: "", 17 | install_bug_type: "auto_solve", 18 | how_restart_window: "change_to_bacground", 19 | }, 20 | message: { 21 | mount_show_msg: true, 22 | update_show_msg: true, 23 | error_disk_msg: "", 24 | }, 25 | disk_list: { 26 | history_list: [], 27 | ignore_list: [], 28 | }, 29 | privacy_url: 'https://github.com/ntfstool/ntfstool', 30 | update: { 31 | auto_check: true, 32 | auto_beta_update: true, 33 | update_url: "", 34 | update_beta_url: "", 35 | }, 36 | sudoPwd: false, 37 | fixUnclear:[], 38 | ignoreUSB:[], 39 | firstTimeCache:"" 40 | }; 41 | 42 | 43 | export function checkNeedInitStore() { 44 | if (!store.get("name") || store.get("name") == "undefined") { 45 | setDefaultStore(); 46 | return true; 47 | } 48 | 49 | return false; 50 | } 51 | 52 | 53 | export function setDefaultStore() { 54 | store.set(alfwStore); 55 | saveLog.info("initStore alfwStore"); 56 | } 57 | 58 | export function setStore(key,value) { 59 | store.set(key,value); 60 | } 61 | 62 | export function getStore(key) { 63 | return store.get(key); 64 | } 65 | 66 | export function clearPwd() { 67 | store.set("sudoPwd",null); 68 | console.warn("clearPwd res",store.get("sudoPwd")) 69 | } 70 | 71 | 72 | export function savePassword(password) { 73 | try { 74 | store.set("sudoPwd", password); 75 | if (password != store.get("sudoPwd")) { 76 | noticeTheSystemError("savePassword"); 77 | return false; 78 | } else { 79 | return true; 80 | } 81 | } catch (e) { 82 | noticeTheSystemError("savePassword2"); 83 | return false; 84 | } 85 | } 86 | 87 | export function getSudoPwd() { 88 | try { 89 | return store.get("sudoPwd"); 90 | } catch (e) { 91 | noticeTheSystemError("getSudoPwdError"); 92 | return false; 93 | } 94 | } 95 | 96 | export function setStoreForDiskList(value,callback) { 97 | try{ 98 | console.warn("setStoreForDiskList",value) 99 | store.set(AlConst.DiskList,value); 100 | if(typeof callback == "function") { 101 | callback(); 102 | } 103 | }catch (e) { 104 | saveLog.errror("setStoreForDiskList error",e); 105 | } 106 | } 107 | 108 | export function getStoreForDiskList() { 109 | return store.get(AlConst.DiskList); 110 | } 111 | 112 | 113 | /** 114 | * init the ntfs 115 | * @returns {*} 116 | * @constructor 117 | */ 118 | export function InitSystemInfo() { 119 | var systemInfo = store.get("SystemInfo"); 120 | if(typeof systemInfo == "undefined" || !systemInfo){ 121 | getSystemInfo().then(systeminfo => { 122 | console.warn(systeminfo,"InitSystemInfo") 123 | var version_int = systeminfo.os_version.replace(/[^\d]*([\d]*.[\d]*).*/i, "$1"); 124 | var version_float = parseFloat(version_int); 125 | if(version_float < 10.13){ 126 | systeminfo.mountType = "inner"; 127 | }else{ 128 | systeminfo.mountType = "outer"; 129 | } 130 | 131 | store.set("SystemInfo",systeminfo); 132 | 133 | saveLog.warn(store.get("SystemInfo"),"Create New SystemInfo"); 134 | }); 135 | }else{ 136 | saveLog.warn(store.get("SystemInfo"),"Already Had SystemInfo"); 137 | } 138 | } 139 | 140 | /** 141 | * @returns {string} 142 | */ 143 | export function getMountType(){ 144 | var data = store.get("SystemInfo"); 145 | return _.get(data,"mountType") == "outer" ? "outer" : "inner"; 146 | } 147 | 148 | /** 149 | * @returns {string} 150 | */ 151 | export function getMountNotifyStatus(){ 152 | return store.get("message.mount_show_msg") ? true : false; 153 | } 154 | 155 | 156 | export function watchStatus($val){ 157 | if(typeof $val == "undefined"){ 158 | return store.get("WatchStatus") === false ? false : true; 159 | }else{ 160 | store.set("WatchStatus",$val); 161 | } 162 | } 163 | 164 | export function fixUnclear($index,$status){ 165 | $index = _.replace($index, '/', '_'); 166 | var $key = "fixUnclear."+$index; 167 | console.warn($key,"fixUnclear") 168 | if(typeof $status == "undefined"){ 169 | return store.get($key) ? true : false; 170 | }else{ 171 | store.set($key,$status); 172 | } 173 | } 174 | 175 | /** 176 | * get ignore disk item 177 | * @param $val 178 | * @returns {boolean} 179 | */ 180 | export function ignoreItem($val){ 181 | var ret = store.get("IgnoreItem"); 182 | if(!ret){ 183 | ret = []; 184 | } 185 | if(typeof $val == "undefined"){ 186 | return ret; 187 | }else{ 188 | if(_.indexOf(ret,$val) === -1){ 189 | ret.push($val); 190 | } 191 | store.set("IgnoreItem",ret); 192 | } 193 | } 194 | 195 | /** 196 | * del ignore disk item 197 | * @param $val 198 | * @returns {boolean} 199 | */ 200 | export function delIgnoreItem(name){ 201 | var ret = store.get("IgnoreItem"); 202 | if(!ret){ 203 | return true; 204 | } 205 | ret = ret.filter(function (item) { 206 | if(item == name){ 207 | return false; 208 | }else{ 209 | return true; 210 | } 211 | }); 212 | 213 | console.warn(ret,"save delIgnoreItem") 214 | store.set("IgnoreItem",ret); 215 | return true; 216 | } 217 | 218 | export function delAllIgnore(){ 219 | store.set("IgnoreItem",[]); 220 | console.warn("delAllIgnore ok") 221 | return true; 222 | } 223 | 224 | 225 | export function ignoreUSB($key,$val){ 226 | var cacheKey = "ignoreUSB"; 227 | var ret = store.get(cacheKey); 228 | console.warn(ret,cacheKey); 229 | if(!ret){ 230 | ret = []; 231 | } 232 | if(typeof $val == "undefined"){ 233 | return ret.indexOf($key) >= 0 ? true : false; 234 | }else{ 235 | if(_.indexOf(ret,$key) === -1){ 236 | ret.push($key); 237 | } 238 | store.set(cacheKey,ret); 239 | } 240 | } 241 | 242 | 243 | 244 | -------------------------------------------------------------------------------- /src/common/utils/alEvent.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author service@ntfstool.com 3 | * Copyright (c) 2020 ntfstool.com 4 | * Copyright (c) 2020 alfw.com 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the MIT General Public License as published by 8 | * the Free Software Foundation; either version 2 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * MIT General Public License for more details. 15 | * 16 | * You should have received a copy of the MIT General Public License 17 | * along with this program (in the main directory of the NTFS Tool 18 | * distribution in the file COPYING); if not, write to the service@ntfstool.com 19 | */ 20 | var events = require('events'); 21 | var event = null; 22 | 23 | export function alEvent(){ 24 | return event === null ? (event = new events.EventEmitter()) : event; 25 | } 26 | -------------------------------------------------------------------------------- /src/index.ejs: -------------------------------------------------------------------------------- 1 | <!DOCTYPE html> 2 | <html> 3 | <head> 4 | <meta charset="utf-8"> 5 | <title>NTFS Tool</title> 6 | <% if (htmlWebpackPlugin.options.nodeModules) { %> 7 | <!-- Add `node_modules/` to global paths so `require` works properly in development --> 8 | <script> 9 | require('module').globalPaths.push('<%= htmlWebpackPlugin.options.nodeModules.replace(/\\/g, '\\\\') %>') 10 | </script> 11 | <% } %> 12 | </head> 13 | 14 | <style> 15 | 16 | </style> 17 | <body> 18 | <div id="app"></div> 19 | <!-- Set `__static` path to static files in production --> 20 | <script> 21 | if (process.env.NODE_ENV !== 'development') window.__static = require('path').join(__dirname, '/static').replace(/\\/g, '\\\\') 22 | </script> 23 | <!-- webpack builds are automatically injected --> 24 | </body> 25 | </html> 26 | -------------------------------------------------------------------------------- /src/main/index.dev.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author service@ntfstool.com 3 | * Copyright (c) 2020 ntfstool.com 4 | * Copyright (c) 2020 alfw.com 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the MIT General Public License as published by 8 | * the Free Software Foundation; either version 2 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * MIT General Public License for more details. 15 | * 16 | * You should have received a copy of the MIT General Public License 17 | * along with this program (in the main directory of the NTFS Tool 18 | * distribution in the file COPYING); if not, write to the service@ntfstool.com 19 | */ 20 | require('./index') 21 | -------------------------------------------------------------------------------- /src/main/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author service@ntfstool.com 3 | * Copyright (c) 2020 ntfstool.com 4 | * Copyright (c) 2020 alfw.com 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the MIT General Public License as published by 8 | * the Free Software Foundation; either version 2 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * MIT General Public License for more details. 15 | * 16 | * You should have received a copy of the MIT General Public License 17 | * along with this program (in the main directory of the NTFS Tool 18 | * distribution in the file COPYING); if not, write to the service@ntfstool.com 19 | */ 20 | import {app, ipcMain, ipcRenderer, Notification, dialog, shell, powerMonitor} from 'electron' 21 | 22 | const saveLog = require('electron-log'); 23 | 24 | import {checkNeedInitStore, setDefaultStore, InitSystemInfo, getStore} from '../common/utils/AlfwStore.js' 25 | 26 | import { 27 | openPages, 28 | openPageByName, 29 | exitAll, 30 | doChangeLangEvent, 31 | doDesktopAppEvent, 32 | doUpdateViewEvent, 33 | doCreteFileEvent, 34 | doNotSudoerEvent, 35 | goSleep, 36 | goResume 37 | } from '../main/lib/PageConfig.js' 38 | import {AlConst} from "@/common/utils/AlfwConst"; 39 | import {checkUpdate} from "@/common/utils/AlfwCommon"; 40 | 41 | app.disableHardwareAcceleration();//disable gpu 42 | 43 | process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = '1'; 44 | 45 | app.allowRendererProcessReuse = true; 46 | 47 | try { 48 | app.on('ready', () => { 49 | InitSystemInfo(); 50 | 51 | if (checkNeedInitStore()) { 52 | //first run 53 | try { 54 | app.setLoginItemSettings({ 55 | openAtLogin: true, 56 | openAsHidden: true 57 | }) 58 | } catch (e) { 59 | console.error(e, "changeAutoRun Error0"); 60 | } 61 | } 62 | 63 | if (getStore("update.auto_check")) { 64 | checkUpdate(); 65 | } 66 | 67 | openPages(); 68 | 69 | powerMonitor.on('suspend', () => { 70 | saveLog.warn("++++++++++++++++++++++ system sleep ++++++++++++++++++++++"); 71 | goSleep(); 72 | }) 73 | 74 | powerMonitor.on('resume', () => { 75 | saveLog.warn("++++++++++++++++++++++ system resume ++++++++++++++++++++++"); 76 | goResume(); 77 | }) 78 | }) 79 | 80 | 81 | app.on('before-quit', () => { 82 | exitAll(); 83 | }) 84 | 85 | //for ctrl + c exit 86 | process.on("SIGINT", function () { 87 | console.log('WTF') 88 | exitAll(); 89 | process.exit(0) 90 | 91 | }); 92 | 93 | //Main process listen message 94 | ipcMain.on('IPCMain', function (event, arg) { 95 | console.warn({arg}, "++++++++++++++++++ IPCMain ++++++++++++++++++"); 96 | var chanelName, actionData = ""; 97 | if (typeof arg.name != "undefined") { 98 | chanelName = arg.name; 99 | } else { 100 | chanelName = arg; 101 | } 102 | 103 | if (typeof arg.data != "undefined") { 104 | actionData = arg.data; 105 | } 106 | 107 | if (chanelName == "exitAll") { 108 | exitAll(); 109 | } else if (chanelName == "resetConf") { 110 | setDefaultStore(); 111 | setTimeout(function () { 112 | app.relaunch() 113 | exitAll(); 114 | }, 1000); 115 | event.returnValue = 'succ'; 116 | } else if (chanelName == "openPageByName") { 117 | openPageByName(actionData); 118 | } else if (chanelName == "ChangeLangEvent") { 119 | doChangeLangEvent(actionData); 120 | } else if (chanelName == "AutoRunEvent") { 121 | console.warn(actionData, "Main AutoRunEvent"); 122 | try { 123 | app.setLoginItemSettings({ 124 | openAtLogin: actionData, 125 | openAsHidden: true 126 | }) 127 | } catch (e) { 128 | console.error(e, "changeAutoRun Error"); 129 | } 130 | } else if (chanelName == AlConst.SudoPwdEvent) { 131 | console.warn("Main SudoPwdEvent Start >>>>>>>>>>>>>>>>>>>>") 132 | openPageByName("openSudoPage"); 133 | } else if (chanelName == AlConst.InstallFuseEvent) { 134 | console.warn("Main InstallFuseEvent Start >>>>>>>>>>>>>>>>>>>>") 135 | openPageByName("openInstallFusePage"); 136 | } else if (chanelName == AlConst.GlobalViewUpdate) { 137 | console.warn("Main GlobalViewUpdate Start >>>>>>>>>>>>>>>>>>>>") 138 | doUpdateViewEvent(); 139 | } else if (chanelName == "CreteFileEvent") { 140 | console.warn(actionData, "Main CreteFileEvent Start >>>>>>>>>>>>>>>>>>>>") 141 | doCreteFileEvent(actionData); 142 | } else if (chanelName == AlConst.NotSudoerEvent) { 143 | doNotSudoerEvent(actionData); 144 | 145 | } 146 | }) 147 | } catch (e) { 148 | saveLog.error(e, "mainError exitAll"); 149 | exitAll(); 150 | } 151 | 152 | 153 | 154 | 155 | -------------------------------------------------------------------------------- /src/main/lib/AutoLaunchManager.js: -------------------------------------------------------------------------------- 1 | import { app } from 'electron' 2 | 3 | export default class AutoLaunchManager { 4 | enable () { 5 | return new Promise((resolve, reject) => { 6 | const enabled = app.getLoginItemSettings().openAtLogin 7 | if (enabled) { 8 | resolve() 9 | } 10 | 11 | app.setLoginItemSettings({ 12 | openAtLogin: true, 13 | // For Windows 14 | args: [ 15 | '--opened-at-login=1' 16 | ] 17 | }) 18 | resolve() 19 | }) 20 | } 21 | 22 | disable () { 23 | return new Promise((resolve, reject) => { 24 | app.setLoginItemSettings({ openAtLogin: false }) 25 | resolve() 26 | }) 27 | } 28 | 29 | isEnabled () { 30 | return new Promise((resolve, reject) => { 31 | const enabled = app.getLoginItemSettings().openAtLogin 32 | resolve(enabled) 33 | }) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/lib/EnergyManager.js: -------------------------------------------------------------------------------- 1 | import { powerSaveBlocker } from 'electron' 2 | 3 | let psbId 4 | export default class EnergyManager { 5 | startPowerSaveBlocker () { 6 | if (psbId && powerSaveBlocker.isStarted(psbId)) { 7 | return 8 | } 9 | 10 | psbId = powerSaveBlocker.start('prevent-app-suspension') 11 | console.log('startPowerSaveBlocker===>', psbId) 12 | } 13 | 14 | stopPowerSaveBlocker () { 15 | if (typeof psbId === 'undefined' || !powerSaveBlocker.isStarted(psbId)) { 16 | return 17 | } 18 | 19 | powerSaveBlocker.stop(psbId) 20 | console.log('stopPowerSaveBlocker===>', psbId) 21 | psbId = undefined 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/menu/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "menu": [ 3 | { 4 | "id": "menu.app", 5 | "submenu": [ 6 | { "id": "app.about", "command": "application:about", "command-before": "application:show,index" }, 7 | { "type": "separator" }, 8 | { "id": "app.preferences", "command": "application:preferences" }, 9 | { "id": "app.check-for-updates", "command": "application:check-for-updates" }, 10 | { "id": "app.hide", "role": "hide" }, 11 | { "id": "app.hide-others", "role": "hideothers" }, 12 | { "id": "app.unhide", "role": "unhide" }, 13 | { "type": "separator" }, 14 | { "id": "app.quit", "role": "quit" } 15 | ] 16 | }, 17 | { 18 | "id": "menu.task", 19 | "submenu": [ 20 | { "id": "task.new-task", "command": "application:new-task", "command-after": "application:show,index" }, 21 | { "id": "task.new-bt-task", "command": "application:new-bt-task", "command-arg": "torrent", "command-after": "application:show,index" }, 22 | { "id": "task.open-file", "command": "application:open-file", "command-before": "application:show,index" }, 23 | { "type": "separator" }, 24 | { "id": "task.pause-task", "command": "application:pause-task" }, 25 | { "id": "task.resume-task", "command": "application:resume-task" }, 26 | { "id": "task.delete-task", "command": "application:delete-task" }, 27 | { "id": "task.move-task-up", "command": "application:move-task-up" }, 28 | { "id": "task.move-task-down", "command": "application:move-task-down" }, 29 | { "type": "separator" }, 30 | { "id": "task.pause-all-task", "command": "application:pause-all-task" }, 31 | { "id": "task.resume-all-task", "command": "application:resume-all-task" }, 32 | { "type": "separator" }, 33 | { "id": "task.clear-recent-tasks", "command": "application:clear-recent-tasks" } 34 | ] 35 | }, 36 | { 37 | "id": "menu.edit", 38 | "submenu": [ 39 | { "id": "edit.undo", "role": "undo" }, 40 | { "id": "edit.redo", "role": "redo" }, 41 | { "type": "separator" }, 42 | { "id": "edit.cut", "role": "cut" }, 43 | { "id": "edit.copy", "role": "copy" }, 44 | { "id": "edit.paste", "role": "paste" }, 45 | { "id": "edit.delete", "role": "delete" }, 46 | { "id": "edit.select-all", "role": "selectall" } 47 | ] 48 | }, 49 | { 50 | "role": "window", 51 | "id": "menu.window", 52 | "submenu": [ 53 | { "id": "window.reload", "role": "reload" }, 54 | { "id": "window.close", "role": "close" }, 55 | { "id": "window.minimize", "role": "minimize" }, 56 | { "id": "window.zoom", "role": "zoom" }, 57 | { "id": "window.toggle-fullscreen", "role": "togglefullscreen" }, 58 | { "type": "separator" }, 59 | { "id": "window.front", "role": "front" } 60 | ] 61 | }, 62 | { 63 | "role": "help", 64 | "id": "menu.help", 65 | "submenu": [ 66 | { "id": "help.official-website", "command": "help:official-website" }, 67 | { "id": "help.manual", "command": "help:manual" }, 68 | { "id": "help.release-notes", "command": "help:release-notes" }, 69 | { "type": "separator" }, 70 | { "id": "help.report-problem", "command": "help:report-problem" }, 71 | { "type": "separator" }, 72 | { "id": "help.toggle-dev-tools", "role": "toggledevtools" } 73 | ] 74 | } 75 | ] 76 | } 77 | -------------------------------------------------------------------------------- /src/renderer/App.vue: -------------------------------------------------------------------------------- 1 | <template> 2 | <div id="app"> 3 | <router-view></router-view> 4 | </div> 5 | </template> 6 | 7 | <script> 8 | export default { 9 | name: 'ntfstool' 10 | } 11 | </script> -------------------------------------------------------------------------------- /src/renderer/assets/disk01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/src/renderer/assets/disk01.png -------------------------------------------------------------------------------- /src/renderer/assets/disk02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/src/renderer/assets/disk02.png -------------------------------------------------------------------------------- /src/renderer/assets/disk03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/src/renderer/assets/disk03.png -------------------------------------------------------------------------------- /src/renderer/assets/disk04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/src/renderer/assets/disk04.png -------------------------------------------------------------------------------- /src/renderer/assets/disk2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/src/renderer/assets/disk2.png -------------------------------------------------------------------------------- /src/renderer/assets/general.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/src/renderer/assets/general.png -------------------------------------------------------------------------------- /src/renderer/assets/ignoredisk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/src/renderer/assets/ignoredisk.png -------------------------------------------------------------------------------- /src/renderer/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/src/renderer/assets/logo.png -------------------------------------------------------------------------------- /src/renderer/assets/notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/src/renderer/assets/notification.png -------------------------------------------------------------------------------- /src/renderer/assets/opendisk.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1582476844693" class="icon" viewBox="0 0 1513 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10098" xmlns:xlink="http://www.w3.org/1999/xlink" width="295.5078125" height="200"><defs><style type="text/css"></style></defs><path d="M1333.835122 128.00032h-549.115882a63.99952 63.99952 0 0 1-45.439659-18.559861L649.040258 18.561141A63.99952 63.99952 0 0 0 603.600598 0.00128H181.843762a63.99952 63.99952 0 0 0-63.99952 63.99952v895.99328a63.99952 63.99952 0 0 0 63.99952 63.99952h1151.99136a63.99952 63.99952 0 0 0 63.99952-63.99952V191.99984a63.99952 63.99952 0 0 0-63.99952-63.99952z m-1151.99136 0V64.0008h412.796904l63.99952 63.99952z" fill="#1967D2" p-id="10099"></path><path d="M1449.674253 296.319058H780.879269a63.99952 63.99952 0 0 1-40.319698-14.079895l-92.799304-76.159429A63.99952 63.99952 0 0 0 607.44057 191.99984H64.72464a63.99952 63.99952 0 0 0-63.99952 73.599448l108.159189 703.99472a63.99952 63.99952 0 0 0 63.99952 54.399592H1344.71504a63.99952 63.99952 0 0 0 63.99952-53.119602l104.319218-599.675502a63.99952 63.99952 0 0 0-63.359525-74.879438z" fill="#4C9AFF" p-id="10100"></path></svg> -------------------------------------------------------------------------------- /src/renderer/assets/privacy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/src/renderer/assets/privacy.png -------------------------------------------------------------------------------- /src/renderer/assets/setting2.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1581265202530" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="44359" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M488.85 128h46.3l16.8 96.9H472.05zM683.95 167.85l40.1 23.2-33.9 92.25-69.2-39.9zM832.95 299.95l23.2 40.1L780.6 403l-39.9-69.15zM896 488.85v46.3l-96.9 16.8V472.05zM856.15 683.95l-23.2 40.1-92.25-33.9 39.9-69.2zM724.05 832.95l-40.1 23.2-63-75.55 69.2-39.9zM535.15 896h-46.3l-16.8-96.9h79.9zM340.05 856.15l-40.1-23.2 33.9-92.25 69.15 39.9zM191.05 724.05l-23.2-40.1 75.55-63 39.9 69.2zM128 535.15v-46.3l96.9-16.8v79.9zM167.85 340.05l23.2-40.1 92.25 33.9L243.4 403zM299.95 191.05l40.1-23.2L403 243.4l-69.15 39.9z" fill="#455A64" p-id="44360"></path><path d="M656.6 229.5c-38.85-19.95-82.4-32.1-128.5-34.4-5.35-0.25-10.7-0.4-16.1-0.4-5.4 0-10.75 0.15-16.1 0.4-46.1 2.3-89.65 14.45-128.5 34.4-9.55 4.9-18.8 10.25-27.75 16.05-18.8 12.2-36.25 26.3-52 42.1a319.325 319.325 0 0 0-42.1 52c-5.8 8.95-11.15 18.2-16.05 27.75-19.95 38.85-32.1 82.4-34.4 128.5-0.25 5.35-0.4 10.7-0.4 16.1 0 5.4 0.15 10.75 0.4 16.1 2.3 46.1 14.45 89.65 34.4 128.5 4.9 9.55 10.25 18.8 16.05 27.75 12.2 18.8 26.3 36.25 42.1 52 15.8 15.8 33.2 29.9 52 42.1 8.95 5.8 18.2 11.15 27.75 16.05 38.85 19.95 82.4 32.1 128.5 34.4 5.35 0.25 10.7 0.4 16.1 0.4s10.75-0.15 16.1-0.4c46.1-2.3 89.65-14.45 128.5-34.4 9.55-4.9 18.8-10.25 27.75-16.05 18.8-12.2 36.25-26.3 52-42.1 15.8-15.8 29.9-33.2 42.1-52 5.8-8.95 11.15-18.2 16.05-27.75 19.95-38.85 32.1-82.4 34.4-128.5 0.25-5.35 0.4-10.7 0.4-16.1 0-5.4-0.15-10.75-0.4-16.1-2.3-46.1-14.45-89.65-34.4-128.5-4.9-9.55-10.25-18.8-16.05-27.75-12.2-18.8-26.3-36.25-42.1-52a319.325 319.325 0 0 0-52-42.1c-8.95-5.8-18.25-11.15-27.75-16.05zM512 299.15c58.75 0 112 23.8 150.5 62.35 38.5 38.5 62.35 91.75 62.35 150.5s-23.8 112-62.35 150.5c-38.5 38.5-91.75 62.35-150.5 62.35S400 701 361.5 662.5s-62.35-91.75-62.35-150.5S322.95 400 361.5 361.5c38.5-38.5 91.7-62.35 150.5-62.35z" fill="#90A4AE" p-id="44361"></path><path d="M639.75 384.25c-32.7-32.7-77.85-52.9-127.75-52.9-49.9 0-95.05 20.2-127.75 52.9S331.35 462.1 331.35 512c0 49.9 20.2 95.05 52.9 127.75s77.85 52.9 127.75 52.9c49.9 0 95.05-20.2 127.75-52.9s52.9-77.85 52.9-127.75c0-49.9-20.2-95.05-52.9-127.75zM512 431.55c22.2 0 42.3 9 56.9 23.55 14.55 14.55 23.55 34.65 23.55 56.9 0 22.2-9 42.3-23.55 56.9-14.55 14.55-34.65 23.55-56.9 23.55-22.2 0-42.3-9-56.9-23.55-14.55-14.55-23.55-34.65-23.55-56.9 0-22.2 9-42.3 23.55-56.9 14.6-14.55 34.7-23.55 56.9-23.55z" fill="#455A64" p-id="44362"></path></svg> -------------------------------------------------------------------------------- /src/renderer/assets/theme1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/src/renderer/assets/theme1.png -------------------------------------------------------------------------------- /src/renderer/assets/theme2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/src/renderer/assets/theme2.png -------------------------------------------------------------------------------- /src/renderer/assets/update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/src/renderer/assets/update.png -------------------------------------------------------------------------------- /src/renderer/main.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author service@ntfstool.com 3 | * Copyright (c) 2020 ntfstool.com 4 | * Copyright (c) 2020 alfw.com 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the MIT General Public License as published by 8 | * the Free Software Foundation; either version 2 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * MIT General Public License for more details. 15 | * 16 | * You should have received a copy of the MIT General Public License 17 | * along with this program (in the main directory of the NTFS Tool 18 | * distribution in the file COPYING); if not, write to the service@ntfstool.com 19 | */ 20 | 21 | import Vue from 'vue' 22 | import axios from 'axios' 23 | import App from './App' 24 | import router from '@/common/router/index' 25 | 26 | import ElementUI from 'element-ui' 27 | import 'element-ui/lib/theme-chalk/index.css' 28 | import '@/renderer/theme/ntfstool.css' 29 | 30 | import messages from '@/common/lang/index' 31 | import ElementLocale from 'element-ui/lib/locale' 32 | import VueI18n from 'vue-i18n' 33 | const Store = require('electron-store'); 34 | const store = new Store(); 35 | 36 | Vue.use(ElementUI) 37 | Vue.use(VueI18n) 38 | let langNow = store.get("lang", "en"); 39 | 40 | 41 | const i18n = new VueI18n({locale: langNow,fallbackLocale: "en",messages}); 42 | 43 | ElementLocale.i18n((key, value) => i18n.t(key, value)) 44 | 45 | if (!process.env.IS_WEB) Vue.use(require('vue-electron')) 46 | 47 | Vue.http = Vue.prototype.$http = axios 48 | 49 | Vue.config.productionTip = false 50 | Vue.config.devtools = false; 51 | 52 | new Vue({ 53 | components: {App}, 54 | router, 55 | i18n, 56 | store, 57 | template: '<App/>' 58 | }).$mount('#app') 59 | -------------------------------------------------------------------------------- /src/renderer/page/Dialog.vue: -------------------------------------------------------------------------------- 1 | <template> 2 | <el-container class="al-main"> 3 | <div class="sudo_box" v-show="show_index == 'sudo_box'"> 4 | <div class="left"> 5 | <img src="../../../static/lock.svg"> 6 | </div> 7 | <div class="right"> 8 | <div class="title"> 9 | <span>“NtfsTool” {{$t('Attemptingtocallsystemdiskoperationpermissions')}}</span> 10 | <span>{{$t('Enterthepasswordtoallowthisoperation')}}</span> 11 | </div> 12 | <div class="input"> 13 | <table> 14 | <tr> 15 | <td class="aleft"> {{$t('Username')}}:</td> 16 | <td> 17 | <input v-if="workname" name="username" v-model="workname" disabled> 18 | <input v-else name="username" v-model="workname"> 19 | </td> 20 | </tr> 21 | <tr> 22 | <td class="aleft">{{$t('Password')}}:</td> 23 | <td><input name="workpwd" v-on:keyup.enter="checkSudoPwd" 24 | ref="workpwd" type="password" v-model="workpwd"></td> 25 | </tr> 26 | </table> 27 | </div> 28 | <div class="btn-box"> 29 | <span :class="[btnDisable ? 'btn-disable' : 'btn-default']" @click="cancel()">{{$t('Cancel')}}</span> 30 | 31 | <button :class="[btnDisable ? 'btn-active-disable' : 'btn-active']" @click="checkSudoPwd()">{{$t('Ulock')}} 32 | </button> 33 | </div> 34 | </div> 35 | </div> 36 | 37 | <div class="install_fuse" v-show="show_index == 'install_fuse'"> 38 | <div> 39 | <div class="iboxh"> 40 | <img style="height: 80px;user-select: none;" 41 | src="../../../static/osxfuse-home.png"> 42 | <div class="iboxh_text"> 43 | <div>{{$t('LostFuse')}}</div> 44 | <div style="margin-top: 5px;"> 45 | <i class="iconfont iconjump06" style="font-size: 16px;color: black;" @click="goFuseWebSite"> 46 |  47 | <span style=" font-size: 12px;font-family: cursive;vertical-align: middle;"> 48 | Fuse{{$t('Introduction')}} 49 | </span> 50 | </i> 51 | </div> 52 | </div> 53 | </div> 54 | <div class="btn-box" style="display: flex;justify-content: flex-end;margin: 0 20px;"> 55 | <span :class="[btnDisable ? 'btn-disable' : 'btn-default']" @click="cancel_installfuse()">{{$t('Cancel')}}</span> 56 | 57 | <button :class="[btnDisable ? 'btn-active-disable' : 'btn-active']" @click="installfuse()">{{$t('Confirm')}} 58 | </button> 59 | </div> 60 | </div> 61 | </div> 62 | 63 | <div class="about_box" v-show="show_index == 'about_box'"> 64 | <div class="main_about"> 65 | <div> 66 | <img @click="openMainsite()" style="width: 80px;height: 80px;user-select: none;" 67 | src="../assets/logo.png"> 68 | </div> 69 | <div style="display: none;"> 70 | <img :src="statisticsImg"> 71 | </div> 72 | <div style="font-weight: bold;"> 73 | NTFSTool for MAC 74 | </div> 75 | 76 | <!--<div @click="test()" style="font-weight: bold;">--> 77 | <!--Flash Test--> 78 | <!--</div>--> 79 | 80 | <div style="font-size: 10px;"> 81 | {{$t('OS')}} {{os_version}} 82 | </div> 83 | 84 | <div style="font-size: 10px;"> 85 | {{$t('SerialNumber')}} {{serial_number}} 86 | </div> 87 | 88 | <div style="font-size: 10px;"> 89 | {{$t('Version')}} {{version}} (3245) <i @click="openGitHub()" class="iconfont" style="margin-left:5px;font-size: 12px; 90 | color: black;"></i> 91 | </div> 92 | <div style=" font-size: 11px;"> 93 | Copyright © 2020 <u style="margin: 0 5px;cursor: pointer" @click="openMainsite()">NtfsTool</u> Inc. 94 | </div> 95 | </div> 96 | </div> 97 | </el-container> 98 | </template> 99 | <script> 100 | import dialog from '@/renderer/lib/dialog.js' 101 | export default dialog 102 | </script> 103 | 104 | <style scoped src="../theme/dialog.scss" lang="scss"></style> -------------------------------------------------------------------------------- /src/renderer/theme/dialog.scss: -------------------------------------------------------------------------------- 1 | .sudo_box { 2 | display: flex; 3 | background: #efefef; 4 | justify-content: space-between; 5 | flex-direction: row; 6 | height: 100vh; 7 | width: 100vw; 8 | 9 | .left { 10 | //background: #77ff77; 11 | width: 30%; 12 | display: flex; 13 | flex-direction: column; 14 | /* justify-content: center; */ 15 | align-items: center; 16 | padding-top: 20px; 17 | 18 | img { 19 | width: 80%; 20 | //background: green; 21 | } 22 | } 23 | 24 | .right { 25 | display: flex; 26 | width: 70%; 27 | //background: #66b1ff; 28 | justify-content: space-between; 29 | flex-direction: column; 30 | padding: 20px 10px; 31 | 32 | .title { 33 | display: flex; 34 | flex-direction: column; 35 | 36 | span:first-child { 37 | font-weight: bold; 38 | } 39 | 40 | span { 41 | font-size: 14px; 42 | line-height: 25px; 43 | } 44 | } 45 | 46 | .input { 47 | display: flex; 48 | margin-right: 20px; 49 | 50 | table { 51 | width: 100%; 52 | //background: red; 53 | 54 | .aleft { 55 | text-align: right; 56 | font-size: 13px; 57 | } 58 | 59 | input { 60 | width: 100%; 61 | height: 18px; 62 | background-color: white; 63 | font-size: 14px; 64 | padding-left: 3px; 65 | line-height: 15px; 66 | margin: 3px 0; 67 | } 68 | } 69 | } 70 | 71 | .btn-box { 72 | display: flex; 73 | justify-content: flex-end; 74 | margin-right: 5px; 75 | } 76 | } 77 | } 78 | .promotion_expenses { 79 | border: 0px solid #FA5D5D; 80 | background-color: white; 81 | font-family: PingFangSC-Regular,sans-serif; 82 | font-size: 11px; 83 | color: #FA5D5D; 84 | letter-spacing: 0.39px; 85 | float: right; 86 | margin-top: 2px; 87 | height: 25px; 88 | padding-bottom: 4px; 89 | padding-top: 4px; 90 | float: right; 91 | -webkit-appearance:none; 92 | position: relative; 93 | background-color: white; 94 | } 95 | .promotion_expenses::after{ 96 | position: absolute; 97 | content: ""; 98 | border: 1px solid #FA5D5D; 99 | border-radius: 24px; 100 | width: 200%; 101 | height: 200%; 102 | top: 0; 103 | left: 0; 104 | transform: scale(.5); 105 | transform-origin: 0 0; 106 | -webkit-transform: scale(.5); 107 | -webkit-transform-origin: 0 0; 108 | } 109 | 110 | .about_box { 111 | background: #f1f1f1; 112 | width: 100%; 113 | height: 100vh; 114 | display: flex; 115 | flex-direction: column; 116 | padding-top: 10px; 117 | } 118 | 119 | .main_about div { 120 | display: flex; 121 | justify-content: center; 122 | margin: 5px; 123 | font-size: 14px; 124 | user-select: text; 125 | } 126 | 127 | .install_fuse .iboxh{ 128 | display: flex; 129 | margin: 20px 20px 0 20px; 130 | } 131 | 132 | .iboxh_text{ 133 | font-size: 15px; 134 | padding-left: 10px; 135 | font-weight: 200; 136 | } 137 | 138 | 139 | -------------------------------------------------------------------------------- /src/renderer/theme/tray.css: -------------------------------------------------------------------------------- 1 | html, body, #app { 2 | background: transparent; 3 | /*background: #f1f1f1 !important;*/ 4 | /*background: rgba(245, 247, 250, 0.63) !important;*/ 5 | } 6 | 7 | .al-main { 8 | display: flex; 9 | flex-direction: column; 10 | margin-top: -10px; 11 | background: transparent; 12 | } 13 | 14 | .topsj { 15 | height: 20px; 16 | text-align: center; 17 | } 18 | 19 | .topsj div { 20 | margin-top: 5px; 21 | } 22 | 23 | .topsj div i { 24 | font-size: 20px; 25 | height: 20px; 26 | color: #ebebeb; 27 | } 28 | 29 | .ico_color { 30 | color: #797979; 31 | } 32 | 33 | .trayref { 34 | background: rgb(243, 243, 243); 35 | border-radius: 8px; 36 | padding-bottom: 15px; 37 | /*overflow: hidden;*/ 38 | } 39 | 40 | .trayref_h { 41 | background: #ebebeb; 42 | width: 100%; 43 | border-bottom: 1px solid #d8d5d5; 44 | border-top-left-radius: 8px; 45 | border-top-right-radius: 8px; 46 | } 47 | 48 | .trayref_h_1 { 49 | height: 40px; 50 | display: flex; 51 | justify-content: space-between; 52 | margin: 0 20px; 53 | /*background: red;*/ 54 | } 55 | 56 | .trayref_h_1_1 { 57 | display: flex; 58 | flex-direction: column; 59 | justify-content: center; 60 | } 61 | 62 | .trayref_h_1_1sub_1 { 63 | display: flex; 64 | justify-content: center; 65 | } 66 | 67 | .trayref_h_1_2 { 68 | display: flex; 69 | flex-direction: column; 70 | justify-content: center; 71 | } 72 | 73 | .trayref_h_1_2_1 { 74 | display: flex; 75 | justify-content: center; 76 | } 77 | 78 | .trayref_h_1_2_1 span { 79 | font-family: PingFangSC-Regular,sans-serif; 80 | } 81 | 82 | .trayref_h_1_3 { 83 | display: flex; 84 | flex-direction: column; 85 | justify-content: center; 86 | } 87 | 88 | .trayref_h_1_3_1 { 89 | display: flex; 90 | justify-content: center; 91 | } 92 | 93 | 94 | .diskb { 95 | display: flex; 96 | padding: 0 20px; 97 | margin: 10px 0; 98 | } 99 | 100 | .diskb_1 { 101 | display: flex; 102 | justify-content: center; 103 | flex-direction: column; 104 | /*background: pink;*/ 105 | } 106 | 107 | .diskb_2 { 108 | display: flex; 109 | justify-content: center; 110 | flex-direction: column; 111 | /*background: grey;*/ 112 | } 113 | 114 | .diskb_2 img { 115 | width: 44px; 116 | height: 50px; 117 | margin-right: 10px; 118 | } 119 | 120 | .diskb_3 { 121 | width: 100%; 122 | display: flex; 123 | flex-direction: column; 124 | justify-content: space-between; 125 | /*background: white;*/ 126 | } 127 | 128 | .diskb_3_1 { 129 | display: flex; 130 | justify-content: space-between; 131 | color: #4c4d4f; 132 | font-family: PingFangSC-Regular,sans-serif; 133 | display: flex; 134 | align-items: center; 135 | /*background: green*/ 136 | } 137 | 138 | .diskb_3_1 i { 139 | color: #67c23a; 140 | font-size: 10px; 141 | } 142 | 143 | .diskb_3_1 span { 144 | color: #444446; 145 | font-size: 15px; 146 | } 147 | 148 | .diskb_3_2 { 149 | width: 100%; 150 | 151 | border-radius: 10px; 152 | overflow: hidden; 153 | background: #c7c4c5; 154 | display: flex; 155 | align-items: center; 156 | } 157 | 158 | .diskb_3_2_1 { 159 | height: 4px; 160 | border-radius: 4px; 161 | width: 80%; 162 | background: #409eff; 163 | } 164 | 165 | .diskb_3_3 { 166 | display: flex; 167 | justify-content: space-between; 168 | color: #878688; 169 | font-family: PingFangSC-Regular,sans-serif; 170 | display: flex; 171 | align-items: center; 172 | /*background: green*/ 173 | } 174 | 175 | .menu_box{ 176 | background: rgb(214, 214, 214); 177 | position: absolute; 178 | top: 20px; 179 | right: 0px; 180 | width: max-content; 181 | z-index: 9999999; 182 | border: 1px solid #b5a8a8; 183 | border-radius: 3px; 184 | padding: 10px 0; 185 | } 186 | .menu_box .line{ 187 | display:flex; margin: 5px 0;background: #a5a0a0;height: 1px; 188 | } 189 | .menu_box div{ 190 | padding: 0 20px; 191 | cursor: pointer; 192 | font-size: 14px; 193 | color: black; 194 | } 195 | 196 | .menu_box div:hover{ 197 | background: #409eff; 198 | color: white; 199 | } -------------------------------------------------------------------------------- /static/lock.svg: -------------------------------------------------------------------------------- 1 | <svg id="Capa_1" enable-background="new 0 0 512 512" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg"><g><path d="m336.649 181.873v50.04l74.357-.001v-50.039l-37.178-20.016z" fill="#87a0af"/><path d="m100.994 181.873v50.04h74.357v-50.04l-37.179-20.016z" fill="#b4d2d7"/><path d="m411.006 155.006c0-85.607-69.398-155.006-155.006-155.006l-20.016 39 20.016 35.357c44.47 0 80.649 36.179 80.649 80.649v26.867h74.357z" fill="#b4d2d7"/><path d="m175.351 155.006c0-44.47 36.179-80.649 80.649-80.649v-74.357c-85.608 0-155.006 69.399-155.006 155.006v26.867h74.357z" fill="#e1ebf0"/><path d="m256 213.476-20.016 146.857 20.016 151.667c113.66 0 202.845-31.893 202.845-31.893v-234.738s-89.185-31.893-202.845-31.893z" fill="#ffb655"/><path d="m53.155 245.369v234.738s89.186 31.893 202.845 31.893v-298.524c-113.66 0-202.845 31.893-202.845 31.893z" fill="#ffda44"/><path d="m241 361h30v62.821h-30z" fill="#ff7c48"/><path d="m256 286.655-20.016 46.867 20.016 46.867c25.884 0 46.867-20.983 46.867-46.867s-20.983-46.867-46.867-46.867z" fill="#ff7c48"/><path d="m209.133 333.522c0 25.884 20.983 46.867 46.867 46.867v-93.734c-25.884 0-46.867 20.983-46.867 46.867z" fill="#ffb655"/></g></svg> -------------------------------------------------------------------------------- /static/menu/256x256@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/static/menu/256x256@2x.png -------------------------------------------------------------------------------- /static/menu/AINTFS18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/static/menu/AINTFS18.png -------------------------------------------------------------------------------- /static/menu/AINTFS18@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/static/menu/AINTFS18@2x.png -------------------------------------------------------------------------------- /static/menu/AINTFS18@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/static/menu/AINTFS18@3x.png -------------------------------------------------------------------------------- /static/menu/AINTFS_active18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/static/menu/AINTFS_active18.png -------------------------------------------------------------------------------- /static/menu/AINTFS_active18@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/static/menu/AINTFS_active18@2x.png -------------------------------------------------------------------------------- /static/menu/AINTFS_active18@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/static/menu/AINTFS_active18@3x.png -------------------------------------------------------------------------------- /static/osxfuse-home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntfstool/ntfstool/02aaaacb97d67bf8a20f192e5e9d75f0fdd7caf0/static/osxfuse-home.png --------------------------------------------------------------------------------