$v) { if (is_array($arr1[$k]) && is_array($arr2[$k])) { $d = array_diff_key_recursive($arr1[$k], $arr2[$k]); if ($d) { $diff[$k] = $d; } } } return $diff; } // target lang $targetLang = $argv[1]; if(empty($targetLang)) { die('Please specify target lang as the first argument, to which you want to add missing keys from master lang (EN). Use the lowercase name, for example `sk` for the Slovak language'."\n"); } // load master lang $masterLang = file_get_contents(__DIR__.'/../data/web/lang/lang.en-gb.json'); $masterLang = json_decode($masterLang, true); // load target lang $lang = file_get_contents(__DIR__.'/../data/web/lang/lang.'.$targetLang.'.json'); $lang = json_decode($lang, true); // compare lang keys $result = array_diff_key_recursive($masterLang, $lang); if(empty($result)) { die('No new keys were added. Looks like target lang is up to date.'."\n"); } foreach($result as $key => $val) { // check if section key exists in target lang if(array_key_exists($key, $lang)) { // add only missing section keys foreach ($val as $k => $v) { $lang[$key][$k] = $v; } // sort keys ksort($lang[$key]); } else { // add whole section $lang[$key] = $val; ksort($lang); } } $lang = json_encode($lang, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES); file_put_contents(__DIR__.'/../data/web/lang/lang.'.$targetLang.'.json', $lang); echo 'Following new lang keys were added and need translation:'."\n"; print_r($result);