diff --git a/intl/template.py b/intl/template.py
new file mode 100755
index 0000000000..9201f694ab
--- /dev/null
+++ b/intl/template.py
@@ -0,0 +1,62 @@
+#!/usr/bin/env python3
+
+# Apply template (us) updates to translations (fr, ja, chs, etc.)
+# Usage: ./template.py xx
+# xx is the language code postfix of translation files
+
+import re
+import sys
+
+try:
+    lc = sys.argv[1]
+except:
+    print("Usage: ./template.py <language_postfix>")
+    sys.exit(1)
+
+p = re.compile('MSG_HASH\(\s*[A-Z0-9_]+,\s*\".*\"\s*\)')
+
+header = """#if defined(_MSC_VER) && !defined(_XBOX) && (_MSC_VER >= 1500 && _MSC_VER < 1900)
+#if (_MSC_VER >= 1700)
+/* https://support.microsoft.com/en-us/kb/980263 */
+#pragma execution_character_set("utf-8")
+#endif
+#pragma warning(disable:4566)
+#endif
+"""
+
+def parse_message(message):
+    key_start = message.find('(') + 1
+    key_end = message.find(',')
+    key = message[key_start:key_end].strip()
+    value_start = message.find('"') + 1
+    value_end = message.rfind('"')
+    value = message[value_start:value_end].strip()
+    return key, value
+
+def messages(text):
+    result = p.findall(text)
+    msg_list = []
+    for msg in result:
+        key, val = parse_message(msg)
+        item = {'key': key, 'val': val, 'msg': msg}
+        msg_list.append(item)
+    return msg_list
+
+def update(translation, template):
+    new_translation = header + template
+    template_messages = messages(template)
+    translation_messages = messages(translation)
+    for tp_msg in template_messages:
+        for ts_msg in translation_messages:
+            if tp_msg['key'] == ts_msg['key']:
+                new_translation = new_translation.replace(tp_msg['msg'], ts_msg['msg'])
+    return new_translation
+
+with open('msg_hash_us.h', 'r') as template_file:
+    template = template_file.read()
+    with open('msg_hash_' + lc + '.h', 'r+') as translation_file:
+        translation = translation_file.read()
+        new_translation = update(translation, template)
+        translation_file.seek(0)
+        translation_file.write(new_translation)
+        translation_file.truncate()