You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by za...@apache.org on 2020/07/27 08:56:55 UTC
[incubator-echarts] branch next-i18n created (now 950275d)
This is an automated email from the ASF dual-hosted git repository.
zakwu pushed a change to branch next-i18n
in repository https://gitbox.apache.org/repos/asf/incubator-echarts.git.
at 950275d feat(i18n): draft commit for discuss
This branch includes the following new commits:
new 950275d feat(i18n): draft commit for discuss
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org
[incubator-echarts] 01/01: feat(i18n): draft commit for discuss
Posted by za...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
zakwu pushed a commit to branch next-i18n
in repository https://gitbox.apache.org/repos/asf/incubator-echarts.git
commit 950275dd5f931cfaedc6b2458192ebe0e29c42b9
Author: zakwu <12...@qq.com>
AuthorDate: Mon Jul 27 16:56:20 2020 +0800
feat(i18n): draft commit for discuss
---
i18n/langEN.js | 144 +++++++++++++++++++++++++++
{src => i18n}/langES.ts | 0
{src => i18n}/langFI.ts | 0
{src => i18n}/langTH.ts | 0
i18n/langZH.js | 141 ++++++++++++++++++++++++++
src/component/legend/LegendModel.ts | 34 ++++---
src/component/toolbox/ToolboxModel.ts | 7 +-
src/component/toolbox/feature/Brush.ts | 41 ++++----
src/component/toolbox/feature/DataView.ts | 44 ++++----
src/component/toolbox/feature/DataZoom.ts | 28 +++---
src/component/toolbox/feature/MagicType.ts | 44 ++++----
src/component/toolbox/feature/Restore.ts | 21 ++--
src/component/toolbox/feature/SaveAsImage.ts | 34 ++++---
src/component/toolbox/featureManager.ts | 3 +-
src/echarts.ts | 19 +++-
src/lang.ts | 126 -----------------------
src/langEN.ts | 126 -----------------------
src/model/Global.ts | 27 ++++-
src/util/types.ts | 1 +
src/visual/aria.ts | 4 +-
test/lang.html | 104 +++++++++++++++++++
21 files changed, 574 insertions(+), 374 deletions(-)
diff --git a/i18n/langEN.js b/i18n/langEN.js
new file mode 100644
index 0000000..ebba3a1
--- /dev/null
+++ b/i18n/langEN.js
@@ -0,0 +1,144 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Language: English.
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['exports', 'echarts'], factory);
+ } else if (
+ typeof exports === 'object' &&
+ typeof exports.nodeName !== 'string'
+ ) {
+ // CommonJS
+ factory(exports, require('echarts'));
+ } else {
+ // Browser globals
+ factory({}, root.echarts);
+ }
+})(this, function(exports, echarts) {
+ let lang = {
+ legend: {
+ selector: {
+ all: 'All',
+ inverse: 'Inv'
+ }
+ },
+ toolbox: {
+ brush: {
+ title: {
+ rect: 'Box Select',
+ polygon: 'Lasso Select',
+ lineX: 'Horizontally Select',
+ lineY: 'Vertically Select',
+ keep: 'Keep Selections',
+ clear: 'Clear Selections'
+ }
+ },
+ dataView: {
+ title: 'Data View',
+ lang: ['Data View', 'Close', 'Refresh']
+ },
+ dataZoom: {
+ title: {
+ zoom: 'Zoom',
+ back: 'Zoom Reset'
+ }
+ },
+ magicType: {
+ title: {
+ line: 'Switch to Line Chart',
+ bar: 'Switch to Bar Chart',
+ stack: 'Stack',
+ tiled: 'Tile'
+ }
+ },
+ restore: {
+ title: 'Restore'
+ },
+ saveAsImage: {
+ title: 'Save as Image',
+ lang: ['Right Click to Save Image']
+ }
+ },
+ series: {
+ typeNames: {
+ pie: 'Pie chart',
+ bar: 'Bar chart',
+ line: 'Line chart',
+ scatter: 'Scatter plot',
+ effectScatter: 'Ripple scatter plot',
+ radar: 'Radar chart',
+ tree: 'Tree',
+ treemap: 'Treemap',
+ boxplot: 'Boxplot',
+ candlestick: 'Candlestick',
+ k: 'K line chart',
+ heatmap: 'Heat map',
+ map: 'Map',
+ parallel: 'Parallel coordinate map',
+ lines: 'Line graph',
+ graph: 'Relationship graph',
+ sankey: 'Sankey diagram',
+ funnel: 'Funnel chart',
+ gauge: 'Guage',
+ pictorialBar: 'Pictorial bar',
+ themeRiver: 'Theme River Map',
+ sunburst: 'Sunburst'
+ }
+ },
+ aria: {
+ general: {
+ withTitle: 'This is a chart about "{title}"',
+ withoutTitle: 'This is a chart'
+ },
+ series: {
+ single: {
+ prefix: '',
+ withName: ' with type {seriesType} named {seriesName}.',
+ withoutName: ' with type {seriesType}.'
+ },
+ multiple: {
+ prefix: '. It consists of {seriesCount} series count.',
+ withName: ' The {seriesId} series is a {seriesType} representing {seriesName}.',
+ withoutName: ' The {seriesId} series is a {seriesType}.',
+ separator: {
+ middle: '',
+ end: ''
+ }
+ }
+ },
+ data: {
+ allData: 'The data is as follows: ',
+ partialData: 'The first {displayCnt} items are: ',
+ withName: 'the data for {name} is {value}',
+ withoutName: '{value}',
+ separator: {
+ middle: ',',
+ end: '.'
+ }
+ }
+ }
+ };
+
+ echarts.registerLocale('EN', lang);
+});
diff --git a/src/langES.ts b/i18n/langES.ts
similarity index 100%
rename from src/langES.ts
rename to i18n/langES.ts
diff --git a/src/langFI.ts b/i18n/langFI.ts
similarity index 100%
rename from src/langFI.ts
rename to i18n/langFI.ts
diff --git a/src/langTH.ts b/i18n/langTH.ts
similarity index 100%
rename from src/langTH.ts
rename to i18n/langTH.ts
diff --git a/i18n/langZH.js b/i18n/langZH.js
new file mode 100644
index 0000000..5b2a4d9
--- /dev/null
+++ b/i18n/langZH.js
@@ -0,0 +1,141 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['exports', 'echarts'], factory);
+ } else if (
+ typeof exports === 'object' &&
+ typeof exports.nodeName !== 'string'
+ ) {
+ // CommonJS
+ factory(exports, require('echarts'));
+ } else {
+ // Browser globals
+ factory({}, root.echarts);
+ }
+})(this, function(exports, echarts) {
+ let lang = {
+
+ legend: {
+ selector: {
+ all: '全选',
+ inverse: '反选'
+ }
+ },
+ toolbox: {
+ brush: {
+ title: {
+ rect: '矩形选择',
+ polygon: '圈选',
+ lineX: '横向选择',
+ lineY: '纵向选择',
+ keep: '保持选择',
+ clear: '清除选择'
+ }
+ },
+ dataView: {
+ title: '数据视图',
+ lang: ['数据视图', '关闭', '刷新']
+ },
+ dataZoom: {
+ title: {
+ zoom: '区域缩放',
+ back: '区域缩放还原'
+ }
+ },
+ magicType: {
+ title: {
+ line: '切换为折线图',
+ bar: '切换为柱状图',
+ stack: '切换为堆叠',
+ tiled: '切换为平铺'
+ }
+ },
+ restore: {
+ title: '还原'
+ },
+ saveAsImage: {
+ title: '保存为图片',
+ lang: ['右键另存为图片']
+ }
+ },
+ series: {
+ typeNames: {
+ pie: '饼图',
+ bar: '柱状图',
+ line: '折线图',
+ scatter: '散点图',
+ effectScatter: '涟漪散点图',
+ radar: '雷达图',
+ tree: '树图',
+ treemap: '矩形树图',
+ boxplot: '箱型图',
+ candlestick: 'K线图',
+ k: 'K线图',
+ heatmap: '热力图',
+ map: '地图',
+ parallel: '平行坐标图',
+ lines: '线图',
+ graph: '关系图',
+ sankey: '桑基图',
+ funnel: '漏斗图',
+ gauge: '仪表盘图',
+ pictorialBar: '象形柱图',
+ themeRiver: '主题河流图',
+ sunburst: '旭日图'
+ }
+ },
+ aria: {
+ general: {
+ withTitle: '这是一个关于“{title}”的图表。',
+ withoutTitle: '这是一个图表,'
+ },
+ series: {
+ single: {
+ prefix: '',
+ withName: '图表类型是{seriesType},表示{seriesName}。',
+ withoutName: '图表类型是{seriesType}。'
+ },
+ multiple: {
+ prefix: '它由{seriesCount}个图表系列组成。',
+ withName: '第{seriesId}个系列是一个表示{seriesName}的{seriesType},',
+ withoutName: '第{seriesId}个系列是一个{seriesType},',
+ separator: {
+ middle: ';',
+ end: '。'
+ }
+ }
+ },
+ data: {
+ allData: '其数据是——',
+ partialData: '其中,前{displayCnt}项是——',
+ withName: '{name}的数据是{value}',
+ withoutName: '{value}',
+ separator: {
+ middle: ',',
+ end: ''
+ }
+ }
+ }
+ };
+
+ echarts.registerLocale('ZH', lang);
+});
diff --git a/src/component/legend/LegendModel.ts b/src/component/legend/LegendModel.ts
index 290b7b3..aba8915 100644
--- a/src/component/legend/LegendModel.ts
+++ b/src/component/legend/LegendModel.ts
@@ -20,7 +20,6 @@
import * as zrUtil from 'zrender/src/core/util';
import Model from '../../model/Model';
import {isNameSpecified} from '../../util/model';
-import lang from '../../lang';
import ComponentModel from '../../model/Component';
import {
ComponentOption,
@@ -35,18 +34,24 @@ import {
import { Dictionary } from 'zrender/src/core/types';
import GlobalModel from '../../model/Global';
-const langSelector = lang.legend.selector;
-
-const defaultSelectorOption = {
- all: {
- type: 'all',
- title: zrUtil.clone(langSelector.all)
- },
- inverse: {
- type: 'inverse',
- title: zrUtil.clone(langSelector.inverse)
- }
+type LegendDefaultSelectorOptionsProps = {
+ type: string;
+ title: string;
};
+const getDefaultSelectorOptions = function (ecModel: GlobalModel, type: string): LegendDefaultSelectorOptionsProps {
+ if(type === 'all') {
+ return {
+ type: 'all',
+ title: ecModel.getWithLocale(['legend', 'selector', 'all'])
+ }
+ } else if(type === 'inverse') {
+ return {
+ type: 'inverse',
+ title: ecModel.getWithLocale(['legend', 'selector', 'inverse'])
+ }
+ }
+}
+
type SelectorType = 'all' | 'inverse';
export interface LegendSelectorButtonOption {
@@ -201,6 +206,7 @@ class LegendModel<Ops extends LegendOption = LegendOption> extends ComponentMode
_updateSelector(option: Ops) {
let selector = option.selector;
+ const {ecModel} = this;
if (selector === true) {
selector = option.selector = ['all', 'inverse'];
}
@@ -208,7 +214,7 @@ class LegendModel<Ops extends LegendOption = LegendOption> extends ComponentMode
zrUtil.each(selector, function (item, index) {
zrUtil.isString(item) && (item = {type: item});
(selector as LegendSelectorButtonOption[])[index] = zrUtil.merge(
- item, defaultSelectorOption[item.type]
+ item, getDefaultSelectorOptions(ecModel, item.type)
);
});
}
@@ -434,4 +440,4 @@ class LegendModel<Ops extends LegendOption = LegendOption> extends ComponentMode
ComponentModel.registerClass(LegendModel);
-export default LegendModel;
\ No newline at end of file
+export default LegendModel;
diff --git a/src/component/toolbox/ToolboxModel.ts b/src/component/toolbox/ToolboxModel.ts
index 4c25d8f..6c71ec7 100644
--- a/src/component/toolbox/ToolboxModel.ts
+++ b/src/component/toolbox/ToolboxModel.ts
@@ -31,6 +31,7 @@ import {
CommonTooltipOption,
Dictionary
} from '../../util/types';
+import GlobalModel from "../../model/Global";
export interface ToolboxTooltipFormatterParams {
@@ -86,9 +87,13 @@ class ToolboxModel extends ComponentModel<ToolboxOption> {
optionUpdated() {
super.optionUpdated.apply(this, arguments as any);
+ const {ecModel} = this;
zrUtil.each(this.option.feature, function (featureOpt, featureName) {
const Feature = featureManager.getFeature(featureName);
+ if(Feature.getDefaultOption) {
+ Feature.defaultOption = Feature.getDefaultOption(ecModel)
+ }
Feature && zrUtil.merge(featureOpt, Feature.defaultOption);
});
}
@@ -147,4 +152,4 @@ class ToolboxModel extends ComponentModel<ToolboxOption> {
ComponentModel.registerClass(ToolboxModel);
-export default ToolboxModel;
\ No newline at end of file
+export default ToolboxModel;
diff --git a/src/component/toolbox/feature/Brush.ts b/src/component/toolbox/feature/Brush.ts
index 984fa33..c9e1208 100644
--- a/src/component/toolbox/feature/Brush.ts
+++ b/src/component/toolbox/feature/Brush.ts
@@ -18,7 +18,6 @@
*/
import * as zrUtil from 'zrender/src/core/util';
-import lang from '../../../lang';
import {
ToolboxFeatureModel,
ToolboxFeatureOption,
@@ -30,8 +29,6 @@ import ExtensionAPI from '../../../ExtensionAPI';
import BrushModel from '../../brush/BrushModel';
import { BrushTypeUncertain } from '../../helper/BrushController';
-const brushLang = lang.toolbox.brush;
-
const ICON_TYPES = ['rect', 'polygon', 'lineX', 'lineY', 'keep', 'clear'] as const;
type IconType = typeof ICON_TYPES[number];
@@ -132,24 +129,28 @@ class BrushFeature extends ToolboxFeature<ToolboxBrushFeatureOption> {
}
};
- static defaultOption: ToolboxBrushFeatureOption = {
- show: true,
- type: ICON_TYPES.slice(),
- icon: {
- /* eslint-disable */
- rect: 'M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13', // jshint ignore:line
- polygon: 'M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2', // jshint ignore:line
- lineX: 'M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4', // jshint ignore:line
- lineY: 'M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4', // jshint ignore:line
- keep: 'M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z', // jshint ignore:line
- clear: 'M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2' // jshint ignore:line
- /* eslint-enable */
- },
- // `rect`, `polygon`, `lineX`, `lineY`, `keep`, `clear`
- title: zrUtil.clone(brushLang.title)
- };
+ static getDefaultOption(ecModel: GlobalModel) {
+ const defaultOption: ToolboxBrushFeatureOption = {
+ show: true,
+ type: ICON_TYPES.slice(),
+ icon: {
+ /* eslint-disable */
+ rect: 'M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13', // jshint ignore:line
+ polygon: 'M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2', // jshint ignore:line
+ lineX: 'M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4', // jshint ignore:line
+ lineY: 'M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4', // jshint ignore:line
+ keep: 'M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z', // jshint ignore:line
+ clear: 'M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2' // jshint ignore:line
+ /* eslint-enable */
+ },
+ // `rect`, `polygon`, `lineX`, `lineY`, `keep`, `clear`
+ title: ecModel.getWithLocale(['toolbox', 'brush', 'title'])
+ }
+
+ return defaultOption;
+ }
}
registerFeature('brush', BrushFeature);
-export default BrushFeature;
\ No newline at end of file
+export default BrushFeature;
diff --git a/src/component/toolbox/feature/DataView.ts b/src/component/toolbox/feature/DataView.ts
index 690f7d4..ddf4231 100644
--- a/src/component/toolbox/feature/DataView.ts
+++ b/src/component/toolbox/feature/DataView.ts
@@ -19,7 +19,6 @@
import * as echarts from '../../../echarts';
import * as zrUtil from 'zrender/src/core/util';
-import lang from '../../../lang';
import GlobalModel from '../../../model/Global';
import SeriesModel from '../../../model/Series';
import { ToolboxFeature, registerFeature, ToolboxFeatureOption } from '../featureManager';
@@ -28,8 +27,7 @@ import ExtensionAPI from '../../../ExtensionAPI';
import { addEventListener } from 'zrender/src/core/event';
import Axis from '../../../coord/Axis';
import Cartesian2D from '../../../coord/cartesian/Cartesian2D';
-
-const dataViewLang = lang.toolbox.dataView;
+import {ToolboxSaveAsImageFeatureOption} from "./SaveAsImage";
const BLOCK_SPLITER = new Array(60).join('-');
const ITEM_SPLITER = '\t';
@@ -423,23 +421,27 @@ class DataView extends ToolboxFeature<ToolboxDataViewFeatureOption> {
this.remove(ecModel, api);
}
- static defaultOption: ToolboxDataViewFeatureOption = {
- show: true,
- readOnly: false,
- optionToContent: null,
- contentToOption: null,
-
- // eslint-disable-next-line
- icon: 'M17.5,17.3H33 M17.5,17.3H33 M45.4,29.5h-28 M11.5,2v56H51V14.8L38.4,2H11.5z M38.4,2.2v12.7H51 M45.4,41.7h-28',
- title: zrUtil.clone(dataViewLang.title),
- lang: zrUtil.clone(dataViewLang.lang),
- backgroundColor: '#fff',
- textColor: '#000',
- textareaColor: '#fff',
- textareaBorderColor: '#333',
- buttonColor: '#c23531',
- buttonTextColor: '#fff'
- };
+ static getDefaultOption(ecModel: GlobalModel) {
+ const defaultOption: ToolboxDataViewFeatureOption = {
+ show: true,
+ readOnly: false,
+ optionToContent: null,
+ contentToOption: null,
+
+ // eslint-disable-next-line
+ icon: 'M17.5,17.3H33 M17.5,17.3H33 M45.4,29.5h-28 M11.5,2v56H51V14.8L38.4,2H11.5z M38.4,2.2v12.7H51 M45.4,41.7h-28',
+ title: ecModel.getWithLocale(['toolbox', 'dataView', 'title']),
+ lang: ecModel.getWithLocale(['toolbox', 'dataView', 'lang']),
+ backgroundColor: '#fff',
+ textColor: '#000',
+ textareaColor: '#fff',
+ textareaBorderColor: '#333',
+ buttonColor: '#c23531',
+ buttonTextColor: '#fff'
+ }
+
+ return defaultOption;
+ }
}
/**
@@ -495,4 +497,4 @@ echarts.registerAction({
}, payload.newOption));
});
-export default DataView;
\ No newline at end of file
+export default DataView;
diff --git a/src/component/toolbox/feature/DataZoom.ts b/src/component/toolbox/feature/DataZoom.ts
index a69b92f..a42f282 100644
--- a/src/component/toolbox/feature/DataZoom.ts
+++ b/src/component/toolbox/feature/DataZoom.ts
@@ -24,7 +24,6 @@ import BrushController, { BrushControllerEvents, BrushDimensionMinMax } from '..
import BrushTargetManager, { BrushTargetInfoCartesian2D } from '../../helper/BrushTargetManager';
import * as history from '../../dataZoom/history';
import sliderMove from '../../helper/sliderMove';
-import lang from '../../../lang';
// Use dataZoomSelect
import '../../dataZoomSelect';
import {
@@ -51,7 +50,6 @@ import { registerInternalOptionCreator } from '../../../model/internalComponentC
import ComponentModel from '../../../model/Component';
-const dataZoomLang = lang.toolbox.dataZoom;
const each = zrUtil.each;
const DATA_ZOOM_ID_BASE = makeInternalComponentId('toolbox-dataZoom_');
@@ -206,17 +204,21 @@ class DataZoomFeature extends ToolboxFeature<ToolboxDataZoomFeatureOption> {
});
}
- static defaultOption: ToolboxDataZoomFeatureOption = {
- show: true,
- filterMode: 'filter',
- // Icon group
- icon: {
- zoom: 'M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1',
- back: 'M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26'
- },
- // `zoom`, `back`
- title: zrUtil.clone(dataZoomLang.title)
- };
+ static getDefaultOption(ecModel: GlobalModel) {
+ const defaultOption: ToolboxDataZoomFeatureOption = {
+ show: true,
+ filterMode: 'filter',
+ // Icon group
+ icon: {
+ zoom: 'M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1',
+ back: 'M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26'
+ },
+ // `zoom`, `back`
+ title: ecModel.getWithLocale(['toolbox', 'dataZoom', 'title']),
+ }
+
+ return defaultOption;
+ }
}
const handlers: { [key in IconType]: (this: DataZoomFeature) => void } = {
diff --git a/src/component/toolbox/feature/MagicType.ts b/src/component/toolbox/feature/MagicType.ts
index b5b3e0f..1fd0da9 100644
--- a/src/component/toolbox/feature/MagicType.ts
+++ b/src/component/toolbox/feature/MagicType.ts
@@ -19,7 +19,6 @@
import * as echarts from '../../../echarts';
import * as zrUtil from 'zrender/src/core/util';
-import lang from '../../../lang';
import {ToolboxFeature, ToolboxFeatureOption, ToolboxFeatureModel, registerFeature} from '../featureManager';
import { SeriesOption, ECUnitOption } from '../../../util/types';
import GlobalModel from '../../../model/Global';
@@ -27,7 +26,6 @@ import ExtensionAPI from '../../../ExtensionAPI';
import SeriesModel from '../../../model/Series';
import { SINGLE_REFERRING } from '../../../util/model';
-const magicTypeLang = lang.toolbox.magicType;
const INNER_STACK_KEYWORD = '__ec_magicType_stack__' as const;
const ICON_TYPES = ['line', 'bar', 'stack'] as const;
@@ -74,21 +72,25 @@ class MagicType extends ToolboxFeature<ToolboxMagicTypeFeatureOption> {
return icons;
}
- static defaultOption: ToolboxMagicTypeFeatureOption = {
- show: true,
- type: [],
- // Icon group
- icon: {
- line: 'M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4',
- bar: 'M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7',
- // eslint-disable-next-line
- stack: 'M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z' // jshint ignore:line
- },
- // `line`, `bar`, `stack`, `tiled`
- title: zrUtil.clone(magicTypeLang.title),
- option: {},
- seriesIndex: {}
- };
+ static getDefaultOption(ecModel: GlobalModel) {
+ const defaultOption: ToolboxMagicTypeFeatureOption = {
+ show: true,
+ type: [],
+ // Icon group
+ icon: {
+ line: 'M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4',
+ bar: 'M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7',
+ // eslint-disable-next-line
+ stack: 'M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z' // jshint ignore:line
+ },
+ // `line`, `bar`, `stack`, `tiled`
+ title: ecModel.getWithLocale(['toolbox', 'magicTypeLang', 'title']),
+ option: {},
+ seriesIndex: {}
+ }
+
+ return defaultOption;
+ }
onclick(ecModel: GlobalModel, api: ExtensionAPI, type: IconType) {
const model = this.model;
@@ -153,11 +155,13 @@ class MagicType extends ToolboxFeature<ToolboxMagicTypeFeatureOption> {
// Change title of stack
if (type === 'stack') {
const seriesOptions = newOption.series as (SeriesOption & { stack: string })[];
+ const titldLang = ecModel.getWithLocale(['toolbox', 'magicTypeLang', 'title', 'tiled']);
+ const titleLang = ecModel.getWithLocale(['toolbox', 'magicTypeLang', 'title']);
const isStack = seriesOptions && seriesOptions[0]
&& seriesOptions[0].stack === INNER_STACK_KEYWORD;
newTitle = isStack
- ? zrUtil.merge({ stack: magicTypeLang.title.tiled }, magicTypeLang.title)
- : zrUtil.clone(magicTypeLang.title);
+ ? zrUtil.merge({ stack: titldLang }, titleLang)
+ : zrUtil.clone(titleLang);
}
api.dispatchAction({
@@ -234,4 +238,4 @@ echarts.registerAction({
registerFeature('magicType', MagicType);
-export default MagicType;
\ No newline at end of file
+export default MagicType;
diff --git a/src/component/toolbox/feature/Restore.ts b/src/component/toolbox/feature/Restore.ts
index 9e650bd..b8a2c69 100644
--- a/src/component/toolbox/feature/Restore.ts
+++ b/src/component/toolbox/feature/Restore.ts
@@ -19,13 +19,10 @@
import * as echarts from '../../../echarts';
import * as history from '../../dataZoom/history';
-import lang from '../../../lang';
import { ToolboxFeatureOption, ToolboxFeature, registerFeature } from '../featureManager';
import ExtensionAPI from '../../../ExtensionAPI';
import GlobalModel from '../../../model/Global';
-const restoreLang = lang.toolbox.restore;
-
export interface ToolboxRestoreFeatureOption extends ToolboxFeatureOption {
icon?: string
title?: string
@@ -42,12 +39,16 @@ class RestoreOption extends ToolboxFeature<ToolboxRestoreFeatureOption> {
});
}
- static defaultOption: ToolboxRestoreFeatureOption = {
- show: true,
- // eslint-disable-next-line
- icon: 'M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5',
- title: restoreLang.title
- };
+ static getDefaultOption(ecModel: GlobalModel) {
+ const defaultOption: ToolboxRestoreFeatureOption = {
+ show: true,
+ // eslint-disable-next-line
+ icon: 'M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5',
+ title: ecModel.getWithLocale(['toolbox', 'restore', 'title']),
+ }
+
+ return defaultOption;
+ }
}
registerFeature('restore', RestoreOption);
@@ -57,4 +58,4 @@ echarts.registerAction(
function (payload, ecModel) {
ecModel.resetOption('recreate');
}
-);
\ No newline at end of file
+);
diff --git a/src/component/toolbox/feature/SaveAsImage.ts b/src/component/toolbox/feature/SaveAsImage.ts
index f90d718..f97827a 100644
--- a/src/component/toolbox/feature/SaveAsImage.ts
+++ b/src/component/toolbox/feature/SaveAsImage.ts
@@ -20,14 +20,11 @@
/* global Uint8Array */
import env from 'zrender/src/core/env';
-import lang from '../../../lang';
import { ToolboxFeature, ToolboxFeatureOption, registerFeature } from '../featureManager';
import { ZRColor } from '../../../util/types';
import GlobalModel from '../../../model/Global';
import ExtensionAPI from '../../../ExtensionAPI';
-const saveAsImageLang = lang.toolbox.saveAsImage;
-
export interface ToolboxSaveAsImageFeatureOption extends ToolboxFeatureOption {
icon?: string
title?: string
@@ -97,20 +94,25 @@ class SaveAsImage extends ToolboxFeature<ToolboxSaveAsImageFeatureOption> {
}
}
- static defaultOption: ToolboxSaveAsImageFeatureOption = {
- show: true,
- icon: 'M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0',
- title: saveAsImageLang.title,
- type: 'png',
- // Default use option.backgroundColor
- // backgroundColor: '#fff',
- connectedBackgroundColor: '#fff',
- name: '',
- excludeComponents: ['toolbox'],
- pixelRatio: 1,
- lang: saveAsImageLang.lang.slice()
- };
+ static getDefaultOption(ecModel: GlobalModel) {
+ const defaultOption: ToolboxSaveAsImageFeatureOption = {
+ show: true,
+ icon: 'M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0',
+ title: ecModel.getWithLocale(['toolbox', 'saveAsImage', 'title']),
+ type: 'png',
+ // Default use option.backgroundColor
+ // backgroundColor: '#fff',
+ connectedBackgroundColor: '#fff',
+ name: '',
+ excludeComponents: ['toolbox'],
+ pixelRatio: 1,
+ lang: ecModel.getWithLocale(['toolbox', 'saveAsImage', 'lang'], null, (t) => t.slice())
+ }
+
+ return defaultOption;
+ }
}
+
SaveAsImage.prototype.unusable = !env.canvasSupported;
registerFeature('saveAsImage', SaveAsImage);
diff --git a/src/component/toolbox/featureManager.ts b/src/component/toolbox/featureManager.ts
index 52367cd..756e013 100644
--- a/src/component/toolbox/featureManager.ts
+++ b/src/component/toolbox/featureManager.ts
@@ -106,7 +106,8 @@ type ToolboxFeatureCtor = {
/**
* Static defaultOption property
*/
- defaultOption: ToolboxFeatureOption
+ defaultOption?: ToolboxFeatureOption
+ getDefaultOption?: (ecModel: GlobalModel) => ToolboxFeatureOption
};
const features: Dictionary<ToolboxFeatureCtor> = {};
diff --git a/src/echarts.ts b/src/echarts.ts
index 64e4d89..73c883b 100644
--- a/src/echarts.ts
+++ b/src/echarts.ts
@@ -76,7 +76,7 @@ import {
ActionHandler, ActionInfo, OptionPreprocessor, PostUpdater,
LoadingEffect, LoadingEffectCreator, StageHandlerInternal,
StageHandlerOverallReset, StageHandler,
- ViewRootGroup, DimensionDefinitionLoose, ECEventData, ThemeOption,
+ ViewRootGroup, DimensionDefinitionLoose, ECEventData, ThemeOption, LocaleOption,
ECOption,
ECUnitOption,
ZRColor,
@@ -274,6 +274,8 @@ class ECharts extends Eventful {
private _theme: ThemeOption;
+ private _locale: LocaleOption;
+
private _chartsViews: ChartView[] = [];
private _chartsMap: {[viewId: string]: ChartView} = {};
@@ -310,6 +312,7 @@ class ECharts extends Eventful {
dom: HTMLElement,
// Theme name or themeOption.
theme?: string | ThemeOption,
+ locale?: string | LocaleOption,
opts?: {
renderer?: RendererType,
devicePixelRatio?: number,
@@ -349,6 +352,8 @@ class ECharts extends Eventful {
theme && backwardCompat(theme as ECUnitOption, true);
this._theme = theme;
+ this._locale = typeof locale === 'string' ? localeStorage[locale || 'ZH'] : zrUtil.clone(locale);
+ console.log(this._locale);
this._coordSysMgr = new CoordinateSystemManager();
@@ -504,7 +509,7 @@ class ECharts extends Eventful {
const theme = this._theme;
const ecModel = this._model = new GlobalModel();
ecModel.scheduler = this._scheduler;
- ecModel.init(null, null, null, theme, optionManager);
+ ecModel.init(null, null, null, theme, this._locale, optionManager);
}
this._model.setOption(option, {replaceMerge: replaceMerge}, optionPreprocessorFuncs);
@@ -2301,6 +2306,8 @@ const visualFuncs: StageHandlerInternal[] = [];
const themeStorage: {[themeName: string]: ThemeOption} = {};
+const localeStorage: {[localeName: string]: LocaleOption} = {};
+
const loadingEffects: {[effectName: string]: LoadingEffectCreator} = {};
const instances: {[id: string]: ECharts} = {};
@@ -2322,6 +2329,7 @@ const DOM_ATTRIBUTE_KEY = '_echarts_instance_';
export function init(
dom: HTMLElement,
theme?: string | object,
+ locale?: string | object,
opts?: {
renderer?: RendererType,
devicePixelRatio?: number,
@@ -2368,7 +2376,7 @@ export function init(
}
}
- const chart = new ECharts(dom, theme, opts);
+ const chart = new ECharts(dom, theme, locale, opts);
chart.id = 'ec_' + idBase++;
instances[chart.id] = chart;
@@ -2459,6 +2467,11 @@ export function registerTheme(name: string, theme: ThemeOption): void {
themeStorage[name] = theme;
}
+export function registerLocale(name: string, locale: LocaleOption): void {
+ localeStorage[name] = locale;
+ console.log('localeStorage', localeStorage);
+}
+
/**
* Register option preprocessor
*/
diff --git a/src/lang.ts b/src/lang.ts
deleted file mode 100644
index b369139..0000000
--- a/src/lang.ts
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-/**
- * Language: (Simplified) Chinese.
- */
-
-export default {
- legend: {
- selector: {
- all: '全选',
- inverse: '反选'
- }
- },
- toolbox: {
- brush: {
- title: {
- rect: '矩形选择',
- polygon: '圈选',
- lineX: '横向选择',
- lineY: '纵向选择',
- keep: '保持选择',
- clear: '清除选择'
- }
- },
- dataView: {
- title: '数据视图',
- lang: ['数据视图', '关闭', '刷新']
- },
- dataZoom: {
- title: {
- zoom: '区域缩放',
- back: '区域缩放还原'
- }
- },
- magicType: {
- title: {
- line: '切换为折线图',
- bar: '切换为柱状图',
- stack: '切换为堆叠',
- tiled: '切换为平铺'
- }
- },
- restore: {
- title: '还原'
- },
- saveAsImage: {
- title: '保存为图片',
- lang: ['右键另存为图片']
- }
- },
- series: {
- typeNames: {
- pie: '饼图',
- bar: '柱状图',
- line: '折线图',
- scatter: '散点图',
- effectScatter: '涟漪散点图',
- radar: '雷达图',
- tree: '树图',
- treemap: '矩形树图',
- boxplot: '箱型图',
- candlestick: 'K线图',
- k: 'K线图',
- heatmap: '热力图',
- map: '地图',
- parallel: '平行坐标图',
- lines: '线图',
- graph: '关系图',
- sankey: '桑基图',
- funnel: '漏斗图',
- gauge: '仪表盘图',
- pictorialBar: '象形柱图',
- themeRiver: '主题河流图',
- sunburst: '旭日图'
- }
- },
- aria: {
- general: {
- withTitle: '这是一个关于“{title}”的图表。',
- withoutTitle: '这是一个图表,'
- },
- series: {
- single: {
- prefix: '',
- withName: '图表类型是{seriesType},表示{seriesName}。',
- withoutName: '图表类型是{seriesType}。'
- },
- multiple: {
- prefix: '它由{seriesCount}个图表系列组成。',
- withName: '第{seriesId}个系列是一个表示{seriesName}的{seriesType},',
- withoutName: '第{seriesId}个系列是一个{seriesType},',
- separator: {
- middle: ';',
- end: '。'
- }
- }
- },
- data: {
- allData: '其数据是——',
- partialData: '其中,前{displayCnt}项是——',
- withName: '{name}的数据是{value}',
- withoutName: '{value}',
- separator: {
- middle: ',',
- end: ''
- }
- }
- }
-};
diff --git a/src/langEN.ts b/src/langEN.ts
deleted file mode 100644
index 0df1872..0000000
--- a/src/langEN.ts
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-/**
- * Language: English.
- */
-
-export default {
- legend: {
- selector: {
- all: 'All',
- inverse: 'Inv'
- }
- },
- toolbox: {
- brush: {
- title: {
- rect: 'Box Select',
- polygon: 'Lasso Select',
- lineX: 'Horizontally Select',
- lineY: 'Vertically Select',
- keep: 'Keep Selections',
- clear: 'Clear Selections'
- }
- },
- dataView: {
- title: 'Data View',
- lang: ['Data View', 'Close', 'Refresh']
- },
- dataZoom: {
- title: {
- zoom: 'Zoom',
- back: 'Zoom Reset'
- }
- },
- magicType: {
- title: {
- line: 'Switch to Line Chart',
- bar: 'Switch to Bar Chart',
- stack: 'Stack',
- tiled: 'Tile'
- }
- },
- restore: {
- title: 'Restore'
- },
- saveAsImage: {
- title: 'Save as Image',
- lang: ['Right Click to Save Image']
- }
- },
- series: {
- typeNames: {
- pie: 'Pie chart',
- bar: 'Bar chart',
- line: 'Line chart',
- scatter: 'Scatter plot',
- effectScatter: 'Ripple scatter plot',
- radar: 'Radar chart',
- tree: 'Tree',
- treemap: 'Treemap',
- boxplot: 'Boxplot',
- candlestick: 'Candlestick',
- k: 'K line chart',
- heatmap: 'Heat map',
- map: 'Map',
- parallel: 'Parallel coordinate map',
- lines: 'Line graph',
- graph: 'Relationship graph',
- sankey: 'Sankey diagram',
- funnel: 'Funnel chart',
- gauge: 'Guage',
- pictorialBar: 'Pictorial bar',
- themeRiver: 'Theme River Map',
- sunburst: 'Sunburst'
- }
- },
- aria: {
- general: {
- withTitle: 'This is a chart about "{title}"',
- withoutTitle: 'This is a chart'
- },
- series: {
- single: {
- prefix: '',
- withName: ' with type {seriesType} named {seriesName}.',
- withoutName: ' with type {seriesType}.'
- },
- multiple: {
- prefix: '. It consists of {seriesCount} series count.',
- withName: ' The {seriesId} series is a {seriesType} representing {seriesName}.',
- withoutName: ' The {seriesId} series is a {seriesType}.',
- separator: {
- middle: '',
- end: ''
- }
- }
- },
- data: {
- allData: 'The data is as follows: ',
- partialData: 'The first {displayCnt} items are: ',
- withName: 'the data for {name} is {value}',
- withoutName: '{value}',
- separator: {
- middle: ',',
- end: '.'
- }
- }
- }
-};
diff --git a/src/model/Global.ts b/src/model/Global.ts
index ff220f8..d9109d0 100644
--- a/src/model/Global.ts
+++ b/src/model/Global.ts
@@ -53,11 +53,12 @@ import {
ThemeOption,
ComponentOption,
ComponentMainType,
- ComponentSubType
+ ComponentSubType, LocaleOption
} from '../util/types';
import OptionManager from './OptionManager';
import Scheduler from '../stream/Scheduler';
import { concatInternalOptions } from './internalComponentCreator';
+import {Dictionary} from "zrender/src/core/types";
export interface GlobalModelSetOptionOpts {
replaceMerge: ComponentMainType | ComponentMainType[];
@@ -80,6 +81,8 @@ class GlobalModel extends Model<ECUnitOption> {
private _theme: Model;
+ private _locale: object;
+
private _optionManager: OptionManager;
private _componentsMap: HashMap<ComponentModel[], ComponentMainType>;
@@ -119,11 +122,14 @@ class GlobalModel extends Model<ECUnitOption> {
parentModel: Model,
ecModel: GlobalModel,
theme: object,
+ locale: object,
optionManager: OptionManager
): void {
theme = theme || {};
this.option = null; // Mark as not initialized.
this._theme = new Model(theme);
+ console.log('init', locale)
+ this._locale = locale;
this._optionManager = optionManager;
}
@@ -417,6 +423,25 @@ class GlobalModel extends Model<ECUnitOption> {
return this._theme;
}
+ getLocale(): LocaleOption {
+ return this._locale;
+ }
+
+ getWithLocale(localePosition: Array<string>, optionsPosition?: Array<string>, localeHandlerFn?: (text: string) => string): any {
+ console.log(optionsPosition, localePosition);
+ const locale = this.getLocale()
+ let localeText: string | any;
+ localePosition.map(t => {
+ localeText = localeText ? localeText[t] : locale[t];
+ })
+
+ if(localeHandlerFn) {
+ localeText = localeHandlerFn(localeText);
+ }
+ console.log(localeText);
+ return localeText;
+ }
+
setUpdatePayload(payload: Payload) {
this._payload = payload;
}
diff --git a/src/util/types.ts b/src/util/types.ts
index 0c7cf84..d276ad1 100644
--- a/src/util/types.ts
+++ b/src/util/types.ts
@@ -470,6 +470,7 @@ export type OptionDataValueDate = Date | string | number;
// export type ModelOption = Dictionary<any> | any[] | string | number | boolean | ((...args: any) => any);
export type ModelOption = any;
export type ThemeOption = Dictionary<any>;
+export type LocaleOption = Dictionary<any>;
export type DisplayState = 'normal' | 'emphasis' | 'blur' | 'select';
export type DisplayStateNonNormal = Exclude<DisplayState, 'normal'>;
diff --git a/src/visual/aria.ts b/src/visual/aria.ts
index 7e9b00a..aa75400 100644
--- a/src/visual/aria.ts
+++ b/src/visual/aria.ts
@@ -145,7 +145,7 @@ export default function (dom, ecModel) {
const userConfig = ariaModel.get(path);
if (userConfig == null) {
const pathArr = path.split('.');
- let result = lang.aria;
+ let result = ecModel.getWithLocale(['aria']);
for (let i = 0; i < pathArr.length; ++i) {
result = result[pathArr[i]];
}
@@ -165,6 +165,6 @@ export default function (dom, ecModel) {
}
function getSeriesTypeName(type) {
- return lang.series.typeNames[type] || '自定义图';
+ return ecModel.getWithLocale(['series', 'typeNames'])[type] || '自定义图';
}
}
diff --git a/test/lang.html b/test/lang.html
new file mode 100644
index 0000000..a498ab3
--- /dev/null
+++ b/test/lang.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+
+<html>
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <script src="lib/esl.js"></script>
+ <script src="lib/config.js"></script>
+ <script src="lib/jquery.min.js"></script>
+ <script src="lib/facePrint.js"></script>
+ <script src="lib/testHelper.js"></script>
+ <!-- <script src="ut/lib/canteen.js"></script> -->
+ <link rel="stylesheet" href="lib/reset.css" />
+</head>
+<body>
+<style>
+ .main {
+ width: 100%;
+ height: 300px;
+ }
+</style>
+
+<div id="main0" class="main"></div>
+<div id="main1" class="main"></div>
+
+<script>
+ require(['echarts', 'i18n/langZH'], function (echarts) {
+ var option = {
+ xAxis: {},
+ yAxis: {},
+ series: {
+ type: 'line',
+ data: [[11, 22], [33, 44]]
+ },
+ toolbox: {
+ show: true,
+ feature: {
+ restore: {},
+ saveAsImage: {},
+ dataZoom: {},
+ dataView: {}
+ },
+ orient: 'vertical',
+ right: 5
+ },
+ animation: false
+ };
+
+ var chart = echarts.init(document.getElementById('main0'), null, 'ZH');
+ chart.setOption(option);
+ });
+</script>
+
+<script>
+ require(['echarts', 'i18n/langEN'], function (echarts) {
+ var option = {
+ xAxis: {},
+ yAxis: {},
+ series: {
+ type: 'line',
+ data: [[11, 22], [33, 44]]
+ },
+ toolbox: {
+ show: true,
+ feature: {
+ restore: {},
+ saveAsImage: {},
+ dataZoom: {},
+ dataView: {}
+ },
+ orient: 'vertical',
+ right: 5
+ },
+ animation: false
+ };
+
+ var chart = echarts.init(document.getElementById('main1'), null, 'EN');
+ chart.setOption(option);
+ });
+</script>
+
+
+</body>
+</html>
+
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org