diff --git a/tools/translation_analysis.php b/tools/translation_analysis.php
new file mode 100644
index 000000000..f4cfd1f3a
--- /dev/null
+++ b/tools/translation_analysis.php
@@ -0,0 +1,134 @@
+'.$language.'';
+ $metalang[$language] = load_metalang($language, $file_list);
+
+ foreach ($file_list as $file)
+ {
+ if (isset($metalang[ $language ][$file]))
+ {
+ $missing_keys = array_diff(
+ array_keys($metalang[ $page['ref_compare'] ][$file]),
+ array_keys($metalang[ $language ][$file])
+ );
+
+ $output_missing = '';
+ foreach ($missing_keys as $key)
+ {
+ $output_missing.= get_line_to_translate($file, $key);
+ }
+
+ // strings not "really" translated?
+ $output_duplicated = '';
+ foreach (array_keys($metalang[$language][$file]) as $key)
+ {
+ $exceptions = array('Level 0');
+ if (in_array($key, $exceptions))
+ {
+ continue;
+ }
+
+ if (isset($validated_keys[$language]) and in_array($key, $validated_keys[$language]))
+ {
+ continue;
+ }
+
+ $local_value = $metalang[$language][$file][$key];
+ $ref_value = $metalang[ $page['ref_default_values'] ][$file][$key];
+ if ($local_value == $ref_value)
+ {
+ $output_duplicated.= get_line_to_translate($file, $key);
+ }
+ }
+
+ if ('' != $output_missing or '' != $output_duplicated)
+ {
+ $output = '';
+ if ('' != $output_missing)
+ {
+ $output.= "// missing translations\n".$output_missing;
+ }
+ if ('' != $output_duplicated)
+ {
+ $output.= "\n// untranslated yet\n".$output_duplicated;
+ }
+ echo '
'.$file.'.lang.php
';
+ echo '';
+ }
+ }
+ else
+ {
+ echo ''.$file.'.lang.php is missing
';
+ }
+ }
+}
+
+function load_metalang($language, $file_list)
+{
+ global $lang, $user;
+
+ $metalang = array();
+ foreach ($file_list as $file)
+ {
+ $lang = array();
+ $user['language'] = $language;
+ if (load_language($file.'.lang', '', array('language'=>$language, 'no_fallback'=>true)))
+ {
+ $metalang[$file] = $lang;
+ }
+ }
+ return $metalang;
+}
+
+function get_line_to_translate($file, $key)
+{
+ global $metalang, $page;
+
+ $print_key = str_replace("'", '\\\'', $key);
+ $print_value = str_replace("'", '\\\'', $metalang[ $page['ref_default_values'] ][$file][$key]);
+ return '$'."lang['".$print_key."'] = '".$print_value."';\n";
+}
+?>
\ No newline at end of file
diff --git a/tools/translation_validated.inc.php b/tools/translation_validated.inc.php
new file mode 100644
index 000000000..902d6d384
--- /dev/null
+++ b/tools/translation_validated.inc.php
@@ -0,0 +1,121 @@
+ array(
+ 'Dimensions',
+ 'Identification',
+ 'Notification',
+ 'Tag',
+ 'Tags',
+ 'admin',
+ 'identification',
+ 'redirect_msg',
+ 'search_date_from',
+ 'title_menu',
+ 'IP: %s',
+ 'Email: %s',
+ '%d element',
+ '%d elements',
+ '%d association',
+ '%d associations',
+ '%d tag',
+ '%d tags',
+ 'Actions',
+ 'Description',
+ 'Informations',
+ 'Maintenance',
+ 'Options',
+ 'Plugins',
+ 'Position',
+ 'Validation',
+ 'Version',
+ 'config',
+ 'Date',
+ 'instructions',
+ 'is_high_disabled',
+ 'nbm_content_goto_2',
+ 'nbm_content_hello_2',
+ 'nbm_item_notification',
+ 'nbm_send_options',
+ 'permissions',
+ 'public',
+ 'site_local',
+ 'update_simulation_title',
+ 'IP',
+ 'image',
+ 'section',
+ 'tags',
+ 'high',
+ 'c13y_Correction',
+ 'Level 1',
+ 'Level 8',
+ 'FORUM',
+ 'EXTENSIONS',
+ 'WIKI / DOC',
+ 'Installation',
+ 'step1_host_info',
+ ),
+ 'es_ES' => array(
+ 'Tag',
+ 'Tags',
+ 'IP: %s',
+ 'Email: %s',
+ 'No',
+ '%d tag',
+ '%d tags',
+ 'Plugins',
+ 'is_high_disabled',
+ 'nbm_content_goto_2',
+ 'nbm_content_hello_2',
+ 'site_local',
+ 'update_simulation_title',
+ 'IP',
+ 'Level 8',
+ 'DEMO',
+ 'BUGS',
+ 'step1_host_info',
+ ),
+ 'da_DK' => array(
+ 'Installation',
+ 'install_webmaster',
+ 'step1_host',
+ 'step1_host_info',
+ 'step1_pass',
+ 'step2_pwd',
+ '%d Kb',
+ '%d hit',
+ '%d hits',
+ 'Connection settings',
+ 'Connection',
+ 'Display',
+ 'Filter',
+ 'Links',
+ 'N/A',
+ 'Password',
+ 'Quick connect',
+ 'RSS feed',
+ 'Reset',
+ 'Tag',
+ 'Tags',
+ 'Webmaster',
+ 'author(s) : %s',
+ 'admin',
+ 'caddie',
+ 'download',
+ 'logout',
+ 'powered_by',
+ 'remember_me',
+ 'slideshow',
+ 'sql_queries_in',
+ 'thumbnails',
+ 'title_menu',
+ 'upload_author',
+ 'IP: %s',
+ 'Browser: %s',
+ 'Author: %s',
+ 'Email: %s',
+ 'Admin: %s',
+ 'Rank',
+ 'cloud',
+ ),
+ );
+?>
\ No newline at end of file