diff --git a/README.md b/README.md index 2669029eb..42ea0de47 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ A relational algebra calculator * Insert a string for every language key there is (pay attention to {{variables}} as they must stay untouched) * When finished, execute the script `writeLanguageFiles.py` which generates the json files based on the csv * In `src/calc2/i18n.tsx` add an import for this file as well as initializing it in the i18n init function (see other languages for examples) -* Add a new dropdown entry to `src/calc2/calculator.entry.tsx` and `src/calc2/calculator.entry.tsx` +* Add a new dropdown entry to `src/calc2/components/calculator.tsx`, `src/calc2/components/navigation.tsx` and `src/calc2/components/navigation-mobile.tsx` (see other languages for examples). Note that the argument for `changeLocale` should match the property name in `resources` object in the i18n init function * Test your language * Create a pull request to the development branch diff --git a/src/calc2/components/calculator.tsx b/src/calc2/components/calculator.tsx index c55de09af..86cdea417 100644 --- a/src/calc2/components/calculator.tsx +++ b/src/calc2/components/calculator.tsx @@ -162,6 +162,8 @@ example, 42 this.changeLocale('de')}>de this.changeLocale('es')}>es this.changeLocale('kr')}>kr + this.changeLocale('pt')}>pt + this.changeLocale('zhCn')}>zh-cn diff --git a/src/calc2/components/navigation-mobile.tsx b/src/calc2/components/navigation-mobile.tsx index 9ff9ba164..91331f484 100644 --- a/src/calc2/components/navigation-mobile.tsx +++ b/src/calc2/components/navigation-mobile.tsx @@ -56,6 +56,8 @@ export class NavigationMobile extends React.Component { this.changeLocale('de')}>de this.changeLocale('es')}>es this.changeLocale('kr')}>kr + this.changeLocale('pt')}>pt + this.changeLocale('zhCn')}>zh-cn RelaX diff --git a/src/calc2/components/navigation.tsx b/src/calc2/components/navigation.tsx index f06113991..a26dca958 100644 --- a/src/calc2/components/navigation.tsx +++ b/src/calc2/components/navigation.tsx @@ -108,6 +108,7 @@ export class Navigation extends React.Component { this.changeLocale('es')}>es this.changeLocale('kr')}>kr this.changeLocale('pt')}>pt + this.changeLocale('zhCn')}>zh-cn diff --git a/src/calc2/i18n.tsx b/src/calc2/i18n.tsx index 11e01c32e..2119de3bf 100644 --- a/src/calc2/i18n.tsx +++ b/src/calc2/i18n.tsx @@ -12,35 +12,37 @@ import langEN from '../locales/en.json'; import langES from '../locales/es.json'; import langKR from '../locales/kr.json'; import langPT from '../locales/pt.json'; +import langZhCn from "../locales/zh-cn.json"; export type LanguageKeys = keyof typeof langEN; -export const i18n = i18next - .use(LanguageDetector) - .init({ - resources: { - en: { - translations: langEN, - }, - de: { - translations: langDE, - }, - es: { - translations: langES, - }, - kr: { - translations: langKR, - }, - pt: { - translations: langPT, - }, +export const i18n = i18next.use(LanguageDetector).init({ + resources: { + en: { + translations: langEN, }, - fallbackLng: 'en', - nsSeparator: ':', - keySeparator: false, - defaultNS: 'translations', - debug: true, - }); + de: { + translations: langDE, + }, + es: { + translations: langES, + }, + kr: { + translations: langKR, + }, + pt: { + translations: langPT, + }, + zhCn: { + translations: langZhCn, + }, + }, + fallbackLng: "en", + nsSeparator: ":", + keySeparator: false, + defaultNS: "translations", + debug: true, +}); export function t(key: LanguageKeys, options?: { [key: string]: string | number }): string { return String(i18n.t(key, options)); diff --git a/src/locales/zh-cn.json b/src/locales/zh-cn.json new file mode 100644 index 000000000..e0d8b89a4 --- /dev/null +++ b/src/locales/zh-cn.json @@ -0,0 +1 @@ +{"db.messages.parser.error-duplicate-variable": "\u91cd\u590d\u7684\u53d8\u91cf\u540d: {{name}}", "db.messages.parser.error-invalid-date-format": "\"{{str}}\"\u4e0d\u662f\u5408\u6cd5\u7684\u65e5\u671f\uff1b\u671f\u671b\u7684\u683c\u5f0f: YYYY-MM-DD", "db.messages.parser.error-group-duplicate-header": "\u91cd\u590d\u7684\u8868\u5934: {{name}}", "db.messages.parser.error-group-unknown-header": "\u672a\u77e5\u7684\u8868\u5934: {{name}}", "db.messages.parser.error-group-header-name-missing": "\u7f3a\u5c11\u7ec4\u540d(group: ....)", "db.messages.parser.error-group-header-name-empty": "\u7ec4\u540d\u5fc5\u987b\u975e\u7a7a", "db.messages.parser.error-group-non-unique-attribute": "\u5c5e\u6027\u540d{{name}}\u5728\u5217{{index}}\u4e2d\u4e0d\u552f\u4e00", "db.messages.parser.error-group-non-unique-group-name": "\u91cd\u590d\u7684\u7ec4\u540d: {{name}}", "db.messages.parser.error-sql-string-use-single-quotes": "\u8bf7\u7528\u5355\u5f15\u53f7\u8868\u793a\u5b57\u7b26\u4e32", "db.messages.parser.error-sql-invalid-relation-name": "\"{{str}}\"\u4e0d\u80fd\u88ab\u7528\u4f5c\u5173\u7cfb\u540d", "db.messages.parser.error-sql-invalid-column-name": "\"{{str}}\"\u4e0d\u80fd\u88ab\u7528\u4f5c\u5217\u540d", "db.messages.parser.error-sql-group-by-missing": "\u7f3a\u5c11group by", "db.messages.parser.error-sql-having-without-group-by": "\u5b58\u5728having\u4f46\u7f3a\u5c11 \"group by\"\u6216\u805a\u5408\u64cd\u4f5c", "db.messages.parser.error-sql-negative-limit": "\u7ed9\u51fa\u7684\u9650\u5236\u5fc5\u987b >= 0", "db.messages.parser.error-sqldump-invalid-column-number": "\u7b2c {{line}} \u884c\u4e2d\u7684\u5217\u6570\u975e\u6cd5", "db.messages.parser.error-sqldump-invalid-type": "\u7b2c {{line}} \u884c\u4e2d\u7684\u7c7b\u578b\u975e\u6cd5", "db.messages.parser.error-sqldump-insert-wrong-number-columns": "\u503c\u7684\u6570\u91cf != \u5217\u7684\u6570\u91cf", "db.messages.parser.error-valueexpr-like-operand-no-string": "LIKE \u53f3\u4fa7\u7684\u64cd\u4f5c\u6570\u5fc5\u987b\u662f\u4e00\u4e2a\u5b57\u7b26\u4e32\u5b57\u9762\u91cf", "db.messages.exec.error-column-not-unique": "\u7531\u4e8e\u6b67\u4e49\uff0c\u4e0d\u80fd\u6dfb\u52a0\u5217 \"{{column}}\"", "db.messages.exec.error-column-not-found-name": "\u5728\u6a21\u5f0f {{schema}} \u4e2d\uff0c\u627e\u4e0d\u5230\u5217 \"{{column}}\"", "db.messages.exec.error-column-not-found-index": "\u5728\u6a21\u5f0f {{schema}}\u4e2d\uff0c\u5217\u7d22\u5f15 \"{{column}}\" \u8d85\u51fa\u4e86\u8303\u56f4; \u7d22\u5f15\u4ece1\u5f00\u59cb", "db.messages.exec.error-column-ambiguous": "\u5728\u6a21\u5f0f {{schema}} \u4e2d\uff0c\u5217 \"{{column}}\" \u5b58\u5728\u6b67\u4e49", "db.messages.exec.error-column-index-out-of-range": "\u5728\u6a21\u5f0f {{schema}}\u4e2d\uff0c\u5217\u7d22\u5f15 \"{{column}}\" \u8d85\u51fa\u4e86\u8303\u56f4; \u7d22\u5f15\u4ece1\u5f00\u59cb", "db.messages.exec.error-could-not-change-rel-alias-ambiguity": "\u7531\u4e8e\u6b67\u4e49\uff0c\u65e0\u6cd5\u8bbe\u7f6e\u5173\u7cfb\u522b\u540d \"{{alias}}\"", "db.messages.exec.error-could-not-rename-ambiguity": "\u7531\u4e8e\u5728\u6a21\u5f0f {{schema}} \u4e2d\u7684\u6b67\u4e49\uff0c\u65e0\u6cd5\u7ed9 \"{{oldName}}\" \u8bbe\u7f6e\u65b0\u540d\u79f0 \"{{newName}}\"", "db.messages.exec.error-schema-a-not-part-of-schema-b": "\u6a21\u5f0f {{schemaA}} \u4e0d\u662f\u6a21\u5f0f {{schemaB}} \u7684\u4e00\u90e8\u5206", "db.messages.exec.error-schemas-not-unifiable": "\u6a21\u5f0f\u4e0d\u7edf\u4e00: \u7c7b\u578b\u6216\u5927\u5c0f\u4e0d\u540c: {{schemaA}} \u548c {{schemaB}}", "db.messages.exec.error-column-not-in-both-schemas": "\u5728\u8fde\u63a5\u7684\u4e24\u4e2a\u6a21\u5f0f\u4e2d\u90fd\u65e0\u6cd5\u627e\u5230\u5217 \"{{column}}\"", "db.messages.exec.error-condition-must-be-boolean": "\u6761\u4ef6\u5fc5\u987b\u662f\u4e00\u4e2a\u5e03\u5c14\u8868\u8fbe\u5f0f", "db.messages.exec.error-func-not-defined-for-column-type": "\u5bf9\u4e8e\u7c7b\u578b {{colType}}\uff0c\u6ca1\u6709\u5b9a\u4e49 {{func}}", "db.messages.exec.error-join-would-produce-non-unique-columns": "\u8fde\u63a5\u53ef\u80fd\u4ea7\u751f\u4e0d\u552f\u4e00\u7684\u5217\u540d {{conflicts}}", "db.messages.exec.error-no-columns-match-alias-star": "\u6ca1\u6709\u5217\u5339\u914d \"{{alias}}.*\"", "db.messages.exec.error-datatype-not-specified-for-col": "\u6ca1\u6709\u6307\u5b9a\u5217 {{index}} (\"{{column}}\") \u7684\u6570\u636e\u7c7b\u578b", "db.messages.exec.error-invalid-projection-error": "\u975e\u6cd5\u7684\u6295\u5f71 \"{{argument}}\": {{error}}", "db.messages.exec.error-function-expects-type": "\u51fd\u6570 \"{{func}}\" \u671f\u671b \"{{expected}}\" \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u4f46\u5374\u63d0\u4f9b\u4e86 \"{{given}}\"", "db.messages.exec.error-could-not-compare-different-types": "\u7c7b\u578b\u4e0d\u540c\u65f6\u65e0\u6cd5\u6bd4\u8f83\u503c: {{typeA}} != {{typeB}}", "db.messages.exec.error-function-expects-arguments-of-same-type": "{{func}} \u671f\u671b\u6240\u6709\u53c2\u6570\u7684\u7c7b\u578b\u90fd\u76f8\u540c", "db.messages.exec.error-case-when-condition-must-be-boolean": "CASE WHEN \u7684\u6761\u4ef6\u5fc5\u987b\u662f\u5e03\u5c14\u7c7b\u578b", "db.messages.exec.error-case-when-expects-results-of-same-type": "CASE WHEN condition THEN result END \u671f\u671b\u6240\u6709\u7684 results \u7c7b\u578b\u90fd\u76f8\u540c", "db.messages.exec.error-invalid-date-format": "\"{{str}}\"\u4e0d\u662f\u5408\u6cd5\u7684\u65e5\u671f\uff1b\u671f\u671b\u7684\u683c\u5f0f: YYYY-MM-DD", "db.messages.translate.error-relation-not-found": "\u65e0\u6cd5\u627e\u5230\u5173\u7cfb \"{{name}}\"", "db.messages.translate.warning-distinct-missing": "\u7f3a\u5c11 DISTINCT", "db.messages.translate.warning-ignored-all-on-set-operators": "\u5ffd\u7565\u96c6\u5408\u8fd0\u7b97\u4e0a\u7684 ALL", "db.messages.translate.error-variable-name-conflict": "\u540d\u79f0\u51b2\u7a81: \u5173\u7cfb\u540d \"{{name}}\" \u5df2\u7ecf\u5b58\u5728", "db.messages.translate.error-variable-cyclic-usage": "\u68c0\u6d4b\u5230\u4e86\u5bf9\u53d8\u91cf \"{{name}}\" \u7684\u5faa\u73af\u4f7f\u7528", "editor.codemirror-placeholder": "\u4ece\u8fd9\u91cc\u5f00\u59cb\u4f60\u7684\u67e5\u8be2 ...\n\n\u5feb\u6377\u952e:\n\t\u6267\u884c\u8bed\u53e5: [CTRL]+[RETURN]\n\t\u6267\u884c\u9009\u533a: [CTRL]+[SHIFT]+[RETURN]\n\t\u81ea\u52a8\u8865\u5168: [CTRL]+[SPACE]\n", "editor.alert-message-headers.success": "\u6210\u529f", "editor.alert-message-headers.info": "\u4fe1\u606f", "editor.alert-message-headers.warning": "\u8b66\u544a", "editor.alert-message-headers.error": "\u9519\u8bef", "editor.inline-relation-editor.button-ok": "ok", "editor.inline-relation-editor.button-cancel": "\u53d6\u6d88", "editor.inline-relation-editor.placeholder-column-name-and-types": "\u5217\u540d:\u7c7b\u578b", "editor.inline-relation-editor.enter-your-data": "\u8bf7\u8f93\u5165\u60a8\u7684\u6570\u636e", "editor.inline-relation-editor.error-column-name-missing": "\u7f3a\u5c11\u5217 {{index}} \u7684\u5217\u540d", "editor.inline-relation-editor.error-wrong-quoted-string": "\u5b57\u7b26\u4e32\u5fc5\u987b\u4e0d\u542b\u5355\u5f15\u53f7\u548c\u53cc\u5f15\u53f7", "editor.error-no-query-found": "\u6ca1\u6709\u4efb\u4f55\u67e5\u8be2", "editor.pegjs-error.or": "\u6216", "editor.pegjs-error.no-input-found": "\u6ca1\u6709\u4efb\u4f55\u8f93\u5165", "editor.pegjs-error.end-of-input": "\u5df2\u5230\u8fbe\u8f93\u5165\u672b\u5c3e", "editor.pegjs-error.expected-found": "\u9009\u98791: \u671f\u671b {{expected}} \u4f46\u627e\u5230\u4e86 {{found}} . \u9009\u98792: \u5728\u5173\u7cfb\u540d\u7684\u5de6\u62ec\u53f7 '(' \u4e4b\u524d\uff0c\u9700\u8981\u7a7a\u767d\u7b26\u53f7", "editor.error-at-line-x": "\u5728\u7b2c {{line}} \u884c", "calc.messages.error-query-missing": "\u6ca1\u6709\u4efb\u4f55\u67e5\u8be2", "calc.messages.error-query-missing-assignments-found": "\u53ea\u6709\u8d4b\u503c\u64cd\u4f5c; \u7f3a\u5c11\u67e5\u8be2 Help - Assignments", "calc.messages.gist-load-success": "\u6210\u529f\u52a0\u8f7d\u4e86gist", "calc.menu.headline": "\u52a0\u8f7d\u6570\u636e\u96c6", "calc.menu.datasets": "\u6570\u636e\u96c6", "calc.menu.load-gist-headline": "\u52a0\u8f7d\u5b58\u50a8\u5728gist\u4e2d\u7684\u6570\u636e\u96c6", "calc.menu.load-gist-button": "\u52a0\u8f7d", "calc.menu.load-gist-insert-placeholder": "gist ID", "calc.menu.create-own-dataset-headline": "\u521b\u5efa\u60a8\u81ea\u5df1\u7684\u6570\u636e\u96c6", "calc.menu.create-own-dataset-text": "\u60a8\u53ef\u4ee5\u521b\u5efa\u81ea\u5df1\u7684\u6570\u636e\u96c6\u5e76\u548c\u522b\u4eba\u5206\u4eab\u3002\u4e86\u89e3\u66f4\u591a", "calc.menu.create-own-dataset-text-link": "\u7ef4\u62a4\u8005\u6559\u7a0b", "calc.menu.create-own-dataset-button-new": "\u521b\u5efa\u65b0\u7684\u6570\u636e\u96c6", "calc.menu.create-own-dataset-button-modify": "\u4fee\u6539\u5f53\u524d\u6570\u636e\u96c6", "calc.navigation.take-a-tour": "\u73af\u6e38\u4e00\u5708", "calc.navigation.feedback": "\u53cd\u9988", "calc.navigation.help": "\u5e2e\u52a9", "calc.navigation.calc": "\u8ba1\u7b97", "calc.navigation.language": "\u8bed\u8a00", "calc.maintainer-groups.misc": "\u6742\u9879", "calc.maintainer-groups.temp": "\u4e34\u65f6", "calc.maintainer-groups.uibk": "\u56e0\u65af\u5e03\u9c81\u514b\u5927\u5b66(University of Innsbruck)", "calc.maintainer-groups.karlsruhe": "\u5361\u5c14\u65af\u9c81\u5384\u5e94\u7528\u79d1\u5b66\u5927\u5b66(Karlsruhe University of Applied Sciences)", "calc.maintainer-groups.saarland": "\u8428\u5c14\u5170\u5927\u5b66(University of Saarland)", "calc.maintainer-groups.hsd": "\u675c\u585e\u5c14\u591a\u592b\u5e94\u7528\u79d1\u5b66\u5927\u5b66(University of Applied Sciences D\u00fcsseldorf)", "calc.editors.button-history": "\u5386\u53f2", "calc.editors.insert-relation-title": "\u63d2\u5165", "calc.editors.insert-relation-tooltip": "\u63d2\u5165\u5173\u7cfb\u6216\u5217\u540d", "calc.editors.group.tab-name": "\u7ec4\u7f16\u8f91\u5668", "calc.editors.group.tab-name-short": "\u7ec4\u7f16\u8f91\u5668", "calc.editors.group.toolbar.import-sql": "\u5bfc\u5165SQL\u8f6c\u50a8", "calc.editors.group.toolbar.import-sql-content": "\u5bfc\u5165SQL\u8f6c\u50a8", "calc.editors.group.toolbar.add-new-relation": "\u6dfb\u52a0\u65b0\u5173\u7cfb", "calc.editors.group.toolbar.add-new-relation-content": "\u6253\u5f00\u5173\u7cfb\u7f16\u8f91\u5668", "calc.editors.group.button-download": "\u4e0b\u8f7d", "calc.editors.group.button-exec": "\u9884\u89c8", "calc.editors.group.button-use": "\u5728\u7f16\u8f91\u5668\u4e2d\u4f7f\u7528\u7ec4", "calc.editors.group.button-use_plural": "\u5728\u7f16\u8f91\u5668\u4e2d\u4f7f\u7528\u7b2c\u4e00\u4e2a\u7ec4", "calc.editors.group.sql-import-group-name-placeholder": "\u7ec4\u540d (\u4eceSQL\u4e2d\u5bfc\u5165\u7684)", "calc.editors.group.new-group-example-group": "-- \u8fd9\u662f\u4e00\u4e2a\u4f8b\u5b50\n\ngroup: \u7ec4\u540d \n\n\nA = {\n\ta:string, b:number\n\texample, 42\n}", "calc.editors.group.modal-sqldump.modal-title": "\u5bfc\u5165SQL\u8f6c\u50a8", "calc.editors.group.modal-sqldump.button-close": "\u5173\u95ed", "calc.editors.group.modal-sqldump.button-cancel": "\u53d6\u6d88", "calc.editors.group.modal-sqldump.button-import-sql": "\u5bfc\u5165SQL", "calc.editors.group.modal-sqldump.description": "\u628a\u60a8\u7684SQL\u8f6c\u50a8\u6587\u4ef6\u653e\u5728\u8fd9\u91cc\u6765\u521b\u5efa\u4e00\u4e2a\u7ec4", "calc.editors.ra.tab-name": "\u5173\u7cfb\u4ee3\u6570", "calc.editors.ra.tab-name-short": "\u5173\u7cfb\u4ee3\u6570", "calc.editors.ra.button-execute-query": "\u6267\u884c\u67e5\u8be2", "calc.editors.ra.button-execute-selection": "\u6267\u884c\u9009\u533a", "calc.editors.ra.button-download": "\u4e0b\u8f7d", "calc.editors.ra.toolbar.projection": "\u6295\u5f71", "calc.editors.ra.toolbar.projection-content": "π a, b ( A )\n
pi a, b A", "calc.editors.ra.toolbar.selection": "\u9009\u533a", "calc.editors.ra.toolbar.selection-content": "σ a < b \u2227 b \u2260 c ( A )\n
sigma a < b and b != c A", "calc.editors.ra.toolbar.rename": "\u91cd\u547d\u540d\u5173\u7cfb/\u5217", "calc.editors.ra.toolbar.rename-content": "
σ x.a > 1 ( ρ x ( A ) )
\n
σ A.y > 2 ( rho y\u2190a ( A ) )
", "calc.editors.ra.toolbar.right-arrow": "\u5217\u91cd\u547d\u540d\u8fd0\u7b97\u7b26", "calc.editors.ra.toolbar.right-arrow-content": "
σ A.y > 2 ( ρ a\u2192y ( A ) )
", "calc.editors.ra.toolbar.rename-columns-operator": "\u5217\u91cd\u547d\u540d\u8fd0\u7b97\u7b26", "calc.editors.ra.toolbar.rename-columns-operator-content": "
σ A.y > 2 ( ρ y\u2190a ( A ) )
", "calc.editors.ra.toolbar.orderBy": "\u6392\u5e8f\u4f9d\u636e(order by)", "calc.editors.ra.toolbar.orderBy-content": "
τ a asc, [2] desc ( A )
tau a asc, [2] desc ( A )
", "calc.editors.ra.toolbar.groupBy": "\u5206\u7ec4\u4f9d\u636e(group by)", "calc.editors.ra.toolbar.groupBy-content": "
γ a, b; count(c)\u2192c ( A )
\n
gamma count(a)->x, sum(b)->y ( A )
", "calc.editors.ra.toolbar.and": "\u4e0e(and)", "calc.editors.ra.toolbar.and-content": "
σ a < b \u2227 b \u2260 c ( A )
", "calc.editors.ra.toolbar.xor": "\u5f02\u6216(xor)", "calc.editors.ra.toolbar.xor-content": "
σ a < b \u2295 b \u2260 c ( A )
", "calc.editors.ra.toolbar.or": "\u6216(or)", "calc.editors.ra.toolbar.or-content": "
σ a < b \u2228 b \u2260 c ( A )
", "calc.editors.ra.toolbar.not": "\u975e(not)", "calc.editors.ra.toolbar.not-content": "
&sigma", "calc.editors.ra.toolbar.equals": "\u7b49\u4e8e", "calc.editors.ra.toolbar.equals-content": "
&sigma", "calc.editors.ra.toolbar.not-equals": "\u4e0d\u7b49\u4e8e", "calc.editors.ra.toolbar.not-equals-content": "
&sigma", "calc.editors.ra.toolbar.greater-or-equals": "\u5927\u4e8e\u7b49\u4e8e", "calc.editors.ra.toolbar.greater-or-equals-content": "
&sigma", "calc.editors.ra.toolbar.lesser-or-equals": "\u5c0f\u4e8e\u7b49\u4e8e", "calc.editors.ra.toolbar.lesser-or-equals-content": "
&sigma", "calc.editors.ra.toolbar.intersect": "\u4ea4", "calc.editors.ra.toolbar.intersect-content": "
( A ) ( B )
", "calc.editors.ra.toolbar.union": "\u5e76", "calc.editors.ra.toolbar.union-content": "
( A ) ( B )
", "calc.editors.ra.toolbar.division": "\u9664", "calc.editors.ra.toolbar.division-content": "
( A ) \u00f7 ( B )
", "calc.editors.ra.toolbar.subtraction": "\u51cf", "calc.editors.ra.toolbar.subtraction-content": "
( A ) - ( B )
\n
( A ) \n ( B )
", "calc.editors.ra.toolbar.cross-join": "\u7b1b\u5361\u5c14\u79ef", "calc.editors.ra.toolbar.cross-join-content": "
( A ) \u2a2f ( B )
", "calc.editors.ra.toolbar.natural-join": "\u81ea\u7136\u8fde\u63a5/\u03b8-\u8fde\u63a5", "calc.editors.ra.toolbar.natural-join-content": "
( A ) \u22c8 ( B )
\n
( A ) \u22c8 A.a \u2265 B.a ( B )
", "calc.editors.ra.toolbar.left-outer-join": "\u5de6\u5916\u8fde\u63a5", "calc.editors.ra.toolbar.left-outer-join-content": "
( A ) \u27d5 ( B )
\n
( A ) \u27d5 A.a < B.a ( B )
\n", "calc.editors.ra.toolbar.right-outer-join": "\u53f3\u5916\u8fde\u63a5", "calc.editors.ra.toolbar.right-outer-join-content": "
( A ) \u27d6 ( B )
\n
( A ) \u27d6 A.a < B.a ( B )
\n", "calc.editors.ra.toolbar.full-outer-join": "\u5168\u5916\u8fde\u63a5", "calc.editors.ra.toolbar.full-outer-join-content": "
( A ) \u27d7 ( B )
\n
( A ) \u27d7 A.a != B.a ( B )
", "calc.editors.ra.toolbar.left-semi-join": "\u5de6\u534a\u8fde\u63a5", "calc.editors.ra.toolbar.left-semi-join-content": "
( A ) \u22c9 ( B )
", "calc.editors.ra.toolbar.right-semi-join": "\u53f3\u534a\u8fde\u63a5", "calc.editors.ra.toolbar.right-semi-join-content": "
( A ) \u22ca ( B )
", "calc.editors.ra.toolbar.anti-join": "\u53cd\u8fde\u63a5", "calc.editors.ra.toolbar.anti-join-content": "
( A ) \u25b7 ( B )
", "calc.editors.ra.toolbar.assignment": "\u8d4b\u503c", "calc.editors.ra.toolbar.assignment-content": "
X = pi a ( A )\n
Y = pi b ( b )\n
( X ) ( Y )
", "calc.editors.ra.toolbar.single-line-comment": "\u5355\u884c\u6ce8\u91ca", "calc.editors.ra.toolbar.single-line-comment-content": "π a, b A -- useful comment", "calc.editors.ra.toolbar.multi-line-comment": "\u591a\u884c\u6ce8\u91ca", "calc.editors.ra.toolbar.multi-line-comment-content": "/* this is a very,
very long comment */

π a, b A", "calc.editors.ra.toolbar.inline-relation": "\u884c\u5185\u5173\u7cfb", "calc.editors.ra.toolbar.inline-relation-content": "σ a = 'test' ({
a:string, b:number, X.c:date
a, 1, 1970-01-01
}
)", "calc.editors.ra.toolbar.inline-relation-editor": "\u884c\u5185\u5173\u7cfb (\u7f16\u8f91\u5668)", "calc.editors.ra.toolbar.inline-relation-editor-content": "\u4f7f\u7528\u5185\u7f6e\u7f16\u8f91\u5668\u521b\u5efa\u4e00\u4e2a\u884c\u5185\u5173\u7cfb", "calc.editors.ra.toolbar.insert-date": "\u63d2\u5165\u65e5\u671f", "calc.editors.ra.toolbar.insert-date-content": "σ a < date('1970-01-01') ( A )", "calc.editors.ra.toolbar.autoreplace-operators.title": "\u64cd\u4f5c\u7b26\u66ff\u6362", "calc.editors.ra.toolbar.autoreplace-operators.header": "\u81ea\u52a8\u66ff\u6362\u64cd\u4f5c\u7b26", "calc.editors.ra.toolbar.autoreplace-operators.none": "\u4e0d\u8fdb\u884c\u66ff\u6362", "calc.editors.ra.toolbar.autoreplace-operators.plain2math": "pi => \u03c0", "calc.editors.ra.toolbar.autoreplace-operators.math2plain": "\u03c0 => pi", "calc.editors.sql.tab-name": "SQL", "calc.editors.sql.tab-name-short": "SQL", "calc.editors.sql.button-execute-query": "\u6267\u884c\u67e5\u8be2", "calc.editors.sql.button-execute-selection": "\u6267\u884c\u9009\u533a", "calc.editors.sql.button-download": "\u4e0b\u8f7d", "calc.editors.sql.toolbar.select": "select \u5b50\u53e5", "calc.editors.sql.toolbar.select-content": "

SELECT * FROM A

SELECT a, A.b, A.c FROM A
", "calc.editors.sql.toolbar.from": "from \u5b50\u53e5", "calc.editors.sql.toolbar.from-content": "
SELECT *
FROM A, B as b
INNER JOIN C NATURAL
", "calc.editors.sql.toolbar.where": "where \u5b50\u53e5", "calc.editors.sql.toolbar.where-content": "SELECT * FROM A, B
where A.a = B.a or false", "calc.editors.sql.toolbar.group-by": "group by \u5b50\u53e5", "calc.editors.sql.toolbar.group-by-content": "SELECT a, COUNT(b) as num
FROM A
GROUP BY a", "calc.editors.sql.toolbar.having": "having \u5b50\u53e5", "calc.editors.sql.toolbar.having-content": "SELECT a, SUM(b) as sum
FROM A
GROUP BY a
having sum > 10", "calc.editors.sql.toolbar.order-by": "order by \u5b50\u53e5", "calc.editors.sql.toolbar.order-by-content": "

SELECT * FROM A ORDER BY a asc, b desc

SELECT * FROM A ORDER BY 1, 2, 3
", "calc.editors.sql.toolbar.limit": "limit \u5b50\u53e5", "calc.editors.sql.toolbar.limit-content": "SELECT * FROM A
LIMIT 10 OFFSET 0", "calc.editors.sql.toolbar.insert-date": "\u63d2\u5165\u65e5\u671f", "calc.editors.sql.toolbar.insert-date-content": "select * from A\nwhere a < date(\"1970-01-01\")", "calc.result.modal.title": "\u7ed3\u679c", "calc.result.modal.close": "\u5173\u95ed", "calc.editors.ra.inline-editor.title": "\u5173\u7cfb\u7f16\u8f91\u5668", "calc.editors.ra.inline-editor.button-download-csv": "\u4e0b\u8f7dCSV", "calc.editors.ra.inline-editor.button-upload-csv": "\u4e0a\u4f20CSV", "calc.editors.ra.inline-editor.button-cancel": "\u53d6\u6d88", "calc.editors.ra.inline-editor.button-ok": "Ok", "calc.editors.ra.inline-editor.row-name": "\u540d\u79f0", "calc.editors.ra.inline-editor.row-type": "\u7c7b\u578b", "calc.editors.ra.inline-editor.input-relation-name": "\u5173\u7cfb\u540d", "calc.navigation.imprint": "\u5173\u4e8e\u672c\u9879\u76ee"} \ No newline at end of file