Ребята незнаю как написать javascript, который создает json
с одинаковой структурой как и в оригинальном файле, но только на одном языке например в cz-CZ
и естественно чтоб содержал только отсутствующии лейблы.
P.S лейблы это все элементы страницы. Парсер написал, но опять же незнаю как передать название файла источника и язык источника в качестве входного параметра .
var fs = require("fs");
fs.readFile('labels.json', function (err, data) {
if (err) {
return console.error(err);
}
console.log(data.toString());
var obj = JSON.parse(data)
fs.writeFile('labels.cz-CZ.json');
});
пример самого json файла, в нем лейблы то есть содержание страницы на двух языках, надо чтоб javascript как бы создавал json в котором лейблы только те которые не перевелись или перевода не существует
"Shell": {
"Profile": "Profile",
"SignOut": "Sign out",
"CloseView": "Close current view",
"Settings": "Settings",
"ModifySettings": "Modify settings",
"SettingsModified": "Settings have been changed",
"Help": "Help"
}
Думаю вам нужно просто сравнить два объекта.
Предположим мы загрузили два объекта из файлов:
var target = JSON.parse(dataDefault);
var current = JSON.parse(dataCZ);
Далее сравниваем все проперти, если такой проперти нет или ее значение равно исходному то записываем в результирующий объект:
var result = {};
for (var key in target) {
if (!target.hasOwnProperty(key))
continue;
if (target[key] == current[key] || !current[key]) {
result[key] = target[key];
}
}
Далее сохраняем:
fs.writeFile("result.json", JSON.stringify(result));
Обновление:
Смотрю у вас сложная структура, нужно пройтись по всем вложенным значениям рекурсивно. Можно добавить вот такую функцию:
function compare(target, current){
var result = {};
for (var key in target) {
if (!target.hasOwnProperty(key))
continue;
if(typeof target[key] == "object"){
result[key] = compare(target[key], current[key])
} else {
if (target[key] == current[key] || !current[key]) {
result[key] = target[key];
}
}
}
return result;
}
И вызвать:
fs.writeFile("result.json", JSON.stringify(compare(target, current)));
var target = {
"Shell" : {
"Profile" : "Profile",
"SignOut" : "Sign out",
"CloseView" : "Close current view",
"Settings" : "Settings",
"ModifySettings" : "Modify settings",
"SettingsModified" : "Settings have been changed",
"Help" : "Help"
}
}
var current = {
"Shell" : {
"Profile" : "Профиль",
"SignOut" : "Выйти",
"CloseView" : "",
"Settings" : "Settings",
"ModifySettings" : "Дополнительные настройки",
"Help" : "Помощь"
}
};
function compare(target, current) {
var result = {};
for (var key in target) {
if (!target.hasOwnProperty(key))
continue;
if (typeof target[key] == "object") {
result[key] = compare(target[key], current[key])
} else {
if (target[key] == current[key] || !current[key]) {
result[key] = target[key];
}
}
}
return result;
}
console.log(compare(target, current));
Обновление 2
Ваш код должен выглядеть как то так:
// получить третий аргумент из командной строки
var name = process.argv[2];
var defaultName = "en_US";
var file = {/*...*/}
var nfResult = {};
if(!file[name]){
nfResult = file[name] = name[defaultName];
} else {
nfResult = compare(name[defaultName], file[name]);
}
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Доброго времени суток. Возникла проблема есть формы битрикса Они подгружаются в фрейме, а хочется их прикрепить на странице, там уже есть...
Как можно сделать так, чтобы при выборе в селекте был полный список - option. Но когда какой-то option выбран - убирать все остальные варианты? Желательно...