Browse Source

fix: keep locale in meta

fix violentmonkey/violentmonkey#125
Gerald 8 years ago
parent
commit
d31bc030e7
2 changed files with 8 additions and 3 deletions
  1. 3 1
      src/background/utils/script.js
  2. 5 2
      src/common/index.js

+ 3 - 1
src/background/utils/script.js

@@ -32,7 +32,9 @@ export function parseMeta(code) {
       flag = 0;
     }
     if (flag === 1 && group1[0] === '@') {
-      const key = group1.slice(1).replace(/[-_](\w)/g, (m, g) => g.toUpperCase());
+      const [keyName, locale] = group1.slice(1).split(':');
+      const camelKey = keyName.replace(/[-_](\w)/g, (m, g) => g.toUpperCase());
+      const key = locale ? `${camelKey}:${locale.toLowerCase()}` : camelKey;
       const val = group2.trim();
       const data = meta[key];
       // multiple values allowed

+ 5 - 2
src/common/index.js

@@ -107,8 +107,11 @@ export function getUniqId() {
  * Get locale attributes such as `@name:zh-CN`
  */
 export function getLocaleString(meta, key) {
-  const langKey = navigator.languages.map(lang => `${key}:${lang}`).find(item => item in meta);
-  return (langKey ? meta[langKey] : meta[key]) || '';
+  const localeMeta = navigator.languages
+  // Use `lang.toLowerCase()` since v2.6.5
+  .map(lang => meta[`${key}:${lang}`] || meta[`${key}:${lang.toLowerCase()}`])
+  .find(Boolean);
+  return localeMeta || meta[key] || '';
 }
 
 /**