From 472a7ef9161465153bd9f46ea2d91eb7e7c23815 Mon Sep 17 00:00:00 2001 From: "qingwei.li" Date: Fri, 28 Oct 2016 16:22:55 +0800 Subject: [PATCH] Locale: add format --- src/locale/format.js | 47 ++++++++++++++++++++++++++++++++++++++++++++ src/locale/index.js | 5 ++++- 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 src/locale/format.js diff --git a/src/locale/format.js b/src/locale/format.js new file mode 100644 index 000000000..a970add0e --- /dev/null +++ b/src/locale/format.js @@ -0,0 +1,47 @@ +/** + * String format template + * - Inspired: + * https://github.com/Matt-Esch/string-template/index.js + */ + +const RE_NARGS = /(%|)\{([0-9a-zA-Z_]+)\}/g; + +export default function(Vue) { + const { hasOwn } = Vue.util; + + /** + * template + * + * @param {String} string + * @param {Array} ...args + * @return {String} + */ + + function template(string, ...args) { + if (args.length === 1 && typeof args[0] === 'object') { + args = args[0]; + } + + if (!args || !args.hasOwnProperty) { + args = {}; + } + + return string.replace(RE_NARGS, (match, prefix, i, index) => { + let result; + + if (string[index - 1] === '{' && + string[index + match.length] === '}') { + return i; + } else { + result = hasOwn(args, i) ? args[i] : null; + if (result === null || result === undefined) { + return ''; + } + + return result; + } + }); + } + + return template; +} diff --git a/src/locale/index.js b/src/locale/index.js index 90764ca44..06b8a5e39 100644 --- a/src/locale/index.js +++ b/src/locale/index.js @@ -1,5 +1,8 @@ import defaultLang from 'element-ui/src/locale/lang/zh-cn'; import Vue from 'vue'; +import Format from './format'; + +const format = Format(Vue); let lang = defaultLang; export const $t = function(path, options) { @@ -13,7 +16,7 @@ export const $t = function(path, options) { for (var i = 0, j = array.length; i < j; i++) { var property = array[i]; var value = current[property]; - if (i === j - 1) return value; + if (i === j - 1) return format(value, options); if (!value) return ''; current = value; }