├── .gitignore ├── .vscode ├── extensions.json └── settings.json ├── LICENSE ├── README-ZH.md ├── README.md ├── docs ├── figma-i18n-dark.gif ├── figma-i18n-light.gif ├── figma-i18n-logo.png └── payment.png ├── package-lock.json ├── package.json ├── pnpm-lock.yaml ├── public ├── build │ ├── bundle.js │ └── bundle.js.map ├── favicon.png ├── global.css └── index.html ├── rollup.config.js ├── src ├── filter │ └── index.ts ├── global.d.ts ├── locale │ ├── index.ts │ └── lang │ │ ├── en.ts │ │ ├── ja.ts │ │ └── zh-cn.ts ├── main.ts ├── store │ └── index.ts ├── translator │ └── index.ts ├── types │ └── index.ts └── ui │ ├── App.svelte │ └── Menu.svelte ├── tsconfig.json └── yarn-error.log /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | 3 | .DS_Store 4 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["svelte.svelte-vscode"] 3 | } 4 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "prettier.tabWidth": 4, 3 | "prettier.useTabs": true 4 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README-ZH.md: -------------------------------------------------------------------------------- 1 |

2 | i18n.js 3 |
4 | 强大、智能并且简单易用的 Figma 国际化脚本 5 |
6 |
7 | Apache License 8 | Apache License 9 | Apache License 10 |
11 |
12 | English | 中文 13 |

14 | 15 | 16 | ### 💽 脚本安装 17 | 18 | 1. 安装 Figma I18n 脚本之前请确认浏览器是否已安装脚本管理器,如果没有则点击下方链接进行安装(由于`Violentmonkey`有可能存在未知的兼容性问题,强烈建议安装`Tampermonkey`) 19 | 20 | * [Tampermonkey(油猴,推荐👍)](https://www.tampermonkey.net/) 21 | * [Violentmonkey(暴力猴)](https://violentmonkey.github.io/get-it/) 22 | 23 | 24 | 2. 点击下方链接,通过 [GreasyFork](https://greasyfork.org/zh-CN) 安装用户脚本 25 | 26 | [Figma I18n:点击我安装脚本!!!](https://greasyfork.org/zh-CN/scripts/440348-figma-i18n) 27 | 28 | ### 📚 脚本特性 29 | 30 | * 简单易用:无需额外安装插件且支持手动进行语言切换,无需频繁关闭/启用插件 31 | * 多语言支持:支持英文、简体中文和日语,繁体中文以及其它语言将会逐步支持 32 | * 智能切换主题:操作菜单支持根据操作页面自动切换主题 33 | * 精准的语言转换:精准识别所有需要进行语言转换的DOM节点,解决通过字符串匹配导致翻译不准确的问题 34 | * 优秀的转换效率:充分复用已有节点,最大程度减少每次操作节点的次数,大幅度提高转换效率 35 | 36 | ### 📺 功能演示 37 | 38 | ![Fiama I18n 脚本演示](./docs/figma-i18n-dark.gif) 39 | 40 | ![Fiama I18n 脚本演示](./docs/figma-i18n-light.gif) 41 | 42 | ### ❤️ 捐赠作者 43 | 44 | 45 | 46 | ### 📄 开源许可证 47 | 48 | [Apache License](https://github.com/NICEXAI/figma-i18n/blob/main/LICENSE) © 2022-PRESENT [Afeyer](https://github.com/NICEXAI) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | i18n.js 3 |
4 | Powerful, intelligent and easy to use Figma internationalisation scripts 5 |
6 |
7 | Apache License 8 | Apache License 9 | Apache License 10 |
11 |
12 | English | 中文 13 |

14 | 15 | 16 | ### 💽 Script Installation 17 | 18 | 1. Before installing the Figma I18n script, please confirm whether the script manager is installed in the browser. If not, click the link below to install it (due to `Violentmonkey` may have unknown compatibility issues, it is strongly recommended to install `Tampermonkey`). 19 | 20 | * [Tampermonkey](https://www.tampermonkey.net/) 👍 21 | * [Violentmonkey](https://violentmonkey.github.io/get-it/) 22 | 23 | 2. Click the link below to install the user script via [GreasyFork](https://greasyfork.org/zh-CN) 24 | 25 | [Figma I18n:Click me to install the script !!!](https://greasyfork.org/zh-CN/scripts/440348-figma-i18n) 26 | 27 | ### 📚 Script Features 28 | 29 | * Simple to use:No need to install additional plug-ins and manual language switching is supported, eliminating the need to turn plug-ins off/on frequently 30 | * Multi-language support:Support English, Simplified Chinese and Japanese, Traditional Chinese and other languages will be supported gradually 31 | * Smart switch theme:The action menu supports automatic theme switching according to the page 32 | * Precise language conversion:Accurately identify all DOM nodes that require language conversion, and solve the problem of inaccurate translation caused by string matching 33 | * Excellent conversion efficiency:Fully reuse existing nodes, minimize the number of operations on each node, and greatly improve conversion efficiency 34 | 35 | ### 📺 Function demonstration 36 | 37 | ![Fiama I18n Demo](./docs/figma-i18n-dark.gif) 38 | 39 | ![Fiama I18n Demo](./docs/figma-i18n-light.gif) 40 | 41 | ### ❤️ Sponsored Author 42 | 43 | 44 | 45 | ### 📄 Open Source License 46 | 47 | [Apache License](https://github.com/NICEXAI/figma-i18n/blob/main/LICENSE) © 2022-PRESENT [Afeyer](https://github.com/NICEXAI) -------------------------------------------------------------------------------- /docs/figma-i18n-dark.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NICEXAI/figma-i18n/1d4a3799f5867ccc3f9095d5fa2bf20237769fa7/docs/figma-i18n-dark.gif -------------------------------------------------------------------------------- /docs/figma-i18n-light.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NICEXAI/figma-i18n/1d4a3799f5867ccc3f9095d5fa2bf20237769fa7/docs/figma-i18n-light.gif -------------------------------------------------------------------------------- /docs/figma-i18n-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NICEXAI/figma-i18n/1d4a3799f5867ccc3f9095d5fa2bf20237769fa7/docs/figma-i18n-logo.png -------------------------------------------------------------------------------- /docs/payment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NICEXAI/figma-i18n/1d4a3799f5867ccc3f9095d5fa2bf20237769fa7/docs/payment.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "figma-i18n", 3 | "version": "1.0.8", 4 | "description": "Powerful, intelligent and easy to use Figma internationalisation scripts.", 5 | "author": "afeyer", 6 | "private": true, 7 | "scripts": { 8 | "build": "rollup -c", 9 | "dev": "rollup -c -w", 10 | "start": "sirv public --no-clear", 11 | "check": "svelte-check --tsconfig ./tsconfig.json" 12 | }, 13 | "devDependencies": { 14 | "@rollup/plugin-commonjs": "^17.0.0", 15 | "@rollup/plugin-node-resolve": "^11.0.0", 16 | "@rollup/plugin-typescript": "^8.0.0", 17 | "@tsconfig/svelte": "^2.0.0", 18 | "attractions": "^3.7.0", 19 | "postcss": "^8.4.7", 20 | "rollup": "^2.3.4", 21 | "rollup-plugin-banner2": "^1.2.2", 22 | "rollup-plugin-css-only": "^3.1.0", 23 | "rollup-plugin-livereload": "^2.0.0", 24 | "rollup-plugin-postcss": "^4.0.2", 25 | "rollup-plugin-svelte": "^7.0.0", 26 | "rollup-plugin-terser": "^7.0.0", 27 | "sass": "^1.49.9", 28 | "smelte": "^1.1.8", 29 | "svelte": "^3.0.0", 30 | "svelte-check": "^2.0.0", 31 | "svelte-preprocess": "^4.10.4", 32 | "tslib": "^2.0.0", 33 | "typescript": "^4.0.0" 34 | }, 35 | "dependencies": { 36 | "sirv-cli": "^2.0.0" 37 | } 38 | } -------------------------------------------------------------------------------- /public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NICEXAI/figma-i18n/1d4a3799f5867ccc3f9095d5fa2bf20237769fa7/public/favicon.png -------------------------------------------------------------------------------- /public/global.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | position: relative; 3 | width: 100%; 4 | height: 100%; 5 | } 6 | 7 | * { 8 | padding: 0; 9 | margin: 0; 10 | } 11 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Figma I18n 8 | 9 | 10 | 11 | 12 | 13 | 14 | 41 | 42 | 43 | 44 |
45 |
46 |
File
47 |
48 |
49 |
50 | 51 | 52 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import svelte from 'rollup-plugin-svelte'; 2 | import commonjs from '@rollup/plugin-commonjs'; 3 | import resolve from '@rollup/plugin-node-resolve'; 4 | import livereload from 'rollup-plugin-livereload'; 5 | import { terser } from 'rollup-plugin-terser'; 6 | import sveltePreprocess from 'svelte-preprocess'; 7 | import typescript from '@rollup/plugin-typescript'; 8 | // import css from 'rollup-plugin-css-only'; 9 | import postcss from 'rollup-plugin-postcss' 10 | import banner from 'rollup-plugin-banner2' 11 | import {version, description, author} from "./package.json" 12 | 13 | const production = !process.env.ROLLUP_WATCH; 14 | const metaInfo = { 15 | "name": "Figma i18n", 16 | "namespace": "https://github.com/NICEXAI", 17 | "version": version, 18 | "description": description, 19 | "encoding": "utf-8", 20 | "author": author, 21 | "homepage": "https://github.com/NICEXAI/figma-i18n", 22 | "supportURL": "https://github.com/NICEXAI/figma-i18n/issues", 23 | "updateURL": "https://github.com/NICEXAI/figma-i18n/blob/main/dist/figma-i18n.normal.js", 24 | "downloadURL": "https://github.com/NICEXAI/figma-i18n/blob/main/dist/figma-i18n.normal.js", 25 | 26 | "match": "*://www.figma.com/*", 27 | "run-at": "document-end", 28 | "icon": "https://static.figma.com/app/icon/1/favicon.png", 29 | "license": "Apache; https://github.com/NICEXAI/figma-i18n/blob/main/LICENSE", 30 | 31 | "grant": "unsafeWindow", 32 | "grant": "window.console", 33 | "grant": "GM_getValue", 34 | "grant": "GM_setValue", 35 | } 36 | 37 | function serve() { 38 | let server; 39 | 40 | function toExit() { 41 | if (server) server.kill(0); 42 | } 43 | 44 | return { 45 | writeBundle() { 46 | if (server) return; 47 | server = require('child_process').spawn('npm', ['run', 'start', '--', '--dev'], { 48 | stdio: ['ignore', 'inherit', 'inherit'], 49 | shell: true 50 | }); 51 | 52 | process.on('SIGTERM', toExit); 53 | process.on('exit', toExit); 54 | } 55 | }; 56 | } 57 | 58 | export default { 59 | input: 'src/main.ts', 60 | output: { 61 | sourcemap: true, 62 | format: 'iife', 63 | name: 'app', 64 | file: 'public/build/bundle.js' 65 | }, 66 | plugins: [ 67 | svelte({ 68 | preprocess: sveltePreprocess({ sourceMap: !production }), 69 | compilerOptions: { 70 | // enable run-time checks when not in production 71 | dev: !production 72 | } 73 | }), 74 | postcss({ 75 | extract: false, 76 | minimize: true 77 | }), 78 | // we'll extract any component CSS out into 79 | // a separate file - better for performance 80 | // css({ output: 'bundle.css' }), 81 | 82 | // If you have external dependencies installed from 83 | // npm, you'll most likely need these plugins. In 84 | // some cases you'll need additional configuration - 85 | // consult the documentation for details: 86 | // https://github.com/rollup/plugins/tree/master/packages/commonjs 87 | resolve({ 88 | browser: true, 89 | dedupe: ['svelte'] 90 | }), 91 | commonjs(), 92 | typescript({ 93 | sourceMap: !production, 94 | inlineSources: !production 95 | }), 96 | 97 | // In dev mode, call `npm run start` once 98 | // the bundle has been generated 99 | !production && serve(), 100 | 101 | // Watch the `public` directory and refresh the 102 | // browser on changes when not in production 103 | !production && livereload('public'), 104 | 105 | // If we're building for production (npm run build 106 | // instead of npm run dev), minify 107 | production && terser(), 108 | 109 | banner(() => { 110 | let maxLabelLen = 0; 111 | let metaItems = [] 112 | 113 | for (const label in metaInfo) { 114 | if (Object.hasOwnProperty.call(metaInfo, label)) { 115 | const content = metaInfo[label]; 116 | if(label.length > maxLabelLen) { 117 | maxLabelLen = label.length 118 | } 119 | metaItems.push([label, content]) 120 | } 121 | } 122 | 123 | return ( 124 | '// ==UserScript==\n' + 125 | metaItems.reduce((str, [label, content]) => { 126 | label = label.trim() 127 | if(typeof(content) == "string") { 128 | content = content.trim() 129 | } 130 | 131 | return ( 132 | str + 133 | `// @${ 134 | label.length < maxLabelLen 135 | ? label + 136 | [...new Array(maxLabelLen - label.length)] 137 | .map(() => ' ') 138 | .join('') 139 | : label 140 | } ${content}\n` 141 | ) 142 | }, '') + 143 | '// ==/UserScript==\n' 144 | ) 145 | }) 146 | ], 147 | watch: { 148 | clearScreen: false 149 | } 150 | }; 151 | -------------------------------------------------------------------------------- /src/filter/index.ts: -------------------------------------------------------------------------------- 1 | interface MatchRule { 2 | [key: string]: string 3 | } 4 | 5 | const matchRuleDict: MatchRule = { 6 | "fullscreenMenu.BackToFiles": "a[data-onboarding-key='back-to-files']>span[class^='multilevel_dropdown--name']", 7 | 8 | "fullscreenMenu.QuickActions": "div[data-testid='dropdown-option-Quick actions…']>div[class^='multilevel_dropdown--name']", 9 | 10 | "fullscreenMenu.File": "div[data-testid='dropdown-option-File']>div[class^='multilevel_dropdown--name']", 11 | "fullscreenMenu.File.NewDesignFile": "div[data-testid='dropdown-option-New design file']>div[class^='multilevel_dropdown--name']", 12 | "fullscreenMenu.File.NewFigJamFile": "div[data-testid='dropdown-option-New FigJam file']>div[class^='multilevel_dropdown--name']", 13 | "fullscreenMenu.File.NewFromSketchFile": "div[data-testid='dropdown-option-New from Sketch file…']>div[class^='multilevel_dropdown--name']", 14 | "fullscreenMenu.File.PlaceImage": "div[data-testid='dropdown-option-Place image...']>div[class^='multilevel_dropdown--name']", 15 | "fullscreenMenu.File.ImportFromCSV": "div[data-testid='dropdown-option-Import from CSV…']>div[class^='multilevel_dropdown--name']", 16 | "fullscreenMenu.File.SaveLocalCopy": "div[data-testid='dropdown-option-Save local copy…']>div[class^='multilevel_dropdown--name']", 17 | "fullscreenMenu.File.SaveToVersionHistory": "div[data-testid='dropdown-option-Save to version history…']>div[class^='multilevel_dropdown--name']", 18 | "fullscreenMenu.File.ShowVersionHistory": "div[data-testid='dropdown-option-Show version history']>div[class^='multilevel_dropdown--name']", 19 | "fullscreenMenu.File.Export": "div[data-testid='dropdown-option-Export…']>div[class^='multilevel_dropdown--name']", 20 | "fullscreenMenu.File.ExportFramesToPDF": "div[data-testid='dropdown-option-Export frames to PDF…']>div[class^='multilevel_dropdown--name']", 21 | "fullscreenMenu.File.ExportAs": "div[data-testid='dropdown-option-Export as…']>div[class^='multilevel_dropdown--name']", 22 | "fullscreenMenu.File.ExportSelection": "div[data-testid='dropdown-option-Export selection…']>div[class^='multilevel_dropdown--name']", 23 | 24 | "fullscreenMenu.Edit": "div[data-testid='dropdown-option-Edit']>div[class^='multilevel_dropdown--name']", 25 | "fullscreenMenu.Edit.Undo": "div[data-testid='dropdown-option-Undo']>div[class^='multilevel_dropdown--name']", 26 | "fullscreenMenu.Edit.Redo": "div[data-testid='dropdown-option-Redo']>div[class^='multilevel_dropdown--name']", 27 | 28 | "fullscreenMenu.Edit.CopyAs": "div[data-testid='dropdown-option-Copy as']>div[class^='multilevel_dropdown--name']", 29 | "fullscreenMenu.Edit.CopyAs.CopyAsText": "div[data-testid='dropdown-option-Copy as text']>div[class^='multilevel_dropdown--name']", 30 | "fullscreenMenu.Edit.CopyAs.CopyAsCSS": "div[data-testid='dropdown-option-Copy as CSS']>div[class^='multilevel_dropdown--name']", 31 | "fullscreenMenu.Edit.CopyAs.CopyAsSVG": "div[data-testid='dropdown-option-Copy as SVG']>div[class^='multilevel_dropdown--name']", 32 | "fullscreenMenu.Edit.CopyAs.CopyAsPNG": "div[data-testid='dropdown-option-Copy as PNG']>div[class^='multilevel_dropdown--name']", 33 | 34 | "fullscreenMenu.Edit.PasteOverSelection": "div[data-testid='dropdown-option-Paste over selection']>div[class^='multilevel_dropdown--name']", 35 | "fullscreenMenu.Edit.PasteToReplace": "div[data-testid='dropdown-option-Paste to replace']>div[class^='multilevel_dropdown--name']", 36 | "fullscreenMenu.Edit.Duplicate": "div[data-testid='dropdown-option-Duplicate']>div[class^='multilevel_dropdown--name']", 37 | "fullscreenMenu.Edit.Delete": "div[data-testid='dropdown-option-Delete']>div[class^='multilevel_dropdown--name']", 38 | "fullscreenMenu.Edit.SetDefaultProperties": "div[data-testid='dropdown-option-Set default properties']>div[class^='multilevel_dropdown--name']", 39 | "fullscreenMenu.Edit.CopyProperties": "div[data-testid='dropdown-option-Copy properties']>div[class^='multilevel_dropdown--name']", 40 | "fullscreenMenu.Edit.PasteProperties": "div[data-testid='dropdown-option-Paste properties']>div[class^='multilevel_dropdown--name']", 41 | "fullscreenMenu.Edit.PickColor": "div[data-testid='dropdown-option-Pick color']>div[class^='multilevel_dropdown--name']", 42 | "fullscreenMenu.Edit.SelectAll": "div[data-testid='dropdown-option-Select all']>div[class^='multilevel_dropdown--name']", 43 | "fullscreenMenu.Edit.SelectNone": "div[data-testid='dropdown-option-Select none']>div[class^='multilevel_dropdown--name']", 44 | "fullscreenMenu.Edit.SelectInverse": "div[data-testid='dropdown-option-Select inverse']>div[class^='multilevel_dropdown--name']", 45 | "fullscreenMenu.Edit.SelectAllMatchingLayers": "div[data-testid='dropdown-option-Select all matching layers']>div[class^='multilevel_dropdown--name']", 46 | "fullscreenMenu.Edit.SelectAllWithSameProperties": "div[data-testid='dropdown-option-Select all with same properties']>div[class^='multilevel_dropdown--name']", 47 | "fullscreenMenu.Edit.SelectAllWithSameFill": "div[data-testid='dropdown-option-Select all with same fill']>div[class^='multilevel_dropdown--name']", 48 | "fullscreenMenu.Edit.SelectAllWithSameStroke": "div[data-testid='dropdown-option-Select all with same stroke']>div[class^='multilevel_dropdown--name']", 49 | "fullscreenMenu.Edit.SelectAllWithSameEffect": "div[data-testid='dropdown-option-Select all with same effect']>div[class^='multilevel_dropdown--name']", 50 | "fullscreenMenu.Edit.SelectAllWithSameTextProperties": "div[data-testid='dropdown-option-Select all with same text properties']>div[class^='multilevel_dropdown--name']", 51 | "fullscreenMenu.Edit.SelectAllWithSameFont": "div[data-testid='dropdown-option-Select all with same font']>div[class^='multilevel_dropdown--name']", 52 | "fullscreenMenu.Edit.SelectAllWithSameInstance": "div[data-testid='dropdown-option-Select all with same instance']>div[class^='multilevel_dropdown--name']", 53 | "fullscreenMenu.Edit.SelectAllWithSameVariant": "div[data-testid='dropdown-option-Select all with same variant']>div[class^='multilevel_dropdown--name']", 54 | 55 | "fullscreenMenu.View": "div[data-testid='dropdown-option-View']>div[class^='multilevel_dropdown--name']", 56 | "fullscreenMenu.View.PixelGrid": "div[data-testid='dropdown-option-Pixel grid']>div[class^='multilevel_dropdown--name']", 57 | "fullscreenMenu.View.LayoutGrids": "div[data-testid='dropdown-option-Layout grids']>div[class^='multilevel_dropdown--name']", 58 | "fullscreenMenu.View.Rulers": "div[data-testid='dropdown-option-Rulers']>div[class^='multilevel_dropdown--name']", 59 | "fullscreenMenu.View.ShowSlices": "div[data-testid='dropdown-option-Show slices']>div[class^='multilevel_dropdown--name']", 60 | "fullscreenMenu.View.Comments": "div[data-testid='dropdown-option-Comments']>div[class^='multilevel_dropdown--name']", 61 | "fullscreenMenu.View.Outlines": "div[data-testid='dropdown-option-Outlines']>div[class^='multilevel_dropdown--name']", 62 | "fullscreenMenu.View.PixelPreview": "div[data-testid='dropdown-option-Pixel preview']>div[class^='multilevel_dropdown--name']", 63 | "fullscreenMenu.View.MaskOutlines": "div[data-testid='dropdown-option-Mask outlines']>div[class^='multilevel_dropdown--name']", 64 | "fullscreenMenu.View.FrameOutlines": "div[data-testid='dropdown-option-Frame outlines']>div[class^='multilevel_dropdown--name']", 65 | "fullscreenMenu.View.ShowDotGrid": "div[data-testid='dropdown-option-Show dot grid']>div[class^='multilevel_dropdown--name']", 66 | "fullscreenMenu.View.ResourceUse": "div[data-testid='dropdown-option-Resource use']>div[class^='multilevel_dropdown--name']", 67 | "fullscreenMenu.View.ShowOrHideUI": "div[data-testid='dropdown-option-Show/Hide UI']>div[class^='multilevel_dropdown--name']", 68 | "fullscreenMenu.View.MultiplayerCursors": "div[data-testid='dropdown-option-Multiplayer cursors']>div[class^='multilevel_dropdown--name']", 69 | 70 | "fullscreenMenu.View.Panels": "div[data-testid='dropdown-option-Panels']>div[class^='multilevel_dropdown--name']", 71 | "fullscreenMenu.View.Panels.OpenLayersPanel": "div[data-testid='dropdown-option-Open layers panel']>div[class^='multilevel_dropdown--name']", 72 | "fullscreenMenu.View.Panels.OpenDesignPanel": "div[data-testid='dropdown-option-Open design panel']>div[class^='multilevel_dropdown--name']", 73 | "fullscreenMenu.View.Panels.OpenPrototypePanel": "div[data-testid='dropdown-option-Open prototype panel']>div[class^='multilevel_dropdown--name']", 74 | "fullscreenMenu.View.Panels.OpenInspectPanel": "div[data-testid='dropdown-option-Open inspect panel']>div[class^='multilevel_dropdown--name']", 75 | "fullscreenMenu.View.Panels.ShowLeftSidebar": "div[data-testid='dropdown-option-Show left sidebar']>div[class^='multilevel_dropdown--name']", 76 | 77 | "fullscreenMenu.View.ZoomIn": "div[data-testid='dropdown-option-Zoom in']>div[class^='multilevel_dropdown--name']", 78 | "fullscreenMenu.View.ZoomOut": "div[data-testid='dropdown-option-Zoom out']>div[class^='multilevel_dropdown--name']", 79 | "fullscreenMenu.View.ZoomTo100%": "div[data-testid='dropdown-option-Zoom to 100%']>div[class^='multilevel_dropdown--name']", 80 | "fullscreenMenu.View.ZoomToFit": "div[data-testid='dropdown-option-Zoom to fit']>div[class^='multilevel_dropdown--name']", 81 | "fullscreenMenu.View.ZoomToSelection": "div[data-testid='dropdown-option-Zoom to selection']>div[class^='multilevel_dropdown--name']", 82 | "fullscreenMenu.View.PreviousPage": "div[data-testid='dropdown-option-Previous page']>div[class^='multilevel_dropdown--name']", 83 | "fullscreenMenu.View.NextPage": "div[data-testid='dropdown-option-Next page']>div[class^='multilevel_dropdown--name']", 84 | "fullscreenMenu.View.ZoomToPreviousFrame": "div[data-testid='dropdown-option-Zoom to previous frame']>div[class^='multilevel_dropdown--name']", 85 | "fullscreenMenu.View.ZoomToNextFrame": "div[data-testid='dropdown-option-Zoom to next frame']>div[class^='multilevel_dropdown--name']", 86 | "fullscreenMenu.View.FindPreviousFrame": "div[data-testid='dropdown-option-Find previous frame']>div[class^='multilevel_dropdown--name']", 87 | "fullscreenMenu.View.FindNextFrame": "div[data-testid='dropdown-option-Find next frame']>div[class^='multilevel_dropdown--name']", 88 | 89 | "fullscreenMenu.Object": "div[data-testid='dropdown-option-Object']>div[class^='multilevel_dropdown--name']", 90 | "fullscreenMenu.Object.GroupSelection": "div[data-testid='dropdown-option-Group selection']>div[class^='multilevel_dropdown--name']", 91 | "fullscreenMenu.Object.CreateSection": "div[data-testid='dropdown-option-Create section']>div[class^='multilevel_dropdown--name']", 92 | "fullscreenMenu.Object.FrameSelection": "div[data-testid='dropdown-option-Frame selection']>div[class^='multilevel_dropdown--name']", 93 | "fullscreenMenu.Object.UngroupSelection": "div[data-testid='dropdown-option-Ungroup selection']>div[class^='multilevel_dropdown--name']", 94 | "fullscreenMenu.Object.UseAsMask": "div[data-testid='dropdown-option-Use as mask']>div[class^='multilevel_dropdown--name']", 95 | "fullscreenMenu.Object.RestoreDefaultThumbnail": "div[data-testid='dropdown-option-Restore default thumbnail']>div[class^='multilevel_dropdown--name']", 96 | "fullscreenMenu.Object.SetAsThumbnail": "div[data-testid='dropdown-option-Set as thumbnail']>div[class^='multilevel_dropdown--name']", 97 | "fullscreenMenu.Object.AddAutoLayout": "div[data-testid='dropdown-option-Add auto layout']>div[class^='multilevel_dropdown--name']", 98 | "fullscreenMenu.Object.CreateComponent": "div[data-testid='dropdown-option-Create component']>div[class^='multilevel_dropdown--name']", 99 | "fullscreenMenu.Object.ResetAllChanges": "div[data-testid='dropdown-option-Reset all changes']>div[class^='multilevel_dropdown--name']", 100 | "fullscreenMenu.Object.ResetAllOverrides": "div[data-testid='dropdown-option-Reset all overrides']>div[class^='multilevel_dropdown--name']", 101 | "fullscreenMenu.Object.DetachInstance": "div[data-testid='dropdown-option-Detach instance']>div[class^='multilevel_dropdown--name']", 102 | 103 | "fullscreenMenu.Object.MainComponent": "div[data-testid='dropdown-option-Main component']>div[class^='multilevel_dropdown--name']", 104 | "fullscreenMenu.Object.MainComponent.GoToMainComponent": "div[data-testid='dropdown-option-Go to main component']>div[class^='multilevel_dropdown--name']", 105 | "fullscreenMenu.Object.MainComponent.PushOverridesToMainComponent": "div[data-testid='dropdown-option-Push overrides to main component']>div[class^='multilevel_dropdown--name']", 106 | "fullscreenMenu.Object.MainComponent.RestoreMainComponent": "div[data-testid='dropdown-option-Restore main component']>div[class^='multilevel_dropdown--name']", 107 | 108 | "fullscreenMenu.Object.BringToFront": "div[data-testid='dropdown-option-Bring to front']>div[class^='multilevel_dropdown--name']", 109 | "fullscreenMenu.Object.BringForward": "div[data-testid='dropdown-option-Bring forward']>div[class^='multilevel_dropdown--name']", 110 | "fullscreenMenu.Object.SendBackward": "div[data-testid='dropdown-option-Send backward']>div[class^='multilevel_dropdown--name']", 111 | "fullscreenMenu.Object.SendToBack": "div[data-testid='dropdown-option-Send to back']>div[class^='multilevel_dropdown--name']", 112 | "fullscreenMenu.Object.flipHorizontal": "div[data-testid='dropdown-option-Flip horizontal']>div[class^='multilevel_dropdown--name']", 113 | "fullscreenMenu.Object.flipVertical": "div[data-testid='dropdown-option-Flip vertical']>div[class^='multilevel_dropdown--name']", 114 | "fullscreenMenu.Object.Rotate180": "div[data-testid='dropdown-option-Rotate 180˚']>div[class^='multilevel_dropdown--name']", 115 | "fullscreenMenu.Object.Rotate90Left": "div[data-testid='dropdown-option-Rotate 90˚ left']>div[class^='multilevel_dropdown--name']", 116 | "fullscreenMenu.Object.Rotate90Right": "div[data-testid='dropdown-option-Rotate 90˚ right']>div[class^='multilevel_dropdown--name']", 117 | "fullscreenMenu.Object.FlattenSelection": "div[data-testid='dropdown-option-Flatten selection']>div[class^='multilevel_dropdown--name']", 118 | "fullscreenMenu.Object.OutlineStroke": "div[data-testid='dropdown-option-Outline stroke']>div[class^='multilevel_dropdown--name']", 119 | 120 | "fullscreenMenu.Object.BooleanGroups": "div[data-testid='dropdown-option-Boolean groups']>div[class^='multilevel_dropdown--name']", 121 | "fullscreenMenu.Object.BooleanGroups.UnionSelection": "div[data-testid='dropdown-option-Union selection']>div[class^='multilevel_dropdown--name']", 122 | "fullscreenMenu.Object.BooleanGroups.SubtractSelection": "div[data-testid='dropdown-option-Subtract selection']>div[class^='multilevel_dropdown--name']", 123 | "fullscreenMenu.Object.BooleanGroups.IntersectSelection": "div[data-testid='dropdown-option-Intersect selection']>div[class^='multilevel_dropdown--name']", 124 | "fullscreenMenu.Object.BooleanGroups.ExcludeSelection": "div[data-testid='dropdown-option-Exclude selection']>div[class^='multilevel_dropdown--name']", 125 | 126 | "fullscreenMenu.Object.RasterizeSelection": "div[data-testid='dropdown-option-Rasterize selection']>div[class^='multilevel_dropdown--name']", 127 | "fullscreenMenu.Object.ShowOrHideSelection": "div[data-testid='dropdown-option-Show/Hide selection']>div[class^='multilevel_dropdown--name']", 128 | "fullscreenMenu.Object.LockOrUnlockSelection": "div[data-testid='dropdown-option-Lock/Unlock selection']>div[class^='multilevel_dropdown--name']", 129 | "fullscreenMenu.Object.HideOtherLayers": "div[data-testid='dropdown-option-Hide other layers']>div[class^='multilevel_dropdown--name']", 130 | "fullscreenMenu.Object.CollapseLayers": "div[data-testid='dropdown-option-Collapse layers']>div[class^='multilevel_dropdown--name']", 131 | "fullscreenMenu.Object.RemoveFill": "div[data-testid='dropdown-option-Remove fill']>div[class^='multilevel_dropdown--name']", 132 | "fullscreenMenu.Object.RemoveStroke": "div[data-testid='dropdown-option-Remove stroke']>div[class^='multilevel_dropdown--name']", 133 | "fullscreenMenu.Object.SwapFillAndStroke": "div[data-testid='dropdown-option-Swap fill and stroke']>div[class^='multilevel_dropdown--name']", 134 | 135 | "fullscreenMenu.Vector": "div[data-testid='dropdown-option-Vector']>div[class^='multilevel_dropdown--name']", 136 | "fullscreenMenu.Vector.JoinSelection": "div[data-testid='dropdown-option-Join selection']>div[class^='multilevel_dropdown--name']", 137 | "fullscreenMenu.Vector.SmoothJoinSelection": "div[data-testid='dropdown-option-Smooth join selection']>div[class^='multilevel_dropdown--name']", 138 | "fullscreenMenu.Vector.DeleteAndHealSelection": "div[data-testid='dropdown-option-Delete and heal selection']>div[class^='multilevel_dropdown--name']", 139 | 140 | "fullscreenMenu.Text": "div[data-testid='dropdown-option-Text']>div[class^='multilevel_dropdown--name']", 141 | "fullscreenMenu.Text.Bold": "div[data-testid='dropdown-option-Bold']>div[class^='multilevel_dropdown--name']", 142 | "fullscreenMenu.Text.Italic": "div[data-testid='dropdown-option-Italic']>div[class^='multilevel_dropdown--name']", 143 | "fullscreenMenu.Text.Underline": "div[data-testid='dropdown-option-Underline']>div[class^='multilevel_dropdown--name']", 144 | "fullscreenMenu.Text.Strikethrough": "div[data-testid='dropdown-option-Strikethrough']>div[class^='multilevel_dropdown--name']", 145 | "fullscreenMenu.Text.CreateLink": "div[data-testid='dropdown-option-Create link']>div[class^='multilevel_dropdown--name']", 146 | "fullscreenMenu.Text.BulletedList": "div[data-testid='dropdown-option-Bulleted list']>div[class^='multilevel_dropdown--name']", 147 | "fullscreenMenu.Text.NumberedList": "div[data-testid='dropdown-option-Numbered list']>div[class^='multilevel_dropdown--name']", 148 | 149 | "fullscreenMenu.Text.Alignment": "div[data-testid='dropdown-option-Alignment']>div[class^='multilevel_dropdown--name']", 150 | "fullscreenMenu.Text.Alignment.TextAlignLeft": "div[data-testid='dropdown-option-Text align left']>div[class^='multilevel_dropdown--name']", 151 | "fullscreenMenu.Text.Alignment.TextAlignCenter": "div[data-testid='dropdown-option-Text align center']>div[class^='multilevel_dropdown--name']", 152 | "fullscreenMenu.Text.Alignment.TextAlignRight": "div[data-testid='dropdown-option-Text align right']>div[class^='multilevel_dropdown--name']", 153 | "fullscreenMenu.Text.Alignment.TextAlignJustified": "div[data-testid='dropdown-option-Text align justified']>div[class^='multilevel_dropdown--name']", 154 | "fullscreenMenu.Text.Alignment.TextAlignTop": "div[data-testid='dropdown-option-Text align top']>div[class^='multilevel_dropdown--name']", 155 | "fullscreenMenu.Text.Alignment.TextAlignMiddle": "div[data-testid='dropdown-option-Text align middle']>div[class^='multilevel_dropdown--name']", 156 | "fullscreenMenu.Text.Alignment.TextAlignBottom": "div[data-testid='dropdown-option-Text align bottom']>div[class^='multilevel_dropdown--name']", 157 | 158 | "fullscreenMenu.Text.Adjust": "div[data-testid='dropdown-option-Adjust']>div[class^='multilevel_dropdown--name']", 159 | "fullscreenMenu.Text.Adjust.IncreaseIndentation": "div[data-testid='dropdown-option-Increase indentation']>div[class^='multilevel_dropdown--name']", 160 | "fullscreenMenu.Text.Adjust.DecreaseIndentation": "div[data-testid='dropdown-option-Decrease indentation']>div[class^='multilevel_dropdown--name']", 161 | "fullscreenMenu.Text.Adjust.IncreaseFontSize": "div[data-testid='dropdown-option-Increase font size']>div[class^='multilevel_dropdown--name']", 162 | "fullscreenMenu.Text.Adjust.DecreaseFontSize": "div[data-testid='dropdown-option-Decrease font size']>div[class^='multilevel_dropdown--name']", 163 | "fullscreenMenu.Text.Adjust.IncreaseFontWeight": "div[data-testid='dropdown-option-Increase font weight']>div[class^='multilevel_dropdown--name']", 164 | "fullscreenMenu.Text.Adjust.DecreaseFontWeight": "div[data-testid='dropdown-option-Decrease font weight']>div[class^='multilevel_dropdown--name']", 165 | "fullscreenMenu.Text.Adjust.IncreaseLineHeight": "div[data-testid='dropdown-option-Increase line height']>div[class^='multilevel_dropdown--name']", 166 | "fullscreenMenu.Text.Adjust.DecreaseLineHeight": "div[data-testid='dropdown-option-Decrease line height']>div[class^='multilevel_dropdown--name']", 167 | "fullscreenMenu.Text.Adjust.IncreaseLetterSpacing": "div[data-testid='dropdown-option-Increase letter spacing']>div[class^='multilevel_dropdown--name']", 168 | "fullscreenMenu.Text.Adjust.DecreaseLetterSpacing": "div[data-testid='dropdown-option-Decrease letter spacing']>div[class^='multilevel_dropdown--name']", 169 | 170 | "fullscreenMenu.Text.Case": "div[data-testid='dropdown-option-Case']>div[class^='multilevel_dropdown--name']", 171 | "fullscreenMenu.Text.Case.OriginalCase": "div[data-testid='dropdown-option-Original case']>div[class^='multilevel_dropdown--name']", 172 | "fullscreenMenu.Text.Case.Uppercase": "div[data-testid='dropdown-option-Uppercase']>div[class^='multilevel_dropdown--name']", 173 | "fullscreenMenu.Text.Case.Lowercase": "div[data-testid='dropdown-option-Lowercase']>div[class^='multilevel_dropdown--name']", 174 | 175 | "fullscreenMenu.Text.TextDirection": "div[data-testid='dropdown-option-Text direction']>div[class^='multilevel_dropdown--name']", 176 | "fullscreenMenu.Text.TextDirection.LeftToRight": "div[data-testid='dropdown-option-Left to right']>div[class^='multilevel_dropdown--name']", 177 | "fullscreenMenu.Text.TextDirection.RightToLeft": "div[data-testid='dropdown-option-Right to left']>div[class^='multilevel_dropdown--name']", 178 | 179 | "fullscreenMenu.Arrange": "div[data-testid='dropdown-option-Arrange']>div[class^='multilevel_dropdown--name']", 180 | "fullscreenMenu.Arrange.RoundToPixel": "div[data-testid='dropdown-option-Round to pixel']>div[class^='multilevel_dropdown--name']", 181 | "fullscreenMenu.Arrange.AlignLeft": "div[data-testid='dropdown-option-Align left']>div[class^='multilevel_dropdown--name']", 182 | "fullscreenMenu.Arrange.AlignHorizontalCenters": "div[data-testid='dropdown-option-Align horizontal centers']>div[class^='multilevel_dropdown--name']", 183 | "fullscreenMenu.Arrange.AlignRight": "div[data-testid='dropdown-option-Align right']>div[class^='multilevel_dropdown--name']", 184 | "fullscreenMenu.Arrange.AlignTop": "div[data-testid='dropdown-option-Align top']>div[class^='multilevel_dropdown--name']", 185 | "fullscreenMenu.Arrange.AlignVerticalCenters": "div[data-testid='dropdown-option-Align vertical centers']>div[class^='multilevel_dropdown--name']", 186 | "fullscreenMenu.Arrange.AlignBottom": "div[data-testid='dropdown-option-Align bottom']>div[class^='multilevel_dropdown--name']", 187 | "fullscreenMenu.Arrange.TidyUp": "div[data-testid='dropdown-option-Tidy up']>div[class^='multilevel_dropdown--name']", 188 | "fullscreenMenu.Arrange.PackHorizontal": "div[data-testid='dropdown-option-Pack horizontal']>div[class^='multilevel_dropdown--name']", 189 | "fullscreenMenu.Arrange.PackVertical": "div[data-testid='dropdown-option-Pack vertical']>div[class^='multilevel_dropdown--name']", 190 | "fullscreenMenu.Arrange.DistributeHorizontalSpacing": "div[data-testid='dropdown-option-Distribute horizontal spacing']>div[class^='multilevel_dropdown--name']", 191 | "fullscreenMenu.Arrange.DistributeVerticalSpacing": "div[data-testid='dropdown-option-Distribute vertical spacing']>div[class^='multilevel_dropdown--name']", 192 | "fullscreenMenu.Arrange.DistributeLeft": "div[data-testid='dropdown-option-Distribute left']>div[class^='multilevel_dropdown--name']", 193 | "fullscreenMenu.Arrange.DistributeHorizontalCenters": "div[data-testid='dropdown-option-Distribute horizontal centers']>div[class^='multilevel_dropdown--name']", 194 | "fullscreenMenu.Arrange.DistributeRight": "div[data-testid='dropdown-option-Distribute right']>div[class^='multilevel_dropdown--name']", 195 | "fullscreenMenu.Arrange.DistributeTop": "div[data-testid='dropdown-option-Distribute top']>div[class^='multilevel_dropdown--name']", 196 | "fullscreenMenu.Arrange.DistributeVerticalCenters": "div[data-testid='dropdown-option-Distribute vertical centers']>div[class^='multilevel_dropdown--name']", 197 | "fullscreenMenu.Arrange.DistributeBottom": "div[data-testid='dropdown-option-Distribute bottom']>div[class^='multilevel_dropdown--name']", 198 | 199 | "fullscreenMenu.Plugins": "div[data-testid='dropdown-option-Plugins']>div[class^='multilevel_dropdown--name']", 200 | "fullscreenMenu.Plugins.RunLastPlugin": "div[data-testid='dropdown-option-Run last plugin']>div[class^='multilevel_dropdown--name']", 201 | "fullscreenMenu.Plugins.ManagePlugins": "div[data-testid='dropdown-option-Manage plugins…']>div[class^='multilevel_dropdown--name']", 202 | "fullscreenMenu.Plugins.BrowsePluginsInCommunity": "div[data-testid='dropdown-option-Browse plugins in Community']>div[class^='multilevel_dropdown--name']", 203 | "fullscreenMenu.Plugins.BrowsePlugins": "div[data-testid='dropdown-option-Browse plugins']>div[class^='multilevel_dropdown--name']", 204 | 205 | "fullscreenMenu.Widgets": "div[data-testid='dropdown-option-Widgets']>div[class^='multilevel_dropdown--name']", 206 | "fullscreenMenu.Widgets.BrowseWidgets": "div[data-testid='dropdown-option-Browse widgets']>div[class^='multilevel_dropdown--name']", 207 | "fullscreenMenu.Widgets.SelectAllWidgets": "div[data-testid='dropdown-option-Select all widgets']>div[class^='multilevel_dropdown--name']", 208 | 209 | "fullscreenMenu.Integrations": "div[data-testid='dropdown-option-Integrations']>div[class^='multilevel_dropdown--name']", 210 | "fullscreenMenu.Integrations.Dribbble": "div[data-testid='dropdown-option-Dribbble']>div[class^='multilevel_dropdown--name']", 211 | 212 | "fullscreenMenu.Preferences": "div[data-testid='dropdown-option-Preferences']>div[class^='multilevel_dropdown--name']", 213 | "fullscreenMenu.Preferences.SnapToGeometry": "div[data-testid='dropdown-option-Snap to geometry']>div[class^='multilevel_dropdown--name']", 214 | "fullscreenMenu.Preferences.SnapToObjects": "div[data-testid='dropdown-option-Snap to objects']>div[class^='multilevel_dropdown--name']", 215 | "fullscreenMenu.Preferences.SnapToDotGrid": "div[data-testid='dropdown-option-Snap to dot grid']>div[class^='multilevel_dropdown--name']", 216 | "fullscreenMenu.Preferences.SnapToPixelGrid": "div[data-testid='dropdown-option-Snap to pixel grid']>div[class^='multilevel_dropdown--name']", 217 | "fullscreenMenu.Preferences.KeepToolSelectedAfterUse": "div[data-testid='dropdown-option-Keep tool selected after use']>div[class^='multilevel_dropdown--name']", 218 | "fullscreenMenu.Preferences.HighlightLayersOnHover": "div[data-testid='dropdown-option-Highlight layers on hover']>div[class^='multilevel_dropdown--name']", 219 | "fullscreenMenu.Preferences.RenameDuplicatedLayers": "div[data-testid='dropdown-option-Rename duplicated layers']>div[class^='multilevel_dropdown--name']", 220 | "fullscreenMenu.Preferences.ShowDimensionsOnObjects": "div[data-testid='dropdown-option-Show dimensions on objects']>div[class^='multilevel_dropdown--name']", 221 | "fullscreenMenu.Preferences.HideCanvasUIDuringChanges": "div[data-testid='dropdown-option-Hide canvas UI during changes']>div[class^='multilevel_dropdown--name']", 222 | "fullscreenMenu.Preferences.KeyboardZoomsIntoSelection": "div[data-testid='dropdown-option-Keyboard zooms into selection']>div[class^='multilevel_dropdown--name']", 223 | "fullscreenMenu.Preferences.SubstituteSmartQuotes": "div[data-testid='dropdown-option-Substitute smart quotes']>div[class^='multilevel_dropdown--name']", 224 | "fullscreenMenu.Preferences.ShowGoogleFonts": "div[data-testid='dropdown-option-Show Google Fonts']>div[class^='multilevel_dropdown--name']", 225 | "fullscreenMenu.Preferences.FlipObjectsWhileResizing": "div[data-testid='dropdown-option-Flip objects while resizing']>div[class^='multilevel_dropdown--name']", 226 | "fullscreenMenu.Preferences.InvertZoomDirection": "div[data-testid='dropdown-option-Invert zoom direction']>div[class^='multilevel_dropdown--name']", 227 | "fullscreenMenu.Preferences.UseNumberKeysForOpacity": "div[data-testid='dropdown-option-Use number keys for opacity']>div[class^='multilevel_dropdown--name']", 228 | "fullscreenMenu.Preferences.ShakeCursorForHighFive": "div[data-testid='dropdown-option-Shake cursor for high five']>div[class^='multilevel_dropdown--name']", 229 | "fullscreenMenu.Preferences.OpenLinksInDesktopApp": "div[data-testid='dropdown-option-Open links in desktop app']>div[class^='multilevel_dropdown--name']", 230 | 231 | "fullscreenMenu.Preferences.Theme": "div[data-testid='dropdown-option-Theme']>div[class^='multilevel_dropdown--name']", 232 | "fullscreenMenu.Preferences.Theme.Light": "div[data-testid='dropdown-option-Light']>div[class^='multilevel_dropdown--name']", 233 | "fullscreenMenu.Preferences.Theme.Dark": "div[data-testid='dropdown-option-Dark']>div[class^='multilevel_dropdown--name']", 234 | "fullscreenMenu.Preferences.SystemTheme": "div[data-testid='dropdown-option-System theme']>div[class^='multilevel_dropdown--name']", 235 | 236 | "fullscreenMenu.Preferences.NudgeAmount": "div[data-testid='dropdown-option-Nudge amount…']>div[class^='multilevel_dropdown--name']", 237 | "fullscreenMenu.Preferences.ShowTemplatesForNewFiles": "div[data-testid='dropdown-option-Show templates for new files']>div[class^='multilevel_dropdown--name']", 238 | 239 | "fullscreenMenu.Libraries": "div[data-testid='dropdown-option-Libraries']>div[class^='multilevel_dropdown--name']", 240 | 241 | "fullscreenMenu.GetDesktopApp": "div[data-testid='dropdown-option-Get desktop app']>div[class^='multilevel_dropdown--name']", 242 | "fullscreenMenu.OpenInDesktopApp": "div[data-testid='dropdown-option-Open in desktop app']>div[class^='multilevel_dropdown--name']", 243 | 244 | "fullscreenMenu.HelpAndAccount": "div[data-testid='dropdown-option-Help and account']>div[class^='multilevel_dropdown--name']", 245 | "fullscreenMenu.HelpAndAccount.HelpPage": "div[data-testid='dropdown-option-Help page']>div[class^='multilevel_dropdown--name']", 246 | "fullscreenMenu.HelpAndAccount.KeyboardShortcuts": "div[data-testid='dropdown-option-Keyboard shortcuts']>div[class^='multilevel_dropdown--name']", 247 | "fullscreenMenu.HelpAndAccount.SupportForum": "div[data-testid='dropdown-option-Support forum']>div[class^='multilevel_dropdown--name']", 248 | "fullscreenMenu.HelpAndAccount.VideoTutorials": "div[data-testid='dropdown-option-Video tutorials']>div[class^='multilevel_dropdown--name']", 249 | "fullscreenMenu.HelpAndAccount.ReleaseNotes": "div[data-testid='dropdown-option-Release notes']>div[class^='multilevel_dropdown--name']", 250 | "fullscreenMenu.HelpAndAccount.OpenFontSettings": "div[data-testid='dropdown-option-Open font settings']>div[class^='multilevel_dropdown--name']", 251 | "fullscreenMenu.HelpAndAccount.LegalSummary": "div[data-testid='dropdown-option-Legal summary']>div[class^='multilevel_dropdown--name']", 252 | "fullscreenMenu.HelpAndAccount.AccountSettings": "div[data-testid='dropdown-option-Account settings']>div[class^='multilevel_dropdown--name']", 253 | "fullscreenMenu.HelpAndAccount.LogOut": "div[data-testid='dropdown-option-Log out']>div[class^='multilevel_dropdown--name']", 254 | 255 | "fullscreenMenu.PublishStylesAndComponents": "div[data-testid='dropdown-option-Publish styles and components']>div[class^='multilevel_dropdown--name']", 256 | "fullscreenMenu.Rename": "div[data-testid='dropdown-option-Rename']>div[class^='multilevel_dropdown--name']", 257 | "fullscreenMenu.MoveToProject": "div[data-testid='dropdown-option-Move to project…']>div[class^='multilevel_dropdown--name']", 258 | "fullscreenMenu.Delete": "div[data-testid='dropdown-option-Delete…']>div[class^='multilevel_dropdown--name']", 259 | "fullscreenMenu.ZoomTo50": "div[data-testid='dropdown-option-Zoom to 50%']>div[class^='multilevel_dropdown--name']", 260 | "fullscreenMenu.ZoomTo200": "div[data-testid='dropdown-option-Zoom to 200%']>div[class^='multilevel_dropdown--name']", 261 | "fullscreenMenu.Disabled": "div[data-testid='dropdown-option-Disabled']>div[class^='multilevel_dropdown--name']", 262 | 263 | "fullscreenMenu.Tooltip.MainMenu": "div[class*='toolbar_view--toolbar']>div[data-tooltip='main-menu']->attr:data-tooltip,data-tooltip-type=text", 264 | "fullscreenMenu.Tooltip.MoveTools": "div[class*='toolbar_view--toolbar'] div[data-tooltip='Move tools']->attr:data-tooltip,data-tooltip-type=text", 265 | "fullscreenMenu.Tooltip.SetToolDefault": "div[class*='toolbar_view--toolbar'] div[data-tooltip='set-tool-default']->attr:data-tooltip,data-tooltip-type=text", 266 | "fullscreenMenu.Tooltip.SetToolScale": "div[class*='toolbar_view--toolbar'] div[data-tooltip='set-tool-scale']->attr:data-tooltip,data-tooltip-type=text", 267 | "fullscreenMenu.Tooltip.RegionTools": "div[class*='toolbar_view--toolbar'] div[data-tooltip='Region tools']->attr:data-tooltip,data-tooltip-type=text", 268 | "fullscreenMenu.Tooltip.SetToolFrame": "div[class*='toolbar_view--toolbar'] div[data-tooltip='set-tool-frame']->attr:data-tooltip,data-tooltip-type=text", 269 | "fullscreenMenu.Tooltip.SetToolSlice": "div[class*='toolbar_view--toolbar'] div[data-tooltip='set-tool-slice']->attr:data-tooltip,data-tooltip-type=text", 270 | "fullscreenMenu.Tooltip.ShapeTools": "div[class*='toolbar_view--toolbar'] div[data-tooltip='Shape tools']->attr:data-tooltip,data-tooltip-type=text", 271 | "fullscreenMenu.Tooltip.SetToolRectangle": "div[class*='toolbar_view--toolbar'] div[data-tooltip='set-tool-rectangle']->attr:data-tooltip,data-tooltip-type=text", 272 | "fullscreenMenu.Tooltip.SetToolLine": "div[class*='toolbar_view--toolbar'] div[data-tooltip='set-tool-line']->attr:data-tooltip,data-tooltip-type=text", 273 | "fullscreenMenu.Tooltip.SetToolArrow": "div[class*='toolbar_view--toolbar'] div[data-tooltip='set-tool-arrow']->attr:data-tooltip,data-tooltip-type=text", 274 | "fullscreenMenu.Tooltip.SetToolEllipse": "div[class*='toolbar_view--toolbar'] div[data-tooltip='set-tool-ellipse']->attr:data-tooltip,data-tooltip-type=text", 275 | "fullscreenMenu.Tooltip.SetToolRegularPolygon": "div[class*='toolbar_view--toolbar'] div[data-tooltip='set-tool-regular-polygon']->attr:data-tooltip,data-tooltip-type=text", 276 | "fullscreenMenu.Tooltip.SetToolStar": "div[class*='toolbar_view--toolbar'] div[data-tooltip='set-tool-star']->attr:data-tooltip,data-tooltip-type=text", 277 | "fullscreenMenu.Tooltip.DrawingTools": "div[class*='toolbar_view--toolbar'] div[data-tooltip='Drawing tools']->attr:data-tooltip,data-tooltip-type=text", 278 | "fullscreenMenu.Tooltip.SetToolPen": "div[class*='toolbar_view--toolbar'] div[data-tooltip='set-tool-pen']->attr:data-tooltip,data-tooltip-type=text", 279 | "fullscreenMenu.Tooltip.SetToolPencil": "div[class*='toolbar_view--toolbar'] div[data-tooltip='set-tool-pencil']->attr:data-tooltip,data-tooltip-type=text", 280 | "fullscreenMenu.Tooltip.SetToolText": "div[class*='toolbar_view--toolbar'] span[data-tooltip='set-tool-type']->attr:data-tooltip,data-tooltip-type=text", 281 | "fullscreenMenu.Tooltip.SetToolHand": "div[class*='toolbar_view--toolbar'] span[data-tooltip='set-tool-hand']->attr:data-tooltip,data-tooltip-type=text", 282 | "fullscreenMenu.Tooltip.SetToolComments": "div[class*='toolbar_view--toolbar'] span[data-tooltip='set-tool-comments']->attr:data-tooltip,data-tooltip-type=text", 283 | "fullscreenMenu.Tooltip.Present": "div[class*='toolbar_view--toolbar'] div[data-tooltip='Present']->attr:data-tooltip", 284 | "fullscreenMenu.Tooltip.CreateComponent": "div[class*='toolbar_view--toolbar'] span[data-tooltip='create-symbol']->attr:data-tooltip,data-tooltip-type=text", 285 | "fullscreenMenu.Tooltip.UseAsMask": "div[class*='toolbar_view--toolbar'] span[data-tooltip='mask-selection']->attr:data-tooltip,data-tooltip-type=text", 286 | "fullscreenMenu.Tooltip.BooleanGroups": "div[class*='toolbar_view--toolbar'] div[data-tooltip='Boolean groups']->attr:data-tooltip", 287 | "fullscreenMenu.Tooltip.UnionSelection": "div[class*='toolbar_view--toolbar'] div[data-tooltip='live-boolean-union']->attr:data-tooltip,data-tooltip-type=text", 288 | "fullscreenMenu.Tooltip.SubtractSelection": "div[class*='toolbar_view--toolbar'] div[data-tooltip='live-boolean-subtract']->attr:data-tooltip,data-tooltip-type=text", 289 | "fullscreenMenu.Tooltip.IntersectSelection": "div[class*='toolbar_view--toolbar'] div[data-tooltip='live-boolean-intersect']->attr:data-tooltip,data-tooltip-type=text", 290 | "fullscreenMenu.Tooltip.ExcludeSelection": "div[class*='toolbar_view--toolbar'] div[data-tooltip='live-boolean-xor']->attr:data-tooltip,data-tooltip-type=text", 291 | 292 | "toolbarView.fileName.folderName.Drafts": "XPATH://div[contains(@class, 'filename_view--folder')]//div[text()='Drafts']", 293 | 294 | "toolbarView.moveFlyout.flyout.toolDefault": "a[data-testid='toolbarView.moveFlyout.flyout.toolDefault']>div[class^='action_option--text']", 295 | "toolbarView.moveFlyout.flyout.toolScale": "a[data-testid='toolbarView.moveFlyout.flyout.toolScale']>div[class^='action_option--text']", 296 | 297 | "toolbarView.regionFlyout.flyout.toolFrame": "a[data-testid='toolbarView.regionFlyout.flyout.toolFrame']>div[class^='action_option--text']", 298 | "toolbarView.regionFlyout.flyout.toolSlice": "a[data-testid='toolbarView.regionFlyout.flyout.toolSlice']>div[class^='action_option--text']", 299 | 300 | "toolbarView.shapeFlyout.flyout.toolShapeRectangle": "a[data-testid='toolbarView.shapeFlyout.flyout.toolShapeRectangle']>div[class^='action_option--text']", 301 | "toolbarView.shapeFlyout.flyout.toolShapeLine": "a[data-testid='toolbarView.shapeFlyout.flyout.toolShapeLine']>div[class^='action_option--text']", 302 | "toolbarView.shapeFlyout.flyout.toolShapeArrow": "a[data-testid='toolbarView.shapeFlyout.flyout.toolShapeArrow']>div[class^='action_option--text']", 303 | "toolbarView.shapeFlyout.flyout.toolShapeEllipse": "a[data-testid='toolbarView.shapeFlyout.flyout.toolShapeEllipse']>div[class^='action_option--text']", 304 | "toolbarView.shapeFlyout.flyout.toolShapePolygon": "a[data-testid='toolbarView.shapeFlyout.flyout.toolShapePolygon']>div[class^='action_option--text']", 305 | "toolbarView.shapeFlyout.flyout.toolShapeStar": "a[data-testid='toolbarView.shapeFlyout.flyout.toolShapeStar']>div[class^='action_option--text']", 306 | "toolbarView.shapeFlyout.flyout.toolPlaceImage": "a[data-testid='toolbarView.shapeFlyout.flyout.toolPlaceImage']>div[class^='action_option--text']", 307 | 308 | "toolbarView.penFlyout.flyout.toolPen": "a[data-testid='toolbarView.penFlyout.flyout.toolPen']>div[class^='action_option--text']", 309 | "toolbarView.penFlyout.flyout.toolPencil": "a[data-testid='toolbarView.penFlyout.flyout.toolPencil']>div[class^='action_option--text']", 310 | 311 | "toolbarView.booleanFlyout.flyout.toolBooleanUnion": "a[data-testid='toolbarView.booleanFlyout.flyout.toolBooleanUnion']>div[class^='action_option--text']", 312 | "toolbarView.booleanFlyout.flyout.toolBooleanSubtract": "a[data-testid='toolbarView.booleanFlyout.flyout.toolBooleanSubtract']>div[class^='action_option--text']", 313 | "toolbarView.booleanFlyout.flyout.toolBooleanIntersect": "a[data-testid='toolbarView.booleanFlyout.flyout.toolBooleanIntersect']>div[class^='action_option--text']", 314 | "toolbarView.booleanFlyout.flyout.toolBooleatoolBooleanXornUnion": "a[data-testid='toolbarView.booleanFlyout.flyout.toolBooleanXor']>div[class^='action_option--text']", 315 | "toolbarView.booleanFlyout.flyout.toolFlatten": "a[data-testid='toolbarView.booleanFlyout.flyout.toolFlatten']>div[class^='action_option--text']", 316 | 317 | "toolbarView.Share": "div[data-testid='multiplayer-toolbar-share-button']", 318 | 319 | "toolbarView.CursorChat": "div[data-testid='dropdown-option-Cursor chat']>div[class^='multilevel_dropdown--name']", 320 | "toolbarView.Stamp": "div[data-testid='dropdown-option-Stamp']>div[class^='multilevel_dropdown--name']", 321 | "toolbarView.Emote": "div[data-testid='dropdown-option-Emote']>div[class^='multilevel_dropdown--name']", 322 | 323 | "toolbarView.Overflow.Emote": "XPATH://a[@data-testid='overflow.emote']//div[contains(@class,'toolbar_view--overflowInner')]//text()[1]", 324 | "toolbarView.Overflow.Stamp": "XPATH://a[@data-testid='overflow.stamp']//div[contains(@class,'toolbar_view--overflowInner')]//text()[1]", 325 | "toolbarView.Overflow.CursorChat": "XPATH://a[@data-testid='overflow.chat']//div[contains(@class,'toolbar_view--overflowInner')]//text()[1]", 326 | "toolbarView.Overflow.HighFive": "XPATH://a[@data-testid='overflow.highFive']//div[contains(@class,'toolbar_view--overflowInner')]//text()[1]", 327 | "toolbarView.Overflow.Timer": "XPATH://a[@data-testid='overflow.timer']//div[contains(@class,'toolbar_view--overflowInner')]//text()[1]", 328 | 329 | "toolbarView.Tooltip.Collaborate": "div[class*='toolbar_view--toolbar'] div[data-tooltip='whiteboard-overflow-menu']->attr:data-tooltip,data-tooltip-type=text", 330 | "toolbarView.Tooltip.ZoomOut": "div[class*='toolbar_view--toolbar'] span[data-tooltip='zoom-out']->attr:data-tooltip,data-tooltip-type=text", 331 | "toolbarView.Tooltip.ZoomIn": "div[class*='toolbar_view--toolbar'] span[data-tooltip='zoom-in']->attr:data-tooltip,data-tooltip-type=text", 332 | "toolbarView.Tooltip.ZoomOrViewOptions": "div[class*='toolbar_view--toolbar'] div[data-tooltip='Zoom/view options']->attr:data-tooltip", 333 | 334 | 335 | "delightfulToolbar.MoveTool": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='set-tool-default-desc']->attr:data-tooltip,data-tooltip-type=text", 336 | "delightfulToolbar.HandTool": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='set-tool-hand']->attr:data-tooltip,data-tooltip-type=text", 337 | "delightfulToolbar.Marker": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='set-tool-marker']->attr:data-tooltip,data-tooltip-type=text", 338 | "delightfulToolbar.Highlighter": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='set-tool-highlighter']->attr:data-tooltip,data-tooltip-type=text", 339 | "delightfulToolbar.Eraser": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='set-tool-eraser']->attr:data-tooltip,data-tooltip-type=text", 340 | "delightfulToolbar.Thin": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='Thin']->attr:data-tooltip", 341 | "delightfulToolbar.Thick": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='Thick']->attr:data-tooltip", 342 | "delightfulToolbar.Charcoal": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='Charcoal']->attr:data-tooltip", 343 | "delightfulToolbar.Red": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='Red']->attr:data-tooltip", 344 | "delightfulToolbar.Yellow": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='Yellow']->attr:data-tooltip", 345 | "delightfulToolbar.Green": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='Green']->attr:data-tooltip", 346 | "delightfulToolbar.Blue": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='Blue']->attr:data-tooltip", 347 | "delightfulToolbar.Violet": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='Violet']->attr:data-tooltip", 348 | "delightfulToolbar.Brown": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='Brown']->attr:data-tooltip", 349 | "delightfulToolbar.White": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='White']->attr:data-tooltip", 350 | "delightfulToolbar.Square": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='set-tool-shape-whiteboard-square']->attr:data-tooltip,data-tooltip-type=text,no-track", 351 | "delightfulToolbar.Ellipse": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='set-tool-shape-whiteboard-ellipse']->attr:data-tooltip,data-tooltip-type=text,no-track", 352 | "delightfulToolbar.RoundedRectangle": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='set-tool-shape-whiteboard-rounded-rectangle']->attr:data-tooltip,data-tooltip-type=text,no-track", 353 | "delightfulToolbar.Diamond": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='set-tool-shape-whiteboard-diamond']->attr:data-tooltip,data-tooltip-type=text,no-track", 354 | "delightfulToolbar.TriangleUp": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='set-tool-shape-whiteboard-triangle-up']->attr:data-tooltip,data-tooltip-type=text,no-track", 355 | "delightfulToolbar.TriangleDown": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='set-tool-shape-whiteboard-triangle-down']->attr:data-tooltip,data-tooltip-type=text,no-track", 356 | "delightfulToolbar.ParallelogramRight": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='set-tool-shape-whiteboard-parallelogram-right']->attr:data-tooltip,data-tooltip-type=text,no-track", 357 | "delightfulToolbar.ParallelogramLeft": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='set-tool-shape-whiteboard-parallelogram-left']->attr:data-tooltip,data-tooltip-type=text,no-track", 358 | "delightfulToolbar.Cylinder": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='set-tool-shape-whiteboard-eng-database']->attr:data-tooltip,data-tooltip-type=text,no-track", 359 | "delightfulToolbar.HorizontalCylinder": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='set-tool-shape-whiteboard-eng-queue']->attr:data-tooltip,data-tooltip-type=text,no-track", 360 | "delightfulToolbar.File": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='set-tool-shape-whiteboard-eng-file']->attr:data-tooltip,data-tooltip-type=text,no-track", 361 | "delightfulToolbar.Folder": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='set-tool-shape-whiteboard-eng-folder']->attr:data-tooltip,data-tooltip-type=text,no-track", 362 | "delightfulToolbar.Options.Square": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='Square']->attr:data-tooltip", 363 | "delightfulToolbar.Options.Ellipse": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='Ellipse']->attr:data-tooltip", 364 | "delightfulToolbar.Options.RoundedRectangle": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='Rounded rectangle']->attr:data-tooltip", 365 | "delightfulToolbar.Options.Diamond": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='Diamond']->attr:data-tooltip", 366 | "delightfulToolbar.Options.Triangle": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='Triangle']->attr:data-tooltip", 367 | "delightfulToolbar.Options.DownwardPointingTriangle": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='Downward-pointing triangle']->attr:data-tooltip", 368 | "delightfulToolbar.Options.RightLeaningParallelogram": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='Right-leaning parallelogram']->attr:data-tooltip", 369 | "delightfulToolbar.Options.LeftLeaningParallelogram": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='Left-leaning parallelogram']->attr:data-tooltip", 370 | "delightfulToolbar.Options.Cylinder": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='Cylinder']->attr:data-tooltip", 371 | "delightfulToolbar.Options.HorizontalCylinder": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='Horizontal cylinder']->attr:data-tooltip", 372 | "delightfulToolbar.Options.File": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='File']->attr:data-tooltip", 373 | "delightfulToolbar.Options.Folder": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='Folder']->attr:data-tooltip", 374 | "delightfulToolbar.Sticky": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='set-tool-sticky']->attr:data-tooltip,data-tooltip-type=text", 375 | "delightfulToolbar.Text": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='set-tool-type']->attr:data-tooltip,data-tooltip-type=text", 376 | "delightfulToolbar.Connector": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='set-tool-connector-elbowed']->attr:data-tooltip,data-tooltip-type=text,no-track", 377 | "delightfulToolbar.Line": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='set-tool-connector-straight']->attr:data-tooltip,data-tooltip-type=text,no-track", 378 | "delightfulToolbar.Options.Connector": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='Connector']->attr:data-tooltip", 379 | "delightfulToolbar.Options.StraightLine": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='Straight line']->attr:data-tooltip", 380 | "delightfulToolbar.Stamp": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='set-tool-stamp']->attr:data-tooltip,data-tooltip-type=text", 381 | "delightfulToolbar.More": "div[class*='delightful_toolbar--delightfulToolbarContainer'] div[data-tooltip='browse-all-resources-dlt']->attr:data-tooltip,data-tooltip-type=text", 382 | 383 | "contextMenu.Copy": "div[data-testid='dropdown-option-Copy']>div[class^='multilevel_dropdown--name']", 384 | "contextMenu.Paste": "div[data-testid='dropdown-option-Paste']>div[class^='multilevel_dropdown--name']", 385 | "contextMenu.PasteHere": "div[data-testid='dropdown-option-Paste here']>div[class^='multilevel_dropdown--name']", 386 | 387 | "contextMenu.CopyOrPasteAs": "div[data-testid='dropdown-option-Copy/Paste as']>div[class^='multilevel_dropdown--name']", 388 | "contextMenu.CopyOrPasteAs.CopyLink": "div[data-testid='dropdown-option-Copy link']>div[class^='multilevel_dropdown--name']", 389 | 390 | "contextMenu.SelectLayer": "div[data-testid='dropdown-option-Select layer']>div[class^='multilevel_dropdown--name']", 391 | "contextMenu.MoveToPage": "div[data-testid='dropdown-option-Move to page']>div[class^='multilevel_dropdown--name']", 392 | 393 | "contextMenu.Ungroup": "div[data-testid='dropdown-option-Ungroup']>div[class^='multilevel_dropdown--name']", 394 | "contextMenu.Flatten": "div[data-testid='dropdown-option-Flatten']>div[class^='multilevel_dropdown--name']", 395 | 396 | "contextMenu.ShowOrHide": "div[data-testid='dropdown-option-Show/Hide']>div[class^='multilevel_dropdown--name']", 397 | "contextMenu.LockOrUnlock": "div[data-testid='dropdown-option-Lock/Unlock']>div[class^='multilevel_dropdown--name']", 398 | 399 | "contextMenu.ShowOrHideComments": "div[data-testid='dropdown-option-Show/Hide comments']>div[class^='multilevel_dropdown--name']", 400 | 401 | "pagesPanel.Sidebar.Tab": "div[class*='pages_panel--tabsHeader']>div[class*='pages_panel--tab']->attr:data-label", 402 | "pagesPanel.Sidebar.AssetsTab": "div[class*='pages_panel--tabsHeader']>div[class*='pages_panel--assetsTab']>div[class*='pages_panel--tab']->attr:data-label", 403 | 404 | "pagesPanel.Sidebar.Pages": "div[class*='pages_panel--pagesHeaderContainer']>div[class*='pages_panel--pagesHeaderText']", 405 | "pagesPanel.Sidebar.Pages.CopyLinkToPage": "div[data-testid='dropdown-option-Copy link to page']>div[class^='multilevel_dropdown--name']", 406 | "pagesPanel.Sidebar.Pages.DeletePage": "div[data-testid='dropdown-option-Delete page']>div[class^='multilevel_dropdown--name']", 407 | "pagesPanel.Sidebar.Pages.RenamePage": "div[data-testid='dropdown-option-Rename page']>div[class^='multilevel_dropdown--name']", 408 | "pagesPanel.Sidebar.Pages.DuplicatePage": "div[data-testid='dropdown-option-Duplicate page']>div[class^='multilevel_dropdown--name']", 409 | 410 | "pagesPanel.Sidebar.AddNewPage": "div[class*='pages_panel--pagesHeaderContainer'] span[aria-label='Add new page']->attr:data-tooltip", 411 | "pagesPanel.Sidebar.Search": "div[class*='component_sidebar--headerContainer'] input[class*='search--searchInput__DEPRECATED']->attr:placeholder", 412 | "pagesPanel.Sidebar.ShowAsList": "div[class*='component_sidebar--headerContainer'] span[aria-label='Show as list']->attr:data-tooltip", 413 | "pagesPanel.Sidebar.ShowAsGrid": "div[class*='component_sidebar--headerContainer'] span[aria-label='Show as grid']->attr:data-tooltip", 414 | "pagesPanel.Sidebar.TeamLibrary": "div[class*='component_sidebar--headerContainer'] span[aria-label='Team library']->attr:data-tooltip", 415 | 416 | "pagesPanel.Sidebar.Components": "XPATH://div[contains(@class, 'component_sidebar--container')]//div[text()='Components']", 417 | "pagesPanel.Sidebar.Components.FirstInfoText": "XPATH://div[contains(@class, 'component_sidebar--container')]//div[contains(@class, 'empty_states--emptyStateContent')][1]//div[contains(@class, 'empty_states--emptyStateText')]//text()[1]", 418 | "pagesPanel.Sidebar.Components.FirstInfoLink": "XPATH://div[contains(@class, 'component_sidebar--container')]//div[contains(@class, 'empty_states--emptyStateContent')][1]//div[contains(@class, 'empty_states--emptyStateText')]//a", 419 | "pagesPanel.Sidebar.Components.SecondInfoText": "XPATH://div[contains(@class, 'component_sidebar--container')]//div[contains(@class, 'empty_states--emptyStateContent')][2]//div[contains(@class, 'empty_states--emptyStateText')]//text()[1]", 420 | "pagesPanel.Sidebar.Components.SecondInfoLink": "XPATH://div[contains(@class, 'component_sidebar--container')]//div[contains(@class, 'empty_states--emptyStateContent')][2]//div[contains(@class, 'empty_states--emptyStateText')]//a", 421 | 422 | "propertiesPanel.TabsHeader.Design": "XPATH://div[contains(@class, 'properties_panel--tabsHeader')]//div[text()='Design']->attr:data-label", 423 | "propertiesPanel.TabsHeader.Prototype": "XPATH://div[contains(@class, 'properties_panel--tabsHeader')]//div[text()='Prototype']->attr:data-label", 424 | "propertiesPanel.TabsHeader.Inspect": "XPATH://div[contains(@class, 'properties_panel--tabsHeader')]//div[text()='Inspect']->attr:data-label", 425 | 426 | "navbar.Community": "XPATH://div[@data-testid='dropdown-option-Community']//div[text()='Community']", 427 | "navbar.Search": "XPATH://div[contains(@class, 'navbar--navbarContainer')]//input[contains(@class, 'search--searchInput')]->attr:placeholder", 428 | "navbar.Notifications": "XPATH://div[contains(@class, 'user_notifications_dropdown--header')]//div[text()='Notifications']", 429 | "navbar.InternalProfile": "div[data-testid='dropdown-option-Internal profile']>div[class^='multilevel_dropdown--name']", 430 | "navbar.Settings": "div[data-testid='dropdown-option-Settings']>div[class^='multilevel_dropdown--name']", 431 | "navbar.AddAccount": "div[data-testid='dropdown-option-Add account']>div[class^='multilevel_dropdown--name']", 432 | 433 | "sidebar.Recents": "XPATH://div[contains(@class, 'sidebar--navContent')]//span[text()='Recents']", 434 | "sidebar.Drafts": "XPATH://div[contains(@class, 'sidebar--navContent')]//span[text()='Drafts']", 435 | "sidebar.ExploreCommunity": "XPATH://div[contains(@class, 'sidebar--navContent')]//a[contains(@class, 'community_hub_link')]//span[text()='Explore community']", 436 | "sidebar.TeamProject": "XPATH://div[contains(@class, 'sidebar--navContent')]//div[contains(@class, 'nav_section--orderedFolders')]//span[text()='Team project']", 437 | "sidebar.CreateNewTeam": "XPATH://div[contains(@class, 'sidebar--navContent')]//div[contains(@class, 'new_team_link--createNewTeamLink')]//div[text()='Create new team']", 438 | 439 | "fileBrowserView.RecentlyViewed": "XPATH://div[contains(@class, 'file_browser_view--fileBrowserPageViewContainer')]//div[contains(@class, 'desktop_tool_bar--pageViewToolBarContainer')]//span[text()='Recently viewed']", 440 | "fileBrowserView.Drafts": "XPATH://div[contains(@class, 'file_browser_view--fileBrowserPageViewContainer')]//div[contains(@class, 'desktop_tool_bar--pageViewToolBarContainer')]//span[text()='Drafts']", 441 | "fileBrowserView.Deleted": "XPATH://div[contains(@class, 'file_browser_view--fileBrowserPageViewContainer')]//div[contains(@class, 'desktop_tool_bar--pageViewToolBarContainer')]//span[text()='Deleted']", 442 | "fileBrowserView.NewDesignFile": "XPATH://div[contains(@class, 'file_browser_view--fileBrowserPageViewContainer')]//div[contains(@class, 'new_file_creation_topbar--newFileTilesContainer')]//div[@data-testid='new-design-file-button']//text()[1]", 443 | "fileBrowserView.NewDesignFile.Desc": "XPATH://div[contains(@class, 'file_browser_view--fileBrowserPageViewContainer')]//div[contains(@class, 'new_file_creation_topbar--newFileTilesContainer')]//div[@data-testid='new-design-file-button']//div", 444 | "fileBrowserView.NewFigJamFile": "XPATH://div[contains(@class, 'file_browser_view--fileBrowserPageViewContainer')]//div[contains(@class, 'new_file_creation_topbar--newFileTilesContainer')]//div[@data-testid='new-whiteboard-file-button']//text()[1]", 445 | "fileBrowserView.NewFigJamFile.Desc": "XPATH://div[contains(@class, 'file_browser_view--fileBrowserPageViewContainer')]//div[contains(@class, 'new_file_creation_topbar--newFileTilesContainer')]//div[@data-testid='new-whiteboard-file-button']//div", 446 | "fileBrowserView.ImportFile": "XPATH://div[contains(@class, 'file_browser_view--fileBrowserPageViewContainer')]//div[contains(@class, 'new_file_creation_topbar--importFileTile')]//div[contains(@class, 'new_file_creation_topbar--tileText')]//text()[1]", 447 | "fileBrowserView.ImportFile.Desc": "XPATH://div[contains(@class, 'file_browser_view--fileBrowserPageViewContainer')]//div[contains(@class, 'new_file_creation_topbar--importFileTile')]//div[contains(@class, 'new_file_creation_topbar--tileText')]//div", 448 | 449 | "fileBrowserView.Filter": "XPATH://div[contains(@class, 'file_browser_view--fileBrowserPageViewContainer')]//div[contains(@class, 'tile_sort_filter--dropdownCollectionContainer')]//div[text()='Filter:']", 450 | // "fileBrowserView.AllFiles": "XPATH://div[contains(@class, 'file_browser_view--fileBrowserPageViewContainer')]//div[contains(@class, 'tile_sort_filter--dropdownCollectionContainer')]//span[text()='All files']->attr:text-content,no-track", 451 | "fileBrowserView.Filter.Select.AllFiles": "XPATH://div[contains(@class, 'scroll_container--innerScrollContainer')]//a//text()[string()='All files']", 452 | "fileBrowserView.Filter.Select.DesignFiles": "XPATH://div[contains(@class, 'scroll_container--innerScrollContainer')]//a//text()[string()='Design files']", 453 | "fileBrowserView.Filter.Select.FigJamFiles": "XPATH://div[contains(@class, 'scroll_container--innerScrollContainer')]//a//text()[string()='FigJam Files']", 454 | "fileBrowserView.Filter.Select.Prototypes": "XPATH://div[contains(@class, 'scroll_container--innerScrollContainer')]//a//text()[string()='Prototypes']", 455 | 456 | "fileBrowserView.Sort": "XPATH://div[contains(@class, 'file_browser_view--fileBrowserPageViewContainer')]//div[text()='Sort:']", 457 | "fileBrowserView.Sort.Select.SortBy": "XPATH://div[contains(@class, 'scroll_container--innerScrollContainer')]//a//text()[string()='Sort by']", 458 | "fileBrowserView.Sort.Select.Alphabetical": "XPATH://div[contains(@class, 'scroll_container--innerScrollContainer')]//a//text()[string()='Alphabetical']", 459 | "fileBrowserView.Sort.Select.DateCreated": "XPATH://div[contains(@class, 'scroll_container--innerScrollContainer')]//a//text()[string()='Date created']", 460 | "fileBrowserView.Sort.Select.LastViewed": "XPATH://div[contains(@class, 'scroll_container--innerScrollContainer')]//a//text()[string()='Last viewed']", 461 | "fileBrowserView.Sort.Select.LastModified": "XPATH://div[contains(@class, 'scroll_container--innerScrollContainer')]//a//text()[string()='Last modified']", 462 | "fileBrowserView.Sort.Select.Order": "XPATH://div[contains(@class, 'scroll_container--innerScrollContainer')]//a//text()[string()='Order']", 463 | "fileBrowserView.Sort.Select.OldestFirst": "XPATH://div[contains(@class, 'scroll_container--innerScrollContainer')]//a//text()[string()='Oldest first']", 464 | "fileBrowserView.Sort.Select.NewestFirst": "XPATH://div[contains(@class, 'scroll_container--innerScrollContainer')]//a//text()[string()='Newest first']", 465 | 466 | "fileBrowserView.ShowAsGrid": "div[class*='file_browser_page_view--contentContainer'] span[data-tooltip='Show as grid']->attr:data-tooltip", 467 | "fileBrowserView.ShowAsList": "div[class*='file_browser_page_view--contentContainer'] span[data-tooltip='Show as list']->attr:data-tooltip", 468 | 469 | "fileBrowserView.ContextMenu.ShowInProject": "XPATH://a[text()='Show in project']", 470 | "fileBrowserView.ContextMenu.Open": "XPATH://a[text()='Open']", 471 | "fileBrowserView.ContextMenu.OpenInNewTab": "XPATH://a[text()='Open in new tab']", 472 | "fileBrowserView.ContextMenu.CopyLink": "XPATH://a[text()='Copy link']", 473 | "fileBrowserView.ContextMenu.AddToYourFavorites": "XPATH://a[text()='Add to your favorites']", 474 | "fileBrowserView.ContextMenu.Share": "XPATH://a[text()='Share']", 475 | "fileBrowserView.ContextMenu.Duplicate": "XPATH://a[text()='Duplicate']", 476 | "fileBrowserView.ContextMenu.Rename": "XPATH://a[text()='Rename']", 477 | "fileBrowserView.ContextMenu.Delete": "XPATH://a[text()='Delete']", 478 | "fileBrowserView.ContextMenu.RemoveFromRecent": "XPATH://a[text()='Remove from recent']", 479 | } 480 | 481 | type SelectType = "CSS" | "XPATH" 482 | type ControlType = "Text" | "Attr" 483 | 484 | interface AttrNode { 485 | Key: string 486 | Value: string 487 | } 488 | 489 | interface MatchElement { 490 | [key: string]: { 491 | type: ControlType 492 | node: Element 493 | attrList: AttrNode[] 494 | } 495 | } 496 | 497 | interface OperationRule { 498 | selectType: SelectType 499 | selectRule: string 500 | controlType: ControlType 501 | attrList: AttrNode[] 502 | } 503 | 504 | const parseOperationRuleFromMatchRule = function (matchRule: string): OperationRule { 505 | let rule: OperationRule = { 506 | selectType: "CSS", 507 | selectRule: "", 508 | controlType: "Text", 509 | attrList: [], 510 | } 511 | 512 | if (matchRule.startsWith("XPATH:")) { 513 | rule.selectType = "XPATH" 514 | matchRule = matchRule.replace("XPATH:", "") 515 | } 516 | 517 | if (matchRule.includes("->attr:")) { 518 | rule.controlType = "Attr" 519 | let ruleArr = matchRule.split("->attr:") 520 | if (ruleArr.length == 2) { 521 | rule.selectRule = ruleArr[0] 522 | let attrNodeStrList = ruleArr[1].split(",") 523 | for (let i = 0; i < attrNodeStrList.length; i++) { 524 | const attrNodeStr = attrNodeStrList[i] 525 | let attrNode: AttrNode = { 526 | Key: "", 527 | Value: "", 528 | } 529 | let attrS = attrNodeStr.split("=") 530 | attrNode.Key = attrS[0] 531 | if (attrS.length == 2) { 532 | attrNode.Value = attrS[1] 533 | } 534 | rule.attrList.push(attrNode) 535 | } 536 | } 537 | } else { 538 | rule.selectRule = matchRule 539 | } 540 | 541 | return rule 542 | } 543 | 544 | export const getTargetElement = function (originElements: Element[]): MatchElement { 545 | let matchElement: MatchElement = {} 546 | 547 | for (const element of originElements) { 548 | if (!element.querySelector) { 549 | continue 550 | } 551 | 552 | for (const elementName in matchRuleDict) { 553 | if (!Object.prototype.hasOwnProperty.call(matchRuleDict, elementName)) { 554 | continue 555 | } 556 | 557 | let rule = parseOperationRuleFromMatchRule(matchRuleDict[elementName]) 558 | let target: Element 559 | 560 | if (rule.selectType == "XPATH") { 561 | target = document.evaluate(rule.selectRule, element).iterateNext() 562 | } else { 563 | target = (element).querySelector(rule.selectRule) 564 | } 565 | 566 | if (!target) { 567 | target = (element).querySelector(`*[figma-i18n-id='${elementName}']`) 568 | } 569 | 570 | if (target && (target?.nodeType == 1 || target?.nodeType == 3)) { 571 | matchElement[elementName] = { 572 | type: rule.controlType, 573 | node: target, 574 | attrList: rule.attrList, 575 | } 576 | } 577 | } 578 | } 579 | 580 | return matchElement 581 | } 582 | -------------------------------------------------------------------------------- /src/global.d.ts: -------------------------------------------------------------------------------- 1 | /// -------------------------------------------------------------------------------- /src/locale/index.ts: -------------------------------------------------------------------------------- 1 | import * as zhCn from "./lang/zh-cn" 2 | import * as en from "./lang/en" 3 | import * as ja from "./lang/ja" 4 | 5 | export interface Language { 6 | [lang: string]: { 7 | name: string 8 | dict: { 9 | [elementName: string]: string 10 | } 11 | } 12 | } 13 | 14 | export const languageDict = { 15 | en: { 16 | name: "English", 17 | dict: en.default 18 | }, 19 | zhCn: { 20 | name: "简体中文", 21 | dict: zhCn.default 22 | }, 23 | ja: { 24 | name: "日本語", 25 | dict: ja.default 26 | } 27 | } -------------------------------------------------------------------------------- /src/locale/lang/en.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | "fullscreenMenu.BackToFiles": "Back to files", 3 | 4 | "fullscreenMenu.QuickActions": "Quick actions…", 5 | 6 | "fullscreenMenu.File": "File", 7 | "fullscreenMenu.File.NewDesignFile": "New design file", 8 | "fullscreenMenu.File.NewFigJamFile": "New FigJam file", 9 | "fullscreenMenu.File.NewFromSketchFile": "New from Sketch file…", 10 | "fullscreenMenu.File.PlaceImage": "Place image...", 11 | "fullscreenMenu.File.ImportFromCSV": "Import from CSV…", 12 | "fullscreenMenu.File.SaveLocalCopy": "Save local copy…", 13 | "fullscreenMenu.File.SaveToVersionHistory": "Save to version history…", 14 | "fullscreenMenu.File.ShowVersionHistory": "Show version history", 15 | "fullscreenMenu.File.Export": "Export…", 16 | "fullscreenMenu.File.ExportFramesToPDF": "Export frames to PDF…", 17 | "fullscreenMenu.File.ExportAs": "Export as…", 18 | "fullscreenMenu.File.ExportSelection": "Export selection…", 19 | 20 | "fullscreenMenu.Edit": "Edit", 21 | "fullscreenMenu.Edit.Undo": "Undo", 22 | "fullscreenMenu.Edit.Redo": "Redo", 23 | 24 | "fullscreenMenu.Edit.CopyAs": "Copy as", 25 | "fullscreenMenu.Edit.CopyAs.CopyAsText": "Copy as text", 26 | "fullscreenMenu.Edit.CopyAs.CopyAsCSS": "Copy as CSS", 27 | "fullscreenMenu.Edit.CopyAs.CopyAsSVG": "Copy as SVG", 28 | "fullscreenMenu.Edit.CopyAs.CopyAsPNG": "Copy as PNG", 29 | 30 | "fullscreenMenu.Edit.PasteOverSelection": "Paste over selection", 31 | "fullscreenMenu.Edit.PasteToReplace": "Paste to replace", 32 | "fullscreenMenu.Edit.Duplicate": "Duplicate", 33 | "fullscreenMenu.Edit.Delete": "Delete", 34 | "fullscreenMenu.Edit.SetDefaultProperties": "Set default properties", 35 | "fullscreenMenu.Edit.CopyProperties": "Copy properties", 36 | "fullscreenMenu.Edit.PasteProperties": "Paste properties", 37 | "fullscreenMenu.Edit.PickColor": "Pick color", 38 | "fullscreenMenu.Edit.SelectAll": "Select all", 39 | "fullscreenMenu.Edit.SelectNone": "Select none", 40 | "fullscreenMenu.Edit.SelectInverse": "Select inverse", 41 | "fullscreenMenu.Edit.SelectAllMatchingLayers": "Select all matching layers", 42 | "fullscreenMenu.Edit.SelectAllWithSameProperties": "Select all with same properties", 43 | "fullscreenMenu.Edit.SelectAllWithSameFill": "Select all with same fill", 44 | "fullscreenMenu.Edit.SelectAllWithSameStroke": "Select all with same stroke", 45 | "fullscreenMenu.Edit.SelectAllWithSameEffect": "Select all with same effect", 46 | "fullscreenMenu.Edit.SelectAllWithSameTextProperties": "Select all with same text properties", 47 | "fullscreenMenu.Edit.SelectAllWithSameFont": "Select all with same font", 48 | "fullscreenMenu.Edit.SelectAllWithSameInstance": "Select all with same instance", 49 | "fullscreenMenu.Edit.SelectAllWithSameVariant": "Select all with same variant", 50 | 51 | "fullscreenMenu.View": "View", 52 | "fullscreenMenu.View.PixelGrid": "Pixel grid", 53 | "fullscreenMenu.View.LayoutGrids": "Layout grids", 54 | "fullscreenMenu.View.Rulers": "Rulers", 55 | "fullscreenMenu.View.ShowSlices": "Show slices", 56 | "fullscreenMenu.View.Comments": "Comments", 57 | "fullscreenMenu.View.Outlines": "Outlines", 58 | "fullscreenMenu.View.PixelPreview": "Pixel preview", 59 | "fullscreenMenu.View.MaskOutlines": "Mask outlines", 60 | "fullscreenMenu.View.FrameOutlines": "Frame outlines", 61 | "fullscreenMenu.View.ShowDotGrid": "Show dot grid", 62 | "fullscreenMenu.View.ResourceUse": "Resource use", 63 | "fullscreenMenu.View.ShowOrHideUI": "Show/Hide UI", 64 | "fullscreenMenu.View.MultiplayerCursors": "Multiplayer cursors", 65 | 66 | "fullscreenMenu.View.Panels": "Panels", 67 | "fullscreenMenu.View.Panels.OpenLayersPanel": "Open layers panel", 68 | "fullscreenMenu.View.Panels.OpenDesignPanel": "Open design panel", 69 | "fullscreenMenu.View.Panels.OpenPrototypePanel": "Open prototype panel", 70 | "fullscreenMenu.View.Panels.OpenInspectPanel": "Open inspect panel", 71 | "fullscreenMenu.View.Panels.ShowLeftSidebar": "Show left sidebar", 72 | 73 | "fullscreenMenu.View.ZoomIn": "Zoom in", 74 | "fullscreenMenu.View.ZoomOut": "Zoom out", 75 | "fullscreenMenu.View.ZoomTo100%": "Zoom to 100%", 76 | "fullscreenMenu.View.ZoomToFit": "Zoom to fit", 77 | "fullscreenMenu.View.ZoomToSelection": "Zoom to selection", 78 | "fullscreenMenu.View.PreviousPage": "Previous page", 79 | "fullscreenMenu.View.NextPage": "Next page", 80 | "fullscreenMenu.View.ZoomToPreviousFrame": "Zoom to previous frame", 81 | "fullscreenMenu.View.ZoomToNextFrame": "Zoom to next frame", 82 | "fullscreenMenu.View.FindPreviousFrame": "Find previous frame", 83 | "fullscreenMenu.View.FindNextFrame": "Find next frame", 84 | 85 | "fullscreenMenu.Object": "Object", 86 | "fullscreenMenu.Object.GroupSelection": "Group selection", 87 | "fullscreenMenu.Object.CreateSection": "Create section", 88 | "fullscreenMenu.Object.FrameSelection": "Frame selection", 89 | "fullscreenMenu.Object.UngroupSelection": "Ungroup selection", 90 | "fullscreenMenu.Object.UseAsMask": "Use as mask", 91 | "fullscreenMenu.Object.RestoreDefaultThumbnail": "Restore default thumbnail", 92 | "fullscreenMenu.Object.SetAsThumbnail": "Set as thumbnail", 93 | "fullscreenMenu.Object.AddAutoLayout": "Add auto layout", 94 | "fullscreenMenu.Object.CreateComponent": "Create component", 95 | "fullscreenMenu.Object.ResetAllChanges": "Reset all changes", 96 | "fullscreenMenu.Object.ResetAllOverrides": "Reset all overrides", 97 | "fullscreenMenu.Object.DetachInstance": "Detach instance", 98 | 99 | "fullscreenMenu.Object.MainComponent": "Main component", 100 | "fullscreenMenu.Object.MainComponent.GoToMainComponent": "Go to main component", 101 | "fullscreenMenu.Object.MainComponent.PushOverridesToMainComponent": "Push overrides to main component", 102 | "fullscreenMenu.Object.MainComponent.RestoreMainComponent": "Restore main component", 103 | 104 | "fullscreenMenu.Object.BringToFront": "Bring to front", 105 | "fullscreenMenu.Object.BringForward": "Bring forward", 106 | "fullscreenMenu.Object.SendBackward": "Send backward", 107 | "fullscreenMenu.Object.SendToBack": "Send to back", 108 | "fullscreenMenu.Object.flipHorizontal": "Flip horizontal", 109 | "fullscreenMenu.Object.flipVertical": "Flip vertical", 110 | "fullscreenMenu.Object.Rotate180": "Rotate 180˚", 111 | "fullscreenMenu.Object.Rotate90Left": "Rotate 90˚ left", 112 | "fullscreenMenu.Object.Rotate90Right": "Rotate 90˚ right", 113 | "fullscreenMenu.Object.FlattenSelection": "Flatten selection", 114 | "fullscreenMenu.Object.OutlineStroke": "Outline stroke", 115 | 116 | "fullscreenMenu.Object.BooleanGroups": "Boolean groups", 117 | "fullscreenMenu.Object.BooleanGroups.UnionSelection": "Union selection", 118 | "fullscreenMenu.Object.BooleanGroups.SubtractSelection": "Subtract selection", 119 | "fullscreenMenu.Object.BooleanGroups.IntersectSelection": "Intersect selection", 120 | "fullscreenMenu.Object.BooleanGroups.ExcludeSelection": "Exclude selection", 121 | 122 | "fullscreenMenu.Object.RasterizeSelection": "Rasterize selection", 123 | "fullscreenMenu.Object.ShowOrHideSelection": "Show/Hide selection", 124 | "fullscreenMenu.Object.LockOrUnlockSelection": "Lock/Unlock selection", 125 | "fullscreenMenu.Object.HideOtherLayers": "Hide other layers", 126 | "fullscreenMenu.Object.CollapseLayers": "Collapse layers", 127 | "fullscreenMenu.Object.RemoveFill": "Remove fill", 128 | "fullscreenMenu.Object.RemoveStroke": "Remove stroke", 129 | "fullscreenMenu.Object.SwapFillAndStroke": "Swap fill and stroke", 130 | 131 | "fullscreenMenu.Vector": "Vector", 132 | "fullscreenMenu.Vector.JoinSelection": "Join selection", 133 | "fullscreenMenu.Vector.SmoothJoinSelection": "Smooth join selection", 134 | "fullscreenMenu.Vector.DeleteAndHealSelection": "Delete and heal selection", 135 | 136 | "fullscreenMenu.Text": "Text", 137 | "fullscreenMenu.Text.Bold": "Bold", 138 | "fullscreenMenu.Text.Italic": "Italic", 139 | "fullscreenMenu.Text.Underline": "Underline", 140 | "fullscreenMenu.Text.Strikethrough": "Strikethrough", 141 | "fullscreenMenu.Text.CreateLink": "Create link", 142 | "fullscreenMenu.Text.BulletedList": "Bulleted list", 143 | "fullscreenMenu.Text.NumberedList": "Numbered list", 144 | 145 | "fullscreenMenu.Text.Alignment": "Alignment", 146 | "fullscreenMenu.Text.Alignment.TextAlignLeft": "Text align left", 147 | "fullscreenMenu.Text.Alignment.TextAlignCenter": "Text align center", 148 | "fullscreenMenu.Text.Alignment.TextAlignRight": "Text align right", 149 | "fullscreenMenu.Text.Alignment.TextAlignJustified": "Text align justified", 150 | "fullscreenMenu.Text.Alignment.TextAlignTop": "Text align top", 151 | "fullscreenMenu.Text.Alignment.TextAlignMiddle": "Text align middle", 152 | "fullscreenMenu.Text.Alignment.TextAlignBottom": "Text align bottom", 153 | 154 | "fullscreenMenu.Text.Adjust": "Adjust", 155 | "fullscreenMenu.Text.Adjust.IncreaseIndentation": "Increase indentation", 156 | "fullscreenMenu.Text.Adjust.DecreaseIndentation": "Decrease indentation", 157 | "fullscreenMenu.Text.Adjust.IncreaseFontSize": "Increase font size", 158 | "fullscreenMenu.Text.Adjust.DecreaseFontSize": "Decrease font size", 159 | "fullscreenMenu.Text.Adjust.IncreaseFontWeight": "Increase font weight", 160 | "fullscreenMenu.Text.Adjust.DecreaseFontWeight": "Decrease font weight", 161 | "fullscreenMenu.Text.Adjust.IncreaseLineHeight": "Increase line height", 162 | "fullscreenMenu.Text.Adjust.DecreaseLineHeight": "Decrease line height", 163 | "fullscreenMenu.Text.Adjust.IncreaseLetterSpacing": "Increase letter spacing", 164 | "fullscreenMenu.Text.Adjust.DecreaseLetterSpacing": "Decrease letter spacing", 165 | 166 | "fullscreenMenu.Text.Case": "Case", 167 | "fullscreenMenu.Text.Case.OriginalCase": "Original case", 168 | "fullscreenMenu.Text.Case.Uppercase": "Uppercase", 169 | "fullscreenMenu.Text.Case.Lowercase": "Lowercase", 170 | 171 | "fullscreenMenu.Text.TextDirection": "Text direction", 172 | "fullscreenMenu.Text.TextDirection.LeftToRight": "Left to right", 173 | "fullscreenMenu.Text.TextDirection.RightToLeft": "Right to left", 174 | 175 | 176 | "fullscreenMenu.Arrange": "Arrange", 177 | "fullscreenMenu.Arrange.RoundToPixel": "Round to pixel", 178 | "fullscreenMenu.Arrange.AlignLeft": "Align left", 179 | "fullscreenMenu.Arrange.AlignHorizontalCenters": "Align horizontal centers", 180 | "fullscreenMenu.Arrange.AlignRight": "Align right", 181 | "fullscreenMenu.Arrange.AlignTop": "Align top", 182 | "fullscreenMenu.Arrange.AlignVerticalCenters": "Align vertical centers", 183 | "fullscreenMenu.Arrange.AlignBottom": "Align bottom", 184 | "fullscreenMenu.Arrange.TidyUp": "Tidy up", 185 | "fullscreenMenu.Arrange.PackHorizontal": "Pack horizontal", 186 | "fullscreenMenu.Arrange.PackVertical": "Pack vertical", 187 | "fullscreenMenu.Arrange.DistributeHorizontalSpacing": "Distribute horizontal spacing", 188 | "fullscreenMenu.Arrange.DistributeVerticalSpacing": "Distribute vertical spacing", 189 | "fullscreenMenu.Arrange.DistributeLeft": "Distribute left", 190 | "fullscreenMenu.Arrange.DistributeHorizontalCenters": "Distribute horizontal centers", 191 | "fullscreenMenu.Arrange.DistributeRight": "Distribute right", 192 | "fullscreenMenu.Arrange.DistributeTop": "Distribute top", 193 | "fullscreenMenu.Arrange.DistributeVerticalCenters": "Distribute vertical centers", 194 | "fullscreenMenu.Arrange.DistributeBottom": "Distribute bottom", 195 | 196 | "fullscreenMenu.Plugins": "Plugins", 197 | "fullscreenMenu.Plugins.RunLastPlugin": "Run last plugin", 198 | "fullscreenMenu.Plugins.ManagePlugins": "Manage plugins…", 199 | "fullscreenMenu.Plugins.BrowsePluginsInCommunity": "Browse plugins in Community", 200 | "fullscreenMenu.Plugins.BrowsePlugins": "Browse plugins", 201 | 202 | "fullscreenMenu.Widgets": "Widgets", 203 | "fullscreenMenu.Widgets.BrowseWidgets": "Browse widgets", 204 | "fullscreenMenu.Widgets.SelectAllWidgets": "Select all widgets", 205 | 206 | "fullscreenMenu.Integrations": "Integrations", 207 | "fullscreenMenu.Integrations.Dribbble": "Dribbble", 208 | 209 | "fullscreenMenu.Preferences": "Preferences", 210 | "fullscreenMenu.Preferences.SnapToGeometry": "Snap to geometry", 211 | "fullscreenMenu.Preferences.SnapToObjects": "Snap to objects", 212 | "fullscreenMenu.Preferences.SnapToDotGrid": "Snap to dot grid", 213 | "fullscreenMenu.Preferences.SnapToPixelGrid": "Snap to pixel grid", 214 | "fullscreenMenu.Preferences.KeepToolSelectedAfterUse": "Keep tool selected after use", 215 | "fullscreenMenu.Preferences.HighlightLayersOnHover": "Highlight layers on hover", 216 | "fullscreenMenu.Preferences.RenameDuplicatedLayers": "Rename duplicated layers", 217 | "fullscreenMenu.Preferences.ShowDimensionsOnObjects": "Show dimensions on objects", 218 | "fullscreenMenu.Preferences.HideCanvasUIDuringChanges": "Hide canvas UI during changes", 219 | "fullscreenMenu.Preferences.KeyboardZoomsIntoSelection": "Keyboard zooms into selection", 220 | "fullscreenMenu.Preferences.SubstituteSmartQuotes": "Substitute smart quotes", 221 | "fullscreenMenu.Preferences.ShowGoogleFonts": "Show Google Fonts", 222 | "fullscreenMenu.Preferences.FlipObjectsWhileResizing": "Flip objects while resizing", 223 | "fullscreenMenu.Preferences.InvertZoomDirection": "Invert zoom direction", 224 | "fullscreenMenu.Preferences.UseNumberKeysForOpacity": "Use number keys for opacity", 225 | "fullscreenMenu.Preferences.ShakeCursorForHighFive": "Shake cursor for high five", 226 | "fullscreenMenu.Preferences.OpenLinksInDesktopApp": "Open links in desktop app", 227 | 228 | "fullscreenMenu.Preferences.Theme": "Theme", 229 | "fullscreenMenu.Preferences.Theme.Light": "Light", 230 | "fullscreenMenu.Preferences.Theme.Dark": "Dark", 231 | "fullscreenMenu.Preferences.SystemTheme": "System theme", 232 | 233 | "fullscreenMenu.Preferences.NudgeAmount": "Nudge amount…", 234 | "fullscreenMenu.Preferences.ShowTemplatesForNewFiles": "Show templates for new files", 235 | 236 | "fullscreenMenu.Libraries": "Libraries", 237 | 238 | "fullscreenMenu.GetDesktopApp": "Get desktop app", 239 | "fullscreenMenu.OpenInDesktopApp": "Open in desktop app", 240 | 241 | "fullscreenMenu.HelpAndAccount": "Help and account", 242 | "fullscreenMenu.HelpAndAccount.HelpPage": "Help page", 243 | "fullscreenMenu.HelpAndAccount.KeyboardShortcuts": "Keyboard shortcuts", 244 | "fullscreenMenu.HelpAndAccount.SupportForum": "Support forum", 245 | "fullscreenMenu.HelpAndAccount.VideoTutorials": "Video tutorials", 246 | "fullscreenMenu.HelpAndAccount.ReleaseNotes": "Release notes", 247 | "fullscreenMenu.HelpAndAccount.OpenFontSettings": "Open font settings", 248 | "fullscreenMenu.HelpAndAccount.LegalSummary": "Legal summary", 249 | "fullscreenMenu.HelpAndAccount.AccountSettings": "Account settings", 250 | "fullscreenMenu.HelpAndAccount.LogOut": "Log out", 251 | 252 | "fullscreenMenu.PublishStylesAndComponents": "Publish styles and components", 253 | "fullscreenMenu.Rename": "Rename", 254 | "fullscreenMenu.MoveToProject": "Move to project…", 255 | "fullscreenMenu.Delete": "Delete…", 256 | "fullscreenMenu.ZoomTo50": "Zoom to 50%", 257 | "fullscreenMenu.ZoomTo200": "Zoom to 200%", 258 | "fullscreenMenu.Disabled": "Disabled", 259 | 260 | "fullscreenMenu.Tooltip.MainMenu": "Main menu", 261 | "fullscreenMenu.Tooltip.MoveTools": "Move tools", 262 | "fullscreenMenu.Tooltip.SetToolDefault": "Move V", 263 | "fullscreenMenu.Tooltip.SetToolScale": "Scale K", 264 | "fullscreenMenu.Tooltip.RegionTools": "Region tools", 265 | "fullscreenMenu.Tooltip.SetToolFrame": "Frame F", 266 | "fullscreenMenu.Tooltip.SetToolSlice": "Slice S", 267 | "fullscreenMenu.Tooltip.ShapeTools": "Shape tools", 268 | "fullscreenMenu.Tooltip.SetToolRectangle": "Rectangle R", 269 | "fullscreenMenu.Tooltip.SetToolLine": "Line L", 270 | "fullscreenMenu.Tooltip.SetToolArrow": "Arrow Shift+L", 271 | "fullscreenMenu.Tooltip.SetToolEllipse": "Ellipse O", 272 | "fullscreenMenu.Tooltip.SetToolRegularPolygon": "Polygon", 273 | "fullscreenMenu.Tooltip.SetToolStar": "Star", 274 | "fullscreenMenu.Tooltip.DrawingTools": "Drawing tools", 275 | "fullscreenMenu.Tooltip.SetToolPen": "Pen P", 276 | "fullscreenMenu.Tooltip.SetToolPencil": "Pencil Shift+P", 277 | "fullscreenMenu.Tooltip.SetToolText": "Text T", 278 | "fullscreenMenu.Tooltip.SetToolHand": "Hand tool H", 279 | "fullscreenMenu.Tooltip.SetToolComments": "Add comment C", 280 | "fullscreenMenu.Tooltip.Present": "Present", 281 | "fullscreenMenu.Tooltip.CreateComponent": "Create component Ctrl+Alt+K", 282 | "fullscreenMenu.Tooltip.UseAsMask": "Use as mask Ctrl+Alt+M", 283 | "fullscreenMenu.Tooltip.BooleanGroups": "Boolean groups", 284 | "fullscreenMenu.Tooltip.UnionSelection": "Union selection", 285 | "fullscreenMenu.Tooltip.SubtractSelection": "Subtract selection", 286 | "fullscreenMenu.Tooltip.IntersectSelection": "Intersect selection", 287 | "fullscreenMenu.Tooltip.ExcludeSelection": "Exclude selection", 288 | 289 | 290 | "toolbarView.fileName.folderName.Drafts": "Drafts", 291 | 292 | "toolbarView.moveFlyout.flyout.toolDefault": "Move", 293 | "toolbarView.moveFlyout.flyout.toolScale": "Scale", 294 | 295 | "toolbarView.regionFlyout.flyout.toolFrame": "Frame", 296 | "toolbarView.regionFlyout.flyout.toolSlice": "Slice", 297 | 298 | "toolbarView.shapeFlyout.flyout.toolShapeRectangle": "Rectangle", 299 | "toolbarView.shapeFlyout.flyout.toolShapeLine": "Line", 300 | "toolbarView.shapeFlyout.flyout.toolShapeArrow": "Arrow", 301 | "toolbarView.shapeFlyout.flyout.toolShapeEllipse": "Ellipse", 302 | "toolbarView.shapeFlyout.flyout.toolShapePolygon": "Polygon", 303 | "toolbarView.shapeFlyout.flyout.toolShapeStar": "Star", 304 | "toolbarView.shapeFlyout.flyout.toolPlaceImage": "Place image...", 305 | 306 | "toolbarView.penFlyout.flyout.toolPen": "Pen", 307 | "toolbarView.penFlyout.flyout.toolPencil": "Pencil", 308 | 309 | "toolbarView.booleanFlyout.flyout.toolBooleanUnion": "Union selection", 310 | "toolbarView.booleanFlyout.flyout.toolBooleanSubtract": "Subtract selection", 311 | "toolbarView.booleanFlyout.flyout.toolBooleanIntersect": "Intersect selection", 312 | "toolbarView.booleanFlyout.flyout.toolBooleatoolBooleanXornUnion": "Exclude selection", 313 | "toolbarView.booleanFlyout.flyout.toolFlatten": "Flatten selection", 314 | 315 | "toolbarView.Share": "Share", 316 | 317 | "toolbarView.CursorChat": "Cursor chat", 318 | "toolbarView.Stamp": "Stamp", 319 | "toolbarView.Emote": "Emote", 320 | 321 | "toolbarView.Overflow.Emote": "Emote", 322 | "toolbarView.Overflow.Stamp": "Stamp", 323 | "toolbarView.Overflow.CursorChat": "Cursor chat", 324 | "toolbarView.Overflow.HighFive": "High five", 325 | "toolbarView.Overflow.Timer": "Timer", 326 | 327 | "toolbarView.Tooltip.Collaborate": "Collaborate", 328 | "toolbarView.Tooltip.ZoomOut": "Zoom out Ctrl+-", 329 | "toolbarView.Tooltip.ZoomIn": "Zoom in Ctrl+-", 330 | "toolbarView.Tooltip.ZoomOrViewOptions": "Zoom/view options", 331 | 332 | 333 | "delightfulToolbar.MoveTool": "Move tool V", 334 | "delightfulToolbar.HandTool": "Hand tool H", 335 | "delightfulToolbar.Marker": "Marker M", 336 | "delightfulToolbar.Highlighter": "Highlighter Shift+M", 337 | "delightfulToolbar.Eraser": "Eraser Shift+Backspace", 338 | "delightfulToolbar.Thin": "Thin", 339 | "delightfulToolbar.Thick": "Thick", 340 | "delightfulToolbar.Charcoal": "Charcoal", 341 | "delightfulToolbar.Red": "Red", 342 | "delightfulToolbar.Yellow": "Yellow", 343 | "delightfulToolbar.Green": "Green", 344 | "delightfulToolbar.Blue": "Blue", 345 | "delightfulToolbar.Violet": "Violet", 346 | "delightfulToolbar.Brown": "Brown", 347 | "delightfulToolbar.White": "White", 348 | "delightfulToolbar.Square": "Square R", 349 | "delightfulToolbar.Ellipse": "Ellipse O", 350 | "delightfulToolbar.RoundedRectangle": "Rounded rectangle", 351 | "delightfulToolbar.Diamond": "Diamond", 352 | "delightfulToolbar.TriangleUp": "Triangle", 353 | "delightfulToolbar.TriangleDown": "Triangle", 354 | "delightfulToolbar.ParallelogramRight": "Parallelogram", 355 | "delightfulToolbar.ParallelogramLeft": "Parallelogram", 356 | "delightfulToolbar.Cylinder": "Cylinder", 357 | "delightfulToolbar.HorizontalCylinder": "Horizontal cylinder", 358 | "delightfulToolbar.File": "File", 359 | "delightfulToolbar.Folder": "Folder", 360 | "delightfulToolbar.Options.Square": "Square", 361 | "delightfulToolbar.Options.Ellipse": "Ellipse", 362 | "delightfulToolbar.Options.RoundedRectangle": "Rounded rectangle", 363 | "delightfulToolbar.Options.Diamond": "Diamond", 364 | "delightfulToolbar.Options.Triangle": "Triangle", 365 | "delightfulToolbar.Options.DownwardPointingTriangle": "Downward-pointing triangle", 366 | "delightfulToolbar.Options.RightLeaningParallelogram": "Right-leaning parallelogram", 367 | "delightfulToolbar.Options.LeftLeaningParallelogram": "Left-leaning parallelogram", 368 | "delightfulToolbar.Options.Cylinder": "Cylinder", 369 | "delightfulToolbar.Options.HorizontalCylinder": "Horizontal cylinder", 370 | "delightfulToolbar.Options.File": "File", 371 | "delightfulToolbar.Options.Folder": "Folder", 372 | "delightfulToolbar.Sticky": "Sticky note S", 373 | "delightfulToolbar.Text": "Text T", 374 | "delightfulToolbar.Connector": "Connector X", 375 | "delightfulToolbar.Line": "Line L", 376 | "delightfulToolbar.Options.Connector": "Connector", 377 | "delightfulToolbar.Options.StraightLine": "Straight line", 378 | "delightfulToolbar.Stamp": "Stamp E", 379 | "delightfulToolbar.More": "Widgets,stickers,templates and more", 380 | 381 | 382 | "contextMenu.Copy": "Copy", 383 | "contextMenu.Paste": "Paste", 384 | "contextMenu.PasteHere": "Paste here", 385 | 386 | "contextMenu.CopyOrPasteAs": "Copy/Paste as", 387 | "contextMenu.CopyOrPasteAs.CopyLink": "Copy link", 388 | 389 | "contextMenu.SelectLayer": "Select layer", 390 | "contextMenu.MoveToPage": "Move to page", 391 | 392 | "contextMenu.Ungroup": "Ungroup", 393 | "contextMenu.Flatten": "Flatten", 394 | 395 | "contextMenu.ShowOrHide": "Show/Hide", 396 | "contextMenu.LockOrUnlock": "Lock/Unlock", 397 | 398 | "contextMenu.ShowOrHideComments": "Show/Hide comments", 399 | 400 | 401 | "pagesPanel.Sidebar.Tab": "Layers", 402 | "pagesPanel.Sidebar.AssetsTab": "Assets", 403 | 404 | "pagesPanel.Sidebar.Pages": "Pages", 405 | "pagesPanel.Sidebar.Pages.CopyLinkToPage": "Copy link to page", 406 | "pagesPanel.Sidebar.Pages.DeletePage": "Delete page", 407 | "pagesPanel.Sidebar.Pages.RenamePage": "Rename page", 408 | "pagesPanel.Sidebar.Pages.DuplicatePage": "Duplicate page", 409 | 410 | "pagesPanel.Sidebar.AddNewPage": "Add new page", 411 | "pagesPanel.Sidebar.Search": "Search", 412 | "pagesPanel.Sidebar.ShowAsList": "Show as list", 413 | "pagesPanel.Sidebar.ShowAsGrid": "Show as grid", 414 | "pagesPanel.Sidebar.TeamLibrary": "Team library", 415 | 416 | "pagesPanel.Sidebar.Components": "Components", 417 | "pagesPanel.Sidebar.Components.FirstInfoText": "To create a component, select a layer and click the \"Create component\" button in the toolbar.", 418 | "pagesPanel.Sidebar.Components.FirstInfoLink": "Learn more", 419 | "pagesPanel.Sidebar.Components.SecondInfoText": "Use libraries for quick access to components from other files.", 420 | "pagesPanel.Sidebar.Components.SecondInfoLink": "Explore libraries...", 421 | 422 | 423 | "propertiesPanel.TabsHeader.Design": "Design", 424 | "propertiesPanel.TabsHeader.Prototype": "Prototype", 425 | "propertiesPanel.TabsHeader.Inspect": "Inspect", 426 | 427 | 428 | "navbar.Community": "Community", 429 | "navbar.Search": "Search files, teams, or people", 430 | "navbar.Notifications": "Notifications", 431 | "navbar.InternalProfile": "Internal profile", 432 | "navbar.Settings": "Settings", 433 | "navbar.AddAccount": "Add account", 434 | 435 | 436 | "sidebar.Recents": "Recents", 437 | "sidebar.Drafts": "Drafts", 438 | "sidebar.ExploreCommunity": "Explore community", 439 | "sidebar.TeamProject": "Team project", 440 | "sidebar.CreateNewTeam": "Create new team", 441 | 442 | 443 | "fileBrowserView.RecentlyViewed": "Recently viewed", 444 | "fileBrowserView.Drafts": "Drafts", 445 | "fileBrowserView.Deleted": "Deleted", 446 | "fileBrowserView.NewDesignFile": "New design file", 447 | "fileBrowserView.NewDesignFile.Desc": "Design and prototype", 448 | "fileBrowserView.NewFigJamFile": "New FigJam file", 449 | "fileBrowserView.NewFigJamFile.Desc": "Whiteboard and diagram", 450 | "fileBrowserView.ImportFile": "Import file", 451 | "fileBrowserView.ImportFile.Desc": "Figma, Sketch, and image files", 452 | 453 | "fileBrowserView.Filter": "Filter:", 454 | "fileBrowserView.Filter.Select.AllFiles": "All files", 455 | "fileBrowserView.Filter.Select.DesignFiles": "Design files", 456 | "fileBrowserView.Filter.Select.FigJamFiles": "FigJam Files", 457 | "fileBrowserView.Filter.Select.Prototypes": "Prototypes", 458 | 459 | "fileBrowserView.Sort": "Sort:", 460 | "fileBrowserView.Sort.Select.SortBy": "Sort by", 461 | "fileBrowserView.Sort.Select.Alphabetical": "Alphabetical", 462 | "fileBrowserView.Sort.Select.DateCreated": "Date created", 463 | "fileBrowserView.Sort.Select.LastViewed": "Last viewed", 464 | "fileBrowserView.Sort.Select.LastModified": "Last modified", 465 | "fileBrowserView.Sort.Select.Order": "Order", 466 | "fileBrowserView.Sort.Select.OldestFirst": "Oldest first", 467 | "fileBrowserView.Sort.Select.NewestFirst": "Newest first", 468 | 469 | "fileBrowserView.ShowAsGrid": "Show as grid", 470 | "fileBrowserView.ShowAsList": "Show as list", 471 | 472 | "fileBrowserView.ContextMenu.ShowInProject": "Show in project", 473 | "fileBrowserView.ContextMenu.Open": "Open", 474 | "fileBrowserView.ContextMenu.OpenInNewTab": "Open in new tab", 475 | "fileBrowserView.ContextMenu.CopyLink": "Copy link", 476 | "fileBrowserView.ContextMenu.AddToYourFavorites": "Add to your favorites", 477 | "fileBrowserView.ContextMenu.Share": "Share", 478 | "fileBrowserView.ContextMenu.Duplicate": "Duplicate", 479 | "fileBrowserView.ContextMenu.Rename": "Rename", 480 | "fileBrowserView.ContextMenu.Delete": "Delete", 481 | "fileBrowserView.ContextMenu.RemoveFromRecent": "Remove from recent", 482 | } -------------------------------------------------------------------------------- /src/locale/lang/ja.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | "fullscreenMenu.BackToFiles": "プロジェクトに戻る", 3 | 4 | "fullscreenMenu.QuickActions": "Quick actions…", 5 | 6 | "fullscreenMenu.File": "ファイル", 7 | "fullscreenMenu.File.NewDesignFile": "新規作成", 8 | "fullscreenMenu.File.NewFigJamFile": "FigJam 新規作成", 9 | "fullscreenMenu.File.NewFromSketchFile": "Sketch ファイルを開く", 10 | "fullscreenMenu.File.PlaceImage": "画像を配置", 11 | "fullscreenMenu.File.ImportFromCSV": "Import from CSV…", 12 | "fullscreenMenu.File.SaveLocalCopy": "ローカルに保存", 13 | "fullscreenMenu.File.SaveToVersionHistory": "バージョン履歴を追加", 14 | "fullscreenMenu.File.ShowVersionHistory": "バージョン履歴を表示", 15 | "fullscreenMenu.File.Export": "書き出し", 16 | "fullscreenMenu.File.ExportFramesToPDF": "PDF で書き出し", 17 | "fullscreenMenu.File.ExportAs": "Export as…", 18 | "fullscreenMenu.File.ExportSelection": "Export selection…", 19 | 20 | "fullscreenMenu.Edit": "編集", 21 | "fullscreenMenu.Edit.Undo": "取り消し", 22 | "fullscreenMenu.Edit.Redo": "やり直し", 23 | 24 | "fullscreenMenu.Edit.CopyAs": "コピー", 25 | "fullscreenMenu.Edit.CopyAs.CopyAsText": "テキストとしてコピー", 26 | "fullscreenMenu.Edit.CopyAs.CopyAsCSS": "CSS としてコピー", 27 | "fullscreenMenu.Edit.CopyAs.CopyAsSVG": "SVG としてコピー", 28 | "fullscreenMenu.Edit.CopyAs.CopyAsPNG": "PNG としてコピー", 29 | 30 | "fullscreenMenu.Edit.PasteOverSelection": "選択したものの上にペースト", 31 | "fullscreenMenu.Edit.PasteToReplace": "置換してペースト", 32 | "fullscreenMenu.Edit.Duplicate": "複製", 33 | "fullscreenMenu.Edit.Delete": "削除", 34 | "fullscreenMenu.Edit.SetDefaultProperties": "プロパティのデフォルトに設定", 35 | "fullscreenMenu.Edit.CopyProperties": "プロパティをコピー", 36 | "fullscreenMenu.Edit.PasteProperties": "プロパティをペースト", 37 | "fullscreenMenu.Edit.PickColor": "色を選択", 38 | "fullscreenMenu.Edit.SelectAll": "すべてを選択", 39 | "fullscreenMenu.Edit.SelectNone": "選択解除", 40 | "fullscreenMenu.Edit.SelectInverse": "他を選択", 41 | "fullscreenMenu.Edit.SelectAllMatchingLayers": "Select all matching layers", 42 | "fullscreenMenu.Edit.SelectAllWithSameProperties": "共通のプロパティをすべて選択", 43 | "fullscreenMenu.Edit.SelectAllWithSameFill": "共通の塗りをすべて選択", 44 | "fullscreenMenu.Edit.SelectAllWithSameStroke": "共通の線をすべて選択", 45 | "fullscreenMenu.Edit.SelectAllWithSameEffect": "共通のエフェクトをすべて選択", 46 | "fullscreenMenu.Edit.SelectAllWithSameTextProperties": "共通のテキストプロパティをすべて選択", 47 | "fullscreenMenu.Edit.SelectAllWithSameFont": "共通のフォントを選択", 48 | "fullscreenMenu.Edit.SelectAllWithSameInstance": "共通のインスタンスを選択", 49 | "fullscreenMenu.Edit.SelectAllWithSameVariant": "Select all with same variant", 50 | 51 | "fullscreenMenu.View": "表示", 52 | "fullscreenMenu.View.PixelGrid": "ピクセルグリッドを表示", 53 | "fullscreenMenu.View.LayoutGrids": "レイアウトグリッドを表示", 54 | "fullscreenMenu.View.Rulers": "定規を表示", 55 | "fullscreenMenu.View.ShowSlices": "スライスを表示", 56 | "fullscreenMenu.View.Comments": "コメントを表示", 57 | "fullscreenMenu.View.Outlines": "アウトラインを表示", 58 | "fullscreenMenu.View.PixelPreview": "ピクセルでプレビュー", 59 | "fullscreenMenu.View.MaskOutlines": "マスクのアウトラインを表示", 60 | "fullscreenMenu.View.FrameOutlines": "フレームのアウトラインを表示", 61 | "fullscreenMenu.View.ShowDotGrid": "Show dot grid", 62 | "fullscreenMenu.View.ResourceUse": "リソース使用量を表示", 63 | "fullscreenMenu.View.ShowOrHideUI": "UI を表示/非表示", 64 | "fullscreenMenu.View.MultiplayerCursors": "共同作業者のカーソルを表示", 65 | 66 | "fullscreenMenu.View.Panels": "パネル", 67 | "fullscreenMenu.View.Panels.OpenLayersPanel": "レイヤーパネルを表示", 68 | "fullscreenMenu.View.Panels.OpenDesignPanel": "デザインパネルを表示", 69 | "fullscreenMenu.View.Panels.OpenPrototypePanel": "プロトタイプパネルを表示", 70 | "fullscreenMenu.View.Panels.OpenInspectPanel": "検査パネルを表示", 71 | "fullscreenMenu.View.Panels.ShowLeftSidebar": "サイドバーを表示", 72 | 73 | "fullscreenMenu.View.ZoomIn": "ズームイン", 74 | "fullscreenMenu.View.ZoomOut": "ズームアウト", 75 | "fullscreenMenu.View.ZoomTo100%": "100% にズーム", 76 | "fullscreenMenu.View.ZoomToFit": "画面に合わせてすべてをズーム", 77 | "fullscreenMenu.View.ZoomToSelection": "選択したものに合わせてズーム", 78 | "fullscreenMenu.View.PreviousPage": "前のページ", 79 | "fullscreenMenu.View.NextPage": "次のページ", 80 | "fullscreenMenu.View.ZoomToPreviousFrame": "前のフレームにズーム", 81 | "fullscreenMenu.View.ZoomToNextFrame": "次のフレームにズーム", 82 | "fullscreenMenu.View.FindPreviousFrame": "前のフレームに移動", 83 | "fullscreenMenu.View.FindNextFrame": "次のフレームに移動", 84 | 85 | "fullscreenMenu.Object": "オブジェクト", 86 | "fullscreenMenu.Object.GroupSelection": "グループ化", 87 | "fullscreenMenu.Object.CreateSection": "Create section", 88 | "fullscreenMenu.Object.FrameSelection": "フレーム化", 89 | "fullscreenMenu.Object.UngroupSelection": "グループ解除", 90 | "fullscreenMenu.Object.UseAsMask": "マスクを作成", 91 | "fullscreenMenu.Object.RestoreDefaultThumbnail": "デフォルトのサムネイルに戻す", 92 | "fullscreenMenu.Object.SetAsThumbnail": "ファイルのサムネイルに設定", 93 | "fullscreenMenu.Object.AddAutoLayout": "オートレイアウトを追加", 94 | "fullscreenMenu.Object.CreateComponent": "コンポーネントを作成", 95 | "fullscreenMenu.Object.ResetAllChanges": "Reset all changes", 96 | "fullscreenMenu.Object.ResetAllOverrides": "オーバーライドをリセット", 97 | "fullscreenMenu.Object.DetachInstance": "インスタンスを解除", 98 | 99 | "fullscreenMenu.Object.MainComponent": "メインコンポーネント", 100 | "fullscreenMenu.Object.MainComponent.GoToMainComponent": "メインコンポーネントへ移動", 101 | "fullscreenMenu.Object.MainComponent.PushOverridesToMainComponent": "オーバーライドをメインに反映", 102 | "fullscreenMenu.Object.MainComponent.RestoreMainComponent": "メインコンポーネントを復元", 103 | 104 | "fullscreenMenu.Object.BringToFront": "最前面へ", 105 | "fullscreenMenu.Object.BringForward": "前面へ", 106 | "fullscreenMenu.Object.SendBackward": "背面へ", 107 | "fullscreenMenu.Object.SendToBack": "最背面へ", 108 | "fullscreenMenu.Object.flipHorizontal": "水平方向に反転", 109 | "fullscreenMenu.Object.flipVertical": "垂直方向に反転", 110 | "fullscreenMenu.Object.Rotate180": "180°回転", 111 | "fullscreenMenu.Object.Rotate90Left": "左に90°回転", 112 | "fullscreenMenu.Object.Rotate90Right": "右に90°回転", 113 | "fullscreenMenu.Object.FlattenSelection": "複合パスに拡張", 114 | "fullscreenMenu.Object.OutlineStroke": "パスのアウトライン", 115 | 116 | "fullscreenMenu.Object.BooleanGroups": "複合シェイプを作成", 117 | "fullscreenMenu.Object.BooleanGroups.UnionSelection": "合体", 118 | "fullscreenMenu.Object.BooleanGroups.SubtractSelection": "前面オブジェクトで型抜き", 119 | "fullscreenMenu.Object.BooleanGroups.IntersectSelection": "交差", 120 | "fullscreenMenu.Object.BooleanGroups.ExcludeSelection": "中マド", 121 | 122 | "fullscreenMenu.Object.RasterizeSelection": "ラスタライズ", 123 | "fullscreenMenu.Object.ShowOrHideSelection": "選択したものを表示/非表示", 124 | "fullscreenMenu.Object.LockOrUnlockSelection": "選択したものをロック/ロック解除", 125 | "fullscreenMenu.Object.HideOtherLayers": "他のレイヤーを隠す", 126 | "fullscreenMenu.Object.CollapseLayers": "レイヤーを閉じる", 127 | "fullscreenMenu.Object.RemoveFill": "塗りを削除", 128 | "fullscreenMenu.Object.RemoveStroke": "線を削除", 129 | "fullscreenMenu.Object.SwapFillAndStroke": "塗りと線を入れ替え", 130 | 131 | "fullscreenMenu.Vector": "ベクター", 132 | "fullscreenMenu.Vector.JoinSelection": "アンカーポイントを連結", 133 | "fullscreenMenu.Vector.SmoothJoinSelection": "アンカーポイントをスムーズに連結", 134 | "fullscreenMenu.Vector.DeleteAndHealSelection": "アンカーポイントを削除", 135 | 136 | "fullscreenMenu.Text": "テキスト", 137 | "fullscreenMenu.Text.Bold": "太字", 138 | "fullscreenMenu.Text.Italic": "斜体", 139 | "fullscreenMenu.Text.Underline": "下線", 140 | "fullscreenMenu.Text.Strikethrough": "打ち消し線", 141 | "fullscreenMenu.Text.CreateLink": "リンクを生成", 142 | "fullscreenMenu.Text.BulletedList": "箇条書き", 143 | "fullscreenMenu.Text.NumberedList": "番号付リスト", 144 | 145 | "fullscreenMenu.Text.Alignment": "文字揃え", 146 | "fullscreenMenu.Text.Alignment.TextAlignLeft": "左揃え", 147 | "fullscreenMenu.Text.Alignment.TextAlignCenter": "中央揃え", 148 | "fullscreenMenu.Text.Alignment.TextAlignRight": "右揃え", 149 | "fullscreenMenu.Text.Alignment.TextAlignJustified": "均等揃え", 150 | "fullscreenMenu.Text.Alignment.TextAlignTop": "ボックスの上揃え", 151 | "fullscreenMenu.Text.Alignment.TextAlignMiddle": "ボックスの垂直方向中央揃え", 152 | "fullscreenMenu.Text.Alignment.TextAlignBottom": "ボックスの下揃え", 153 | 154 | "fullscreenMenu.Text.Adjust": "調整", 155 | "fullscreenMenu.Text.Adjust.IncreaseIndentation": "インデントを増やす", 156 | "fullscreenMenu.Text.Adjust.DecreaseIndentation": "インデントを減らす", 157 | "fullscreenMenu.Text.Adjust.IncreaseFontSize": "フォントサイズを大きく", 158 | "fullscreenMenu.Text.Adjust.DecreaseFontSize": "フォントサイズを小さく", 159 | "fullscreenMenu.Text.Adjust.IncreaseFontWeight": "フォントウェイトを大きく", 160 | "fullscreenMenu.Text.Adjust.DecreaseFontWeight": "フォントウェイトを小さく", 161 | "fullscreenMenu.Text.Adjust.IncreaseLineHeight": "行送りを増やす", 162 | "fullscreenMenu.Text.Adjust.DecreaseLineHeight": "行送りを減らす", 163 | "fullscreenMenu.Text.Adjust.IncreaseLetterSpacing": "文字の間隔を広げる", 164 | "fullscreenMenu.Text.Adjust.DecreaseLetterSpacing": "文字の間隔を詰める", 165 | 166 | "fullscreenMenu.Text.Case": "大文字小文字", 167 | "fullscreenMenu.Text.Case.OriginalCase": "大文字小文字の変換なし", 168 | "fullscreenMenu.Text.Case.Uppercase": "すべて大文字", 169 | "fullscreenMenu.Text.Case.Lowercase": "すべて小文字", 170 | 171 | "fullscreenMenu.Text.TextDirection": "Text direction", 172 | "fullscreenMenu.Text.TextDirection.LeftToRight": "Left to right", 173 | "fullscreenMenu.Text.TextDirection.RightToLeft": "Right to left", 174 | 175 | 176 | "fullscreenMenu.Arrange": "整列", 177 | "fullscreenMenu.Arrange.RoundToPixel": "ピクセルに合わせて配置", 178 | "fullscreenMenu.Arrange.AlignLeft": "水平方向左に整列", 179 | "fullscreenMenu.Arrange.AlignHorizontalCenters": "水平方向中央に整列", 180 | "fullscreenMenu.Arrange.AlignRight": "水平方向右に整列", 181 | "fullscreenMenu.Arrange.AlignTop": "垂直方向上に整列", 182 | "fullscreenMenu.Arrange.AlignVerticalCenters": "垂直方向中央に整列", 183 | "fullscreenMenu.Arrange.AlignBottom": "垂直方向下に整列", 184 | "fullscreenMenu.Arrange.TidyUp": "選択状態に応じて自動で整列", 185 | "fullscreenMenu.Arrange.PackHorizontal": "水平方向へ間隔なしで整列", 186 | "fullscreenMenu.Arrange.PackVertical": "垂直方向へ間隔なしで整列", 187 | "fullscreenMenu.Arrange.DistributeHorizontalSpacing": "水平方向へ等間隔に分布", 188 | "fullscreenMenu.Arrange.DistributeVerticalSpacing": "垂直方向へ等間隔に分布", 189 | "fullscreenMenu.Arrange.DistributeLeft": "左を基準に、水平方向へ分布", 190 | "fullscreenMenu.Arrange.DistributeHorizontalCenters": "中心を基準に、水平方向へ分布", 191 | "fullscreenMenu.Arrange.DistributeRight": "右を基準に、水平方向へ分布", 192 | "fullscreenMenu.Arrange.DistributeTop": "上を基準に、垂直方向へ分布", 193 | "fullscreenMenu.Arrange.DistributeVerticalCenters": "中心を基準に、垂直方向へ分布", 194 | "fullscreenMenu.Arrange.DistributeBottom": "下を基準に、垂直方向へ分布", 195 | 196 | "fullscreenMenu.Plugins": "プラグイン", 197 | "fullscreenMenu.Plugins.RunLastPlugin": "最後に使ったプラグインを実行", 198 | "fullscreenMenu.Plugins.ManagePlugins": "プラグインを管理", 199 | "fullscreenMenu.Plugins.BrowsePluginsInCommunity": "プラグインを探す", 200 | "fullscreenMenu.Plugins.BrowsePlugins": "Browse plugins", 201 | 202 | "fullscreenMenu.Widgets": "Widgets", 203 | "fullscreenMenu.Widgets.BrowseWidgets": "Browse widgets", 204 | "fullscreenMenu.Widgets.SelectAllWidgets": "Select all widgets", 205 | 206 | "fullscreenMenu.Integrations": "連携", 207 | "fullscreenMenu.Integrations.Dribbble": "Dribbble", 208 | 209 | "fullscreenMenu.Preferences": "環境設定", 210 | "fullscreenMenu.Preferences.SnapToGeometry": "ジオメトリにスナップ", 211 | "fullscreenMenu.Preferences.SnapToObjects": "オブジェクトにスナップ", 212 | "fullscreenMenu.Preferences.SnapToDotGrid": "Snap to dot grid", 213 | "fullscreenMenu.Preferences.SnapToPixelGrid": "ピクセルグリッドにスナップ", 214 | "fullscreenMenu.Preferences.KeepToolSelectedAfterUse": "使用したツールを保持する", 215 | "fullscreenMenu.Preferences.HighlightLayersOnHover": "ホバーでレイヤーをハイライト表示", 216 | "fullscreenMenu.Preferences.RenameDuplicatedLayers": "複製したレイヤーをリネーム", 217 | "fullscreenMenu.Preferences.ShowDimensionsOnObjects": "オブジェクトのサイズを表示", 218 | "fullscreenMenu.Preferences.HideCanvasUIDuringChanges": "変形中にキャンバス表示を非表示", 219 | "fullscreenMenu.Preferences.KeyboardZoomsIntoSelection": "選択対象にキーボードズーム", 220 | "fullscreenMenu.Preferences.SubstituteSmartQuotes": "スマートクォート( “ ” )に変換入力", 221 | "fullscreenMenu.Preferences.ShowGoogleFonts": "Googleフォントを表示", 222 | "fullscreenMenu.Preferences.FlipObjectsWhileResizing": "サイズ変更中にオブジェクトを反転", 223 | "fullscreenMenu.Preferences.InvertZoomDirection": "ホイールでのズームの方向を反転", 224 | "fullscreenMenu.Preferences.UseNumberKeysForOpacity": "テンキーで不透明度を変更", 225 | "fullscreenMenu.Preferences.ShakeCursorForHighFive": "Shake cursor for high five", 226 | "fullscreenMenu.Preferences.OpenLinksInDesktopApp": "Open links in desktop app", 227 | 228 | "fullscreenMenu.Preferences.Theme": "Theme", 229 | "fullscreenMenu.Preferences.Theme.Light": "Light", 230 | "fullscreenMenu.Preferences.Theme.Dark": "Dark", 231 | "fullscreenMenu.Preferences.SystemTheme": "System theme", 232 | 233 | "fullscreenMenu.Preferences.NudgeAmount": "テンキー操作の値", 234 | "fullscreenMenu.Preferences.ShowTemplatesForNewFiles": "Show templates for new files", 235 | 236 | "fullscreenMenu.Libraries": "ライブラリ", 237 | 238 | "fullscreenMenu.GetDesktopApp": "Get desktop app", 239 | "fullscreenMenu.OpenInDesktopApp": "Open in desktop app", 240 | 241 | "fullscreenMenu.HelpAndAccount": "ヘルプとアカウント", 242 | "fullscreenMenu.HelpAndAccount.HelpPage": "ヘルプページ", 243 | "fullscreenMenu.HelpAndAccount.KeyboardShortcuts": "キーボードショートカット", 244 | "fullscreenMenu.HelpAndAccount.SupportForum": "サポートフォーラム", 245 | "fullscreenMenu.HelpAndAccount.VideoTutorials": "ビデオチュートリアル", 246 | "fullscreenMenu.HelpAndAccount.ReleaseNotes": "リリースノート", 247 | "fullscreenMenu.HelpAndAccount.OpenFontSettings": "フォント設定を開く", 248 | "fullscreenMenu.HelpAndAccount.LegalSummary": "利用規約", 249 | "fullscreenMenu.HelpAndAccount.AccountSettings": "アカウント設定", 250 | "fullscreenMenu.HelpAndAccount.LogOut": "ログアウト", 251 | 252 | "fullscreenMenu.PublishStylesAndComponents": "スタイルとコンポーネントを公開", 253 | "fullscreenMenu.Rename": "名前を変更", 254 | "fullscreenMenu.MoveToProject": "プロジェクトへ移動", 255 | "fullscreenMenu.Delete": "削除", 256 | "fullscreenMenu.ZoomTo50": "50% にズーム", 257 | "fullscreenMenu.ZoomTo200": "200% にズーム", 258 | "fullscreenMenu.Disabled": "無効", 259 | 260 | "fullscreenMenu.Tooltip.MainMenu": "Main menu", 261 | "fullscreenMenu.Tooltip.MoveTools": "移動ツール", 262 | "fullscreenMenu.Tooltip.SetToolDefault": "移動 V", 263 | "fullscreenMenu.Tooltip.SetToolScale": "拡大・縮小 K", 264 | "fullscreenMenu.Tooltip.RegionTools": "リージョンツール", 265 | "fullscreenMenu.Tooltip.SetToolFrame": "フレーム F", 266 | "fullscreenMenu.Tooltip.SetToolSlice": "スライス S", 267 | "fullscreenMenu.Tooltip.ShapeTools": "シェイプツール", 268 | "fullscreenMenu.Tooltip.SetToolRectangle": "長方形 R", 269 | "fullscreenMenu.Tooltip.SetToolLine": "直線 L", 270 | "fullscreenMenu.Tooltip.SetToolArrow": "矢印 Shift+L", 271 | "fullscreenMenu.Tooltip.SetToolEllipse": "楕円 O", 272 | "fullscreenMenu.Tooltip.SetToolRegularPolygon": "多角形", 273 | "fullscreenMenu.Tooltip.SetToolStar": "スター", 274 | "fullscreenMenu.Tooltip.DrawingTools": "ドローツール", 275 | "fullscreenMenu.Tooltip.SetToolPen": "ペン P", 276 | "fullscreenMenu.Tooltip.SetToolPencil": "鉛筆 Shift+P", 277 | "fullscreenMenu.Tooltip.SetToolText": "テキスト T", 278 | "fullscreenMenu.Tooltip.SetToolHand": "手のひらツール H", 279 | "fullscreenMenu.Tooltip.SetToolComments": "コメントの追加 C", 280 | "fullscreenMenu.Tooltip.Present": "プレゼンテーション", 281 | "fullscreenMenu.Tooltip.CreateComponent": "Create component Ctrl+Alt+K", 282 | "fullscreenMenu.Tooltip.UseAsMask": "Use as mask Ctrl+Alt+M", 283 | "fullscreenMenu.Tooltip.BooleanGroups": "Boolean groups", 284 | "fullscreenMenu.Tooltip.UnionSelection": "Union selection", 285 | "fullscreenMenu.Tooltip.SubtractSelection": "Subtract selection", 286 | "fullscreenMenu.Tooltip.IntersectSelection": "Intersect selection", 287 | "fullscreenMenu.Tooltip.ExcludeSelection": "Exclude selection", 288 | 289 | 290 | "toolbarView.fileName.folderName.Drafts": "Drafts", 291 | 292 | "toolbarView.moveFlyout.flyout.toolDefault": "移動", 293 | "toolbarView.moveFlyout.flyout.toolScale": "拡大・縮小", 294 | 295 | "toolbarView.regionFlyout.flyout.toolFrame": "フレーム'", 296 | "toolbarView.regionFlyout.flyout.toolSlice": "スライス", 297 | 298 | "toolbarView.shapeFlyout.flyout.toolShapeRectangle": "長方形", 299 | "toolbarView.shapeFlyout.flyout.toolShapeLine": "直線", 300 | "toolbarView.shapeFlyout.flyout.toolShapeArrow": "矢印", 301 | "toolbarView.shapeFlyout.flyout.toolShapeEllipse": "楕円", 302 | "toolbarView.shapeFlyout.flyout.toolShapePolygon": "多角形", 303 | "toolbarView.shapeFlyout.flyout.toolShapeStar": "スター", 304 | "toolbarView.shapeFlyout.flyout.toolPlaceImage": "画像を配置", 305 | 306 | "toolbarView.penFlyout.flyout.toolPen": "ペン", 307 | "toolbarView.penFlyout.flyout.toolPencil": "鉛筆", 308 | 309 | "toolbarView.booleanFlyout.flyout.toolBooleanUnion": "Union selection", 310 | "toolbarView.booleanFlyout.flyout.toolBooleanSubtract": "Subtract selection", 311 | "toolbarView.booleanFlyout.flyout.toolBooleanIntersect": "Intersect selection", 312 | "toolbarView.booleanFlyout.flyout.toolBooleatoolBooleanXornUnion": "Exclude selection", 313 | "toolbarView.booleanFlyout.flyout.toolFlatten": "Flatten selection", 314 | 315 | "toolbarView.Share": "共有", 316 | 317 | "toolbarView.CursorChat": "Cursor chat", 318 | "toolbarView.Stamp": "Stamp", 319 | "toolbarView.Emote": "Emote", 320 | 321 | "toolbarView.Overflow.Emote": "Emote", 322 | "toolbarView.Overflow.Stamp": "Stamp", 323 | "toolbarView.Overflow.CursorChat": "Cursor chat", 324 | "toolbarView.Overflow.HighFive": "High five", 325 | "toolbarView.Overflow.Timer": "Timer", 326 | 327 | "toolbarView.Tooltip.Collaborate": "Collaborate", 328 | "toolbarView.Tooltip.ZoomOut": "Zoom out Ctrl+-", 329 | "toolbarView.Tooltip.ZoomIn": "Zoom in Ctrl+-", 330 | "toolbarView.Tooltip.ZoomOrViewOptions": "Zoom/view options", 331 | 332 | 333 | "delightfulToolbar.MoveTool": "移動ツール V", 334 | "delightfulToolbar.HandTool": "手のひらツール H", 335 | "delightfulToolbar.Marker": "Marker M", 336 | "delightfulToolbar.Highlighter": "Highlighter Shift+M", 337 | "delightfulToolbar.Eraser": "Eraser Shift+Backspace", 338 | "delightfulToolbar.Thin": "Thin", 339 | "delightfulToolbar.Thick": "Thick", 340 | "delightfulToolbar.Charcoal": "Charcoal", 341 | "delightfulToolbar.Red": "Red", 342 | "delightfulToolbar.Yellow": "Yellow", 343 | "delightfulToolbar.Green": "Green", 344 | "delightfulToolbar.Blue": "Blue", 345 | "delightfulToolbar.Violet": "Violet", 346 | "delightfulToolbar.Brown": "Brown", 347 | "delightfulToolbar.White": "White", 348 | "delightfulToolbar.Square": "Square R", 349 | "delightfulToolbar.Ellipse": "Ellipse O", 350 | "delightfulToolbar.RoundedRectangle": "Rounded rectangle", 351 | "delightfulToolbar.Diamond": "Diamond", 352 | "delightfulToolbar.TriangleUp": "Triangle", 353 | "delightfulToolbar.TriangleDown": "Triangle", 354 | "delightfulToolbar.ParallelogramRight": "Parallelogram", 355 | "delightfulToolbar.ParallelogramLeft": "Parallelogram", 356 | "delightfulToolbar.Cylinder": "Cylinder", 357 | "delightfulToolbar.HorizontalCylinder": "Horizontal cylinder", 358 | "delightfulToolbar.File": "File", 359 | "delightfulToolbar.Folder": "Folder", 360 | "delightfulToolbar.Options.Square": "Square", 361 | "delightfulToolbar.Options.Ellipse": "Ellipse", 362 | "delightfulToolbar.Options.RoundedRectangle": "Rounded rectangle", 363 | "delightfulToolbar.Options.Diamond": "Diamond", 364 | "delightfulToolbar.Options.Triangle": "Triangle", 365 | "delightfulToolbar.Options.DownwardPointingTriangle": "Downward-pointing triangle", 366 | "delightfulToolbar.Options.RightLeaningParallelogram": "Right-leaning parallelogram", 367 | "delightfulToolbar.Options.LeftLeaningParallelogram": "Left-leaning parallelogram", 368 | "delightfulToolbar.Options.Cylinder": "Cylinder", 369 | "delightfulToolbar.Options.HorizontalCylinder": "Horizontal cylinder", 370 | "delightfulToolbar.Options.File": "File", 371 | "delightfulToolbar.Options.Folder": "Folder", 372 | "delightfulToolbar.Sticky": "Sticky note S", 373 | "delightfulToolbar.Text": "Text T", 374 | "delightfulToolbar.Connector": "Connector X", 375 | "delightfulToolbar.Line": "Line L", 376 | "delightfulToolbar.Options.Connector": "Connector", 377 | "delightfulToolbar.Options.StraightLine": "Straight line", 378 | "delightfulToolbar.Stamp": "Stamp E", 379 | "delightfulToolbar.More": "Widgets,stickers,templates and more", 380 | 381 | 382 | "contextMenu.Copy": "コピー", 383 | "contextMenu.Paste": "ペースト", 384 | "contextMenu.PasteHere": "Paste here", 385 | 386 | "contextMenu.CopyOrPasteAs": "Copy/Paste as", 387 | "contextMenu.CopyOrPasteAs.CopyLink": "リンクをコピー", 388 | 389 | "contextMenu.SelectLayer": "レイヤー選択", 390 | "contextMenu.MoveToPage": "ページへ移動", 391 | 392 | "contextMenu.Ungroup": "グループ解除", 393 | "contextMenu.Flatten": "複合パスに拡張", 394 | 395 | "contextMenu.ShowOrHide": "表示/非表示", 396 | "contextMenu.LockOrUnlock": "ロック/ロック解除", 397 | 398 | "contextMenu.ShowOrHideComments": "Show/Hide comments", 399 | 400 | 401 | "pagesPanel.Sidebar.Tab": "Layers", 402 | "pagesPanel.Sidebar.AssetsTab": "Assets", 403 | 404 | "pagesPanel.Sidebar.Pages": "Pages", 405 | "pagesPanel.Sidebar.Pages.CopyLinkToPage": "ページへのリンクをコピー", 406 | "pagesPanel.Sidebar.Pages.DeletePage": "ページを削除", 407 | "pagesPanel.Sidebar.Pages.RenamePage": "ページ名を変更", 408 | "pagesPanel.Sidebar.Pages.DuplicatePage": "ページを複製", 409 | 410 | "pagesPanel.Sidebar.AddNewPage": "Add new page", 411 | "pagesPanel.Sidebar.Search": "検索", 412 | "pagesPanel.Sidebar.ShowAsList": "Show as list", 413 | "pagesPanel.Sidebar.ShowAsGrid": "Show as grid", 414 | "pagesPanel.Sidebar.TeamLibrary": "チームライブラリ", 415 | 416 | "pagesPanel.Sidebar.Components": "コンポーネント", 417 | "pagesPanel.Sidebar.Components.FirstInfoText": "To create a component, select a layer and click the \"Create component\" button in the toolbar.", 418 | "pagesPanel.Sidebar.Components.FirstInfoLink": "Learn more", 419 | "pagesPanel.Sidebar.Components.SecondInfoText": "Use libraries for quick access to components from other files.", 420 | "pagesPanel.Sidebar.Components.SecondInfoLink": "Explore libraries...", 421 | 422 | 423 | "propertiesPanel.TabsHeader.Design": "デザイン", 424 | "propertiesPanel.TabsHeader.Prototype": "プロトタイプ", 425 | "propertiesPanel.TabsHeader.Inspect": "検査", 426 | 427 | 428 | "navbar.Community": "Community", 429 | "navbar.Search": "Search files, teams, or people", 430 | "navbar.Notifications": "Notifications", 431 | "navbar.InternalProfile": "Internal profile", 432 | "navbar.Settings": "Settings", 433 | "navbar.AddAccount": "Add account", 434 | 435 | 436 | "sidebar.Recents": "Recents", 437 | "sidebar.Drafts": "Drafts", 438 | "sidebar.ExploreCommunity": "Explore community", 439 | "sidebar.TeamProject": "Team project", 440 | "sidebar.CreateNewTeam": "Create new team", 441 | 442 | 443 | "fileBrowserView.RecentlyViewed": "Recently viewed", 444 | "fileBrowserView.Drafts": "Drafts", 445 | "fileBrowserView.Deleted": "Deleted", 446 | "fileBrowserView.NewDesignFile": "新規作成", 447 | "fileBrowserView.NewDesignFile.Desc": "Design and prototype", 448 | "fileBrowserView.NewFigJamFile": "FigJam 新規作成", 449 | "fileBrowserView.NewFigJamFile.Desc": "Whiteboard and diagram", 450 | "fileBrowserView.ImportFile": "Import file", 451 | "fileBrowserView.ImportFile.Desc": "Figma, Sketch, and image files", 452 | 453 | "fileBrowserView.Filter": "Filter:", 454 | "fileBrowserView.Filter.Select.AllFiles": "All files", 455 | "fileBrowserView.Filter.Select.DesignFiles": "Design files", 456 | "fileBrowserView.Filter.Select.FigJamFiles": "FigJam Files", 457 | "fileBrowserView.Filter.Select.Prototypes": "Prototypes", 458 | 459 | "fileBrowserView.Sort": "Sort:", 460 | "fileBrowserView.Sort.Select.SortBy": "Sort by", 461 | "fileBrowserView.Sort.Select.Alphabetical": "Alphabetical", 462 | "fileBrowserView.Sort.Select.DateCreated": "Date created", 463 | "fileBrowserView.Sort.Select.LastViewed": "Last viewed", 464 | "fileBrowserView.Sort.Select.LastModified": "Last modified", 465 | "fileBrowserView.Sort.Select.Order": "Order", 466 | "fileBrowserView.Sort.Select.OldestFirst": "Oldest first", 467 | "fileBrowserView.Sort.Select.NewestFirst": "Newest first", 468 | 469 | "fileBrowserView.ShowAsGrid": "Show as grid", 470 | "fileBrowserView.ShowAsList": "Show as list", 471 | 472 | "fileBrowserView.ContextMenu.ShowInProject": "Show in project", 473 | "fileBrowserView.ContextMenu.Open": "Open", 474 | "fileBrowserView.ContextMenu.OpenInNewTab": "Open in new tab", 475 | "fileBrowserView.ContextMenu.CopyLink": "Copy link", 476 | "fileBrowserView.ContextMenu.AddToYourFavorites": "Add to your favorites", 477 | "fileBrowserView.ContextMenu.Share": "Share", 478 | "fileBrowserView.ContextMenu.Duplicate": "Duplicate", 479 | "fileBrowserView.ContextMenu.Rename": "Rename", 480 | "fileBrowserView.ContextMenu.Delete": "Delete", 481 | "fileBrowserView.ContextMenu.RemoveFromRecent": "Remove from recent", 482 | } -------------------------------------------------------------------------------- /src/locale/lang/zh-cn.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | "fullscreenMenu.BackToFiles": "返回文件列表", 3 | 4 | "fullscreenMenu.QuickActions": "快速操作…", 5 | 6 | "fullscreenMenu.File": "文件", 7 | "fullscreenMenu.File.NewDesignFile": "新建设计文件", 8 | "fullscreenMenu.File.NewFigJamFile": "新建 FigJam 文件", 9 | "fullscreenMenu.File.NewFromSketchFile": "从 Sketch 文件新建…", 10 | "fullscreenMenu.File.PlaceImage": "导入图片…", 11 | "fullscreenMenu.File.ImportFromCSV": "从 CSV 中导入…", 12 | "fullscreenMenu.File.SaveLocalCopy": "保存本地副本…", 13 | "fullscreenMenu.File.SaveToVersionHistory": "保存至版本历史…", 14 | "fullscreenMenu.File.ShowVersionHistory": "查看版本历史", 15 | "fullscreenMenu.File.Export": "导出…", 16 | "fullscreenMenu.File.ExportFramesToPDF": "导出画框为 PDF…", 17 | "fullscreenMenu.File.ExportAs": "导出为…", 18 | "fullscreenMenu.File.ExportSelection": "导出选择…", 19 | 20 | "fullscreenMenu.Edit": "编辑", 21 | "fullscreenMenu.Edit.Undo": "撤销", 22 | "fullscreenMenu.Edit.Redo": "重做", 23 | 24 | "fullscreenMenu.Edit.CopyAs": "复制为", 25 | "fullscreenMenu.Edit.CopyAs.CopyAsText": "复制为文本", 26 | "fullscreenMenu.Edit.CopyAs.CopyAsCSS": "复制为 CSS", 27 | "fullscreenMenu.Edit.CopyAs.CopyAsSVG": "复制为 SVG", 28 | "fullscreenMenu.Edit.CopyAs.CopyAsPNG": "复制为 PNG", 29 | 30 | "fullscreenMenu.Edit.PasteOverSelection": "粘贴至所选位置", 31 | "fullscreenMenu.Edit.PasteToReplace": "粘贴替换", 32 | "fullscreenMenu.Edit.Duplicate": "创建副本", 33 | "fullscreenMenu.Edit.Delete": "删除", 34 | "fullscreenMenu.Edit.SetDefaultProperties": "设置默认属性", 35 | "fullscreenMenu.Edit.CopyProperties": "复制属性", 36 | "fullscreenMenu.Edit.PasteProperties": "粘贴属性", 37 | "fullscreenMenu.Edit.PickColor": "吸取颜色", 38 | "fullscreenMenu.Edit.SelectAll": "全选", 39 | "fullscreenMenu.Edit.SelectNone": "取消选择", 40 | "fullscreenMenu.Edit.SelectInverse": "反选", 41 | "fullscreenMenu.Edit.SelectAllMatchingLayers": "选择全部匹配的图层", 42 | "fullscreenMenu.Edit.SelectAllWithSameProperties": "选择全部相同属性", 43 | "fullscreenMenu.Edit.SelectAllWithSameFill": "选择全部相同填充颜色", 44 | "fullscreenMenu.Edit.SelectAllWithSameStroke": "选择全部相同描边", 45 | "fullscreenMenu.Edit.SelectAllWithSameEffect": "选择全部相同效果", 46 | "fullscreenMenu.Edit.SelectAllWithSameTextProperties": "选择全部相同文本属性", 47 | "fullscreenMenu.Edit.SelectAllWithSameFont": "选择全部相同字体", 48 | "fullscreenMenu.Edit.SelectAllWithSameInstance": "选择全部相同组件实例", 49 | "fullscreenMenu.Edit.SelectAllWithSameVariant": "选择全部相同变体", 50 | 51 | "fullscreenMenu.View": "查看", 52 | "fullscreenMenu.View.PixelGrid": "像素网格", 53 | "fullscreenMenu.View.LayoutGrids": "布局网格", 54 | "fullscreenMenu.View.Rulers": "标尺", 55 | "fullscreenMenu.View.ShowSlices": "显示切片", 56 | "fullscreenMenu.View.Comments": "评论", 57 | "fullscreenMenu.View.Outlines": "轮廓", 58 | "fullscreenMenu.View.PixelPreview": "像素预览", 59 | "fullscreenMenu.View.MaskOutlines": "蒙版轮廓", 60 | "fullscreenMenu.View.FrameOutlines": "画框轮廓", 61 | "fullscreenMenu.View.ShowDotGrid": "显示点状网格", 62 | "fullscreenMenu.View.ResourceUse": "资源使用情况", 63 | "fullscreenMenu.View.ShowOrHideUI": "显示/隐藏界面", 64 | "fullscreenMenu.View.MultiplayerCursors": "多人鼠标指针", 65 | 66 | "fullscreenMenu.View.Panels": "面板", 67 | "fullscreenMenu.View.Panels.OpenLayersPanel": "打开图层面板", 68 | "fullscreenMenu.View.Panels.OpenDesignPanel": "打开设计面板", 69 | "fullscreenMenu.View.Panels.OpenPrototypePanel": "打开原型面板", 70 | "fullscreenMenu.View.Panels.OpenInspectPanel": "打开检查面板", 71 | "fullscreenMenu.View.Panels.ShowLeftSidebar": "显示左侧边栏", 72 | 73 | "fullscreenMenu.View.ZoomIn": "放大", 74 | "fullscreenMenu.View.ZoomOut": "缩小", 75 | "fullscreenMenu.View.ZoomTo100%": "缩放至 100%", 76 | "fullscreenMenu.View.ZoomToFit": "缩放至适应大小", 77 | "fullscreenMenu.View.ZoomToSelection": "缩放至选中范围", 78 | "fullscreenMenu.View.PreviousPage": "上一页", 79 | "fullscreenMenu.View.NextPage": "下一页", 80 | "fullscreenMenu.View.ZoomToPreviousFrame": "缩放至上一个画框", 81 | "fullscreenMenu.View.ZoomToNextFrame": "缩放至下一个画框", 82 | "fullscreenMenu.View.FindPreviousFrame": "查找上一个画框", 83 | "fullscreenMenu.View.FindNextFrame": "查找下一个画框", 84 | 85 | "fullscreenMenu.Object": "对象", 86 | "fullscreenMenu.Object.GroupSelection": "对所选项进行编组", 87 | "fullscreenMenu.Object.CreateSection": "创建部件", 88 | "fullscreenMenu.Object.FrameSelection": "选择画框", 89 | "fullscreenMenu.Object.UngroupSelection": "取消对所选项进行编组", 90 | "fullscreenMenu.Object.UseAsMask": "设为蒙版", 91 | "fullscreenMenu.Object.RestoreDefaultThumbnail": "恢复默认封面", 92 | "fullscreenMenu.Object.SetAsThumbnail": "设为封面", 93 | "fullscreenMenu.Object.AddAutoLayout": "添加自动布局", 94 | "fullscreenMenu.Object.CreateComponent": "创建组件", 95 | "fullscreenMenu.Object.ResetAllChanges": "重置所有更改", 96 | "fullscreenMenu.Object.ResetAllOverrides": "重置所有覆盖", 97 | "fullscreenMenu.Object.DetachInstance": "分离实例", 98 | 99 | "fullscreenMenu.Object.MainComponent": "组件母版", 100 | "fullscreenMenu.Object.MainComponent.GoToMainComponent": "转到组件母版", 101 | "fullscreenMenu.Object.MainComponent.PushOverridesToMainComponent": "覆盖组件母版", 102 | "fullscreenMenu.Object.MainComponent.RestoreMainComponent": "恢复组件母版", 103 | 104 | "fullscreenMenu.Object.BringToFront": "移到顶层", 105 | "fullscreenMenu.Object.BringForward": "上移一层", 106 | "fullscreenMenu.Object.SendBackward": "下移一层", 107 | "fullscreenMenu.Object.SendToBack": "移到底层", 108 | "fullscreenMenu.Object.flipHorizontal": "水平翻转", 109 | "fullscreenMenu.Object.flipVertical": "垂直翻转", 110 | "fullscreenMenu.Object.Rotate180": "旋转 180°", 111 | "fullscreenMenu.Object.Rotate90Left": "向左旋转 90°", 112 | "fullscreenMenu.Object.Rotate90Right": "向右旋转 90°", 113 | "fullscreenMenu.Object.FlattenSelection": "拼合所选项", 114 | "fullscreenMenu.Object.OutlineStroke": "轮廓化描边", 115 | 116 | "fullscreenMenu.Object.BooleanGroups": "布尔组合", 117 | "fullscreenMenu.Object.BooleanGroups.UnionSelection": "连集所选项", 118 | "fullscreenMenu.Object.BooleanGroups.SubtractSelection": "减去所选项", 119 | "fullscreenMenu.Object.BooleanGroups.IntersectSelection": "交集所选项", 120 | "fullscreenMenu.Object.BooleanGroups.ExcludeSelection": "差集所选项", 121 | 122 | "fullscreenMenu.Object.RasterizeSelection": "像素化所选项", 123 | "fullscreenMenu.Object.ShowOrHideSelection": "显示/隐藏所选项", 124 | "fullscreenMenu.Object.LockOrUnlockSelection": "锁定/解锁所选项", 125 | "fullscreenMenu.Object.HideOtherLayers": "隐藏其余图层", 126 | "fullscreenMenu.Object.CollapseLayers": "折叠图层", 127 | "fullscreenMenu.Object.RemoveFill": "移除填充", 128 | "fullscreenMenu.Object.RemoveStroke": "移除描边", 129 | "fullscreenMenu.Object.SwapFillAndStroke": "交换填充和描边", 130 | 131 | "fullscreenMenu.Vector": "矢量", 132 | "fullscreenMenu.Vector.JoinSelection": "连接所选项", 133 | "fullscreenMenu.Vector.SmoothJoinSelection": "平滑连接所选项", 134 | "fullscreenMenu.Vector.DeleteAndHealSelection": "删除和修复所选项", 135 | 136 | "fullscreenMenu.Text": "文本", 137 | "fullscreenMenu.Text.Bold": "加粗", 138 | "fullscreenMenu.Text.Italic": "斜体", 139 | "fullscreenMenu.Text.Underline": "下划线", 140 | "fullscreenMenu.Text.Strikethrough": "删除线", 141 | "fullscreenMenu.Text.CreateLink": "创建链接", 142 | "fullscreenMenu.Text.BulletedList": "无序列表", 143 | "fullscreenMenu.Text.NumberedList": "有序列表", 144 | 145 | "fullscreenMenu.Text.Alignment": "对齐", 146 | "fullscreenMenu.Text.Alignment.TextAlignLeft": "左对齐", 147 | "fullscreenMenu.Text.Alignment.TextAlignCenter": "水平居中", 148 | "fullscreenMenu.Text.Alignment.TextAlignRight": "右对齐", 149 | "fullscreenMenu.Text.Alignment.TextAlignJustified": "两端对齐", 150 | "fullscreenMenu.Text.Alignment.TextAlignTop": "上对齐", 151 | "fullscreenMenu.Text.Alignment.TextAlignMiddle": "垂直居中", 152 | "fullscreenMenu.Text.Alignment.TextAlignBottom": "下对齐", 153 | 154 | "fullscreenMenu.Text.Adjust": "调整", 155 | "fullscreenMenu.Text.Adjust.IncreaseIndentation": "增大缩进", 156 | "fullscreenMenu.Text.Adjust.DecreaseIndentation": "减小缩进", 157 | "fullscreenMenu.Text.Adjust.IncreaseFontSize": "增大字号", 158 | "fullscreenMenu.Text.Adjust.DecreaseFontSize": "减小字号", 159 | "fullscreenMenu.Text.Adjust.IncreaseFontWeight": "增大字重", 160 | "fullscreenMenu.Text.Adjust.DecreaseFontWeight": "减小字重", 161 | "fullscreenMenu.Text.Adjust.IncreaseLineHeight": "增大行高", 162 | "fullscreenMenu.Text.Adjust.DecreaseLineHeight": "减小行高", 163 | "fullscreenMenu.Text.Adjust.IncreaseLetterSpacing": "增大字距", 164 | "fullscreenMenu.Text.Adjust.DecreaseLetterSpacing": "减小字距", 165 | 166 | "fullscreenMenu.Text.Case": "大小写", 167 | "fullscreenMenu.Text.Case.OriginalCase": "初始大小写", 168 | "fullscreenMenu.Text.Case.Uppercase": "大写", 169 | "fullscreenMenu.Text.Case.Lowercase": "小写", 170 | 171 | "fullscreenMenu.Text.TextDirection": "文本方向", 172 | "fullscreenMenu.Text.TextDirection.LeftToRight": "从左到右", 173 | "fullscreenMenu.Text.TextDirection.RightToLeft": "从右到左", 174 | 175 | 176 | "fullscreenMenu.Arrange": "排列", 177 | "fullscreenMenu.Arrange.RoundToPixel": "对齐像素", 178 | "fullscreenMenu.Arrange.AlignLeft": "左对齐", 179 | "fullscreenMenu.Arrange.AlignHorizontalCenters": "水平居中", 180 | "fullscreenMenu.Arrange.AlignRight": "右对齐", 181 | "fullscreenMenu.Arrange.AlignTop": "上对齐", 182 | "fullscreenMenu.Arrange.AlignVerticalCenters": "垂直居中", 183 | "fullscreenMenu.Arrange.AlignBottom": "下对齐", 184 | "fullscreenMenu.Arrange.TidyUp": "整理", 185 | "fullscreenMenu.Arrange.PackHorizontal": "水平堆叠", 186 | "fullscreenMenu.Arrange.PackVertical": "垂直堆叠", 187 | "fullscreenMenu.Arrange.DistributeHorizontalSpacing": "水平间距均分", 188 | "fullscreenMenu.Arrange.DistributeVerticalSpacing": "垂直间距均分", 189 | "fullscreenMenu.Arrange.DistributeLeft": "向左均分", 190 | "fullscreenMenu.Arrange.DistributeHorizontalCenters": "水平中心均分", 191 | "fullscreenMenu.Arrange.DistributeRight": "向右均分", 192 | "fullscreenMenu.Arrange.DistributeTop": "向上均分", 193 | "fullscreenMenu.Arrange.DistributeVerticalCenters": "垂直中心均分", 194 | "fullscreenMenu.Arrange.DistributeBottom": "向下均分", 195 | 196 | "fullscreenMenu.Plugins": "插件", 197 | "fullscreenMenu.Plugins.RunLastPlugin": "运行上一个插件", 198 | "fullscreenMenu.Plugins.ManagePlugins": "管理插件…", 199 | "fullscreenMenu.Plugins.BrowsePluginsInCommunity": "在社区中浏览插件", 200 | "fullscreenMenu.Plugins.BrowsePlugins": "浏览插件", 201 | 202 | "fullscreenMenu.Widgets": "小部件", 203 | "fullscreenMenu.Widgets.BrowseWidgets": "浏览小部件", 204 | "fullscreenMenu.Widgets.SelectAllWidgets": "选择所有小部件", 205 | 206 | "fullscreenMenu.Integrations": "集成", 207 | "fullscreenMenu.Integrations.Dribbble": "Dribbble", 208 | 209 | "fullscreenMenu.Preferences": "偏好设置", 210 | "fullscreenMenu.Preferences.SnapToGeometry": "对齐到形状", 211 | "fullscreenMenu.Preferences.SnapToObjects": "对齐到对象", 212 | "fullscreenMenu.Preferences.SnapToDotGrid": "对齐到点状网格", 213 | "fullscreenMenu.Preferences.SnapToPixelGrid": "对齐到像素", 214 | "fullscreenMenu.Preferences.KeepToolSelectedAfterUse": "使用后保持工具选择", 215 | "fullscreenMenu.Preferences.HighlightLayersOnHover": "突出显示悬停图层", 216 | "fullscreenMenu.Preferences.RenameDuplicatedLayers": "重命名已创建的副本图层", 217 | "fullscreenMenu.Preferences.ShowDimensionsOnObjects": "在对象上显示尺寸", 218 | "fullscreenMenu.Preferences.HideCanvasUIDuringChanges": "在改动期间隐藏画布 UI", 219 | "fullscreenMenu.Preferences.KeyboardZoomsIntoSelection": "键盘缩放所选项", 220 | "fullscreenMenu.Preferences.SubstituteSmartQuotes": "智能引号替换", 221 | "fullscreenMenu.Preferences.ShowGoogleFonts": "显示谷歌字体", 222 | "fullscreenMenu.Preferences.FlipObjectsWhileResizing": "调整大小时翻转对象", 223 | "fullscreenMenu.Preferences.InvertZoomDirection": "反转缩放方向", 224 | "fullscreenMenu.Preferences.UseNumberKeysForOpacity": "使用数字控制透明度", 225 | "fullscreenMenu.Preferences.ShakeCursorForHighFive": "摇动光标进行挥手", 226 | "fullscreenMenu.Preferences.OpenLinksInDesktopApp": "在桌面应用打开链接", 227 | 228 | "fullscreenMenu.Preferences.Theme": "主题", 229 | "fullscreenMenu.Preferences.Theme.Light": "浅色", 230 | "fullscreenMenu.Preferences.Theme.Dark": "深色", 231 | "fullscreenMenu.Preferences.SystemTheme": "系统主题", 232 | 233 | "fullscreenMenu.Preferences.NudgeAmount": "微调量…", 234 | "fullscreenMenu.Preferences.ShowTemplatesForNewFiles": "显示新文件的模版", 235 | 236 | "fullscreenMenu.Libraries": "组件库", 237 | 238 | "fullscreenMenu.GetDesktopApp": "下载桌面版应用", 239 | "fullscreenMenu.OpenInDesktopApp": "在桌面应用中打开", 240 | 241 | "fullscreenMenu.HelpAndAccount": "帮助和账户", 242 | "fullscreenMenu.HelpAndAccount.HelpPage": "帮助页面", 243 | "fullscreenMenu.HelpAndAccount.KeyboardShortcuts": "键盘快捷键", 244 | "fullscreenMenu.HelpAndAccount.SupportForum": "支持论坛", 245 | "fullscreenMenu.HelpAndAccount.VideoTutorials": "视频教程", 246 | "fullscreenMenu.HelpAndAccount.ReleaseNotes": "版本说明", 247 | "fullscreenMenu.HelpAndAccount.OpenFontSettings": "打开字体设置", 248 | "fullscreenMenu.HelpAndAccount.LegalSummary": "法律摘要", 249 | "fullscreenMenu.HelpAndAccount.AccountSettings": "账号设置", 250 | "fullscreenMenu.HelpAndAccount.LogOut": "退出", 251 | 252 | "fullscreenMenu.PublishStylesAndComponents": "发布样式和组件", 253 | "fullscreenMenu.Rename": "重命名", 254 | "fullscreenMenu.MoveToProject": "移动到项目…", 255 | "fullscreenMenu.Delete": "删除…", 256 | "fullscreenMenu.ZoomTo50": "缩放至 50%", 257 | "fullscreenMenu.ZoomTo200": "缩放至 200%", 258 | "fullscreenMenu.Disabled": "禁用", 259 | 260 | "fullscreenMenu.Tooltip.MainMenu": "主菜单", 261 | "fullscreenMenu.Tooltip.MoveTools": "移动工具", 262 | "fullscreenMenu.Tooltip.SetToolDefault": "移动 V", 263 | "fullscreenMenu.Tooltip.SetToolScale": "缩放 K", 264 | "fullscreenMenu.Tooltip.RegionTools": "区域工具", 265 | "fullscreenMenu.Tooltip.SetToolFrame": "画框 F", 266 | "fullscreenMenu.Tooltip.SetToolSlice": "切片 S", 267 | "fullscreenMenu.Tooltip.ShapeTools": "形状工具", 268 | "fullscreenMenu.Tooltip.SetToolRectangle": "矩形 R", 269 | "fullscreenMenu.Tooltip.SetToolLine": "直线 L", 270 | "fullscreenMenu.Tooltip.SetToolArrow": "箭头 Shift+L", 271 | "fullscreenMenu.Tooltip.SetToolEllipse": "椭圆 O", 272 | "fullscreenMenu.Tooltip.SetToolRegularPolygon": "多边形", 273 | "fullscreenMenu.Tooltip.SetToolStar": "星形", 274 | "fullscreenMenu.Tooltip.DrawingTools": "绘画工具", 275 | "fullscreenMenu.Tooltip.SetToolPen": "钢笔 P", 276 | "fullscreenMenu.Tooltip.SetToolPencil": "铅笔 Shift+P", 277 | "fullscreenMenu.Tooltip.SetToolText": "文本 T", 278 | "fullscreenMenu.Tooltip.SetToolHand": "抓手工具 H", 279 | "fullscreenMenu.Tooltip.SetToolComments": "添加评论 C", 280 | "fullscreenMenu.Tooltip.Present": "演示", 281 | "fullscreenMenu.Tooltip.CreateComponent": "创建组件 Ctrl+Alt+K", 282 | "fullscreenMenu.Tooltip.UseAsMask": "设为蒙版 Ctrl+Alt+M", 283 | "fullscreenMenu.Tooltip.BooleanGroups": "布尔组合", 284 | "fullscreenMenu.Tooltip.UnionSelection": "连集所选项", 285 | "fullscreenMenu.Tooltip.SubtractSelection": "减去所选项", 286 | "fullscreenMenu.Tooltip.IntersectSelection": "交集所选项", 287 | "fullscreenMenu.Tooltip.ExcludeSelection": "差集所选项", 288 | 289 | 290 | "toolbarView.fileName.folderName.Drafts": "草稿", 291 | 292 | "toolbarView.moveFlyout.flyout.toolDefault": "移动", 293 | "toolbarView.moveFlyout.flyout.toolScale": "缩放", 294 | 295 | "toolbarView.regionFlyout.flyout.toolFrame": "画框", 296 | "toolbarView.regionFlyout.flyout.toolSlice": "切片", 297 | 298 | "toolbarView.shapeFlyout.flyout.toolShapeRectangle": "矩形", 299 | "toolbarView.shapeFlyout.flyout.toolShapeLine": "直线", 300 | "toolbarView.shapeFlyout.flyout.toolShapeArrow": "箭头", 301 | "toolbarView.shapeFlyout.flyout.toolShapeEllipse": "椭圆", 302 | "toolbarView.shapeFlyout.flyout.toolShapePolygon": "多边形", 303 | "toolbarView.shapeFlyout.flyout.toolShapeStar": "星形", 304 | "toolbarView.shapeFlyout.flyout.toolPlaceImage": "导入图片…", 305 | 306 | "toolbarView.penFlyout.flyout.toolPen": "钢笔", 307 | "toolbarView.penFlyout.flyout.toolPencil": "铅笔", 308 | 309 | "toolbarView.booleanFlyout.flyout.toolBooleanUnion": "连集所选项", 310 | "toolbarView.booleanFlyout.flyout.toolBooleanSubtract": "减去所选项", 311 | "toolbarView.booleanFlyout.flyout.toolBooleanIntersect": "交集所选项", 312 | "toolbarView.booleanFlyout.flyout.toolBooleatoolBooleanXornUnion": "差集所选项", 313 | "toolbarView.booleanFlyout.flyout.toolFlatten": "展平所选项", 314 | 315 | "toolbarView.Share": "分享", 316 | 317 | "toolbarView.CursorChat": "聚焦聊天框", 318 | "toolbarView.Stamp": "印章", 319 | "toolbarView.Emote": "表情", 320 | 321 | "toolbarView.Overflow.Emote": "表情", 322 | "toolbarView.Overflow.Stamp": "印章", 323 | "toolbarView.Overflow.CursorChat": "聚焦聊天框", 324 | "toolbarView.Overflow.HighFive": "挥手", 325 | "toolbarView.Overflow.Timer": "计时器", 326 | 327 | "toolbarView.Tooltip.Collaborate": "协作", 328 | "toolbarView.Tooltip.ZoomOut": "缩小 Ctrl+-", 329 | "toolbarView.Tooltip.ZoomIn": "放大 Ctrl+-", 330 | "toolbarView.Tooltip.ZoomOrViewOptions": "缩放/视图选项", 331 | 332 | 333 | "delightfulToolbar.MoveTool": "移动工具 V", 334 | "delightfulToolbar.HandTool": "抓手工具 H", 335 | "delightfulToolbar.Marker": "马克笔 M", 336 | "delightfulToolbar.Highlighter": "荧光笔 Shift+M", 337 | "delightfulToolbar.Eraser": "橡皮擦 Shift+Backspace", 338 | "delightfulToolbar.Thin": "细", 339 | "delightfulToolbar.Thick": "粗", 340 | "delightfulToolbar.Charcoal": "炭黑", 341 | "delightfulToolbar.Red": "红", 342 | "delightfulToolbar.Yellow": "黄", 343 | "delightfulToolbar.Green": "绿", 344 | "delightfulToolbar.Blue": "蓝", 345 | "delightfulToolbar.Violet": "紫", 346 | "delightfulToolbar.Brown": "棕", 347 | "delightfulToolbar.White": "白", 348 | "delightfulToolbar.Square": "方形 R", 349 | "delightfulToolbar.Ellipse": "椭圆 O", 350 | "delightfulToolbar.RoundedRectangle": "圆角矩形", 351 | "delightfulToolbar.Diamond": "菱形", 352 | "delightfulToolbar.TriangleUp": "三角形", 353 | "delightfulToolbar.TriangleDown": "三角形", 354 | "delightfulToolbar.ParallelogramRight": "平行四边形", 355 | "delightfulToolbar.ParallelogramLeft": "平行四边形", 356 | "delightfulToolbar.Cylinder": "圆柱体", 357 | "delightfulToolbar.HorizontalCylinder": "横向圆柱体", 358 | "delightfulToolbar.File": "文件", 359 | "delightfulToolbar.Folder": "文件夹", 360 | "delightfulToolbar.Options.Square": "方形", 361 | "delightfulToolbar.Options.Ellipse": "椭圆", 362 | "delightfulToolbar.Options.RoundedRectangle": "圆角矩形", 363 | "delightfulToolbar.Options.Diamond": "菱形", 364 | "delightfulToolbar.Options.Triangle": "三角形", 365 | "delightfulToolbar.Options.DownwardPointingTriangle": "倒三角形", 366 | "delightfulToolbar.Options.RightLeaningParallelogram": "右倾的平行四边形", 367 | "delightfulToolbar.Options.LeftLeaningParallelogram": "左倾的平行四边形", 368 | "delightfulToolbar.Options.Cylinder": "圆柱体", 369 | "delightfulToolbar.Options.HorizontalCylinder": "横向圆柱体", 370 | "delightfulToolbar.Options.File": "文件", 371 | "delightfulToolbar.Options.Folder": "文件夹", 372 | "delightfulToolbar.Sticky": "便利贴 S", 373 | "delightfulToolbar.Text": "文本 T", 374 | "delightfulToolbar.Connector": "连线 X", 375 | "delightfulToolbar.Line": "直线 L", 376 | "delightfulToolbar.Options.Connector": "连线", 377 | "delightfulToolbar.Options.StraightLine": "直线", 378 | "delightfulToolbar.Stamp": "印章 E", 379 | "delightfulToolbar.More": "小部件、贴纸、模板以及更多", 380 | 381 | 382 | "contextMenu.Copy": "复制", 383 | "contextMenu.Paste": "粘贴", 384 | "contextMenu.PasteHere": "粘贴到这里", 385 | 386 | "contextMenu.CopyOrPasteAs": "复制/粘贴为", 387 | "contextMenu.CopyOrPasteAs.CopyLink": "复制链接", 388 | 389 | "contextMenu.SelectLayer": "选择图层", 390 | "contextMenu.MoveToPage": "移到页面", 391 | 392 | "contextMenu.Ungroup": "取消编组", 393 | "contextMenu.Flatten": "拼合", 394 | 395 | "contextMenu.ShowOrHide": "显示/隐藏", 396 | "contextMenu.LockOrUnlock": "锁定/解锁", 397 | 398 | "contextMenu.ShowOrHideComments": "显示/隐藏评论", 399 | 400 | 401 | "pagesPanel.Sidebar.Tab": "图层", 402 | "pagesPanel.Sidebar.AssetsTab": "资源", 403 | 404 | "pagesPanel.Sidebar.Pages": "页面", 405 | "pagesPanel.Sidebar.Pages.CopyLinkToPage": "复制页面链接", 406 | "pagesPanel.Sidebar.Pages.DeletePage": "删除页面", 407 | "pagesPanel.Sidebar.Pages.RenamePage": "重命名页面", 408 | "pagesPanel.Sidebar.Pages.DuplicatePage": "创建页面副本", 409 | 410 | "pagesPanel.Sidebar.AddNewPage": "添加新页面", 411 | "pagesPanel.Sidebar.Search": "搜索", 412 | "pagesPanel.Sidebar.ShowAsList": "显示为列表", 413 | "pagesPanel.Sidebar.ShowAsGrid": "显示为网格", 414 | "pagesPanel.Sidebar.TeamLibrary": "团队组件库", 415 | 416 | "pagesPanel.Sidebar.Components": "组件", 417 | "pagesPanel.Sidebar.Components.FirstInfoText": "如果要创建组件,请选择一个图层,然后单击工具栏中的「创建组件」按钮。", 418 | "pagesPanel.Sidebar.Components.FirstInfoLink": "了解更多", 419 | "pagesPanel.Sidebar.Components.SecondInfoText": "使用组件库可以快速访问其他文件中的组件。", 420 | "pagesPanel.Sidebar.Components.SecondInfoLink": "查看组件库…", 421 | 422 | 423 | "propertiesPanel.TabsHeader.Design": "设计", 424 | "propertiesPanel.TabsHeader.Prototype": "原型", 425 | "propertiesPanel.TabsHeader.Inspect": "检查", 426 | 427 | 428 | "navbar.Community": "社区", 429 | "navbar.Search": "搜索文件、团队或人员", 430 | "navbar.Notifications": "通知", 431 | "navbar.InternalProfile": "内部简介", 432 | "navbar.Settings": "设置", 433 | "navbar.AddAccount": "添加账户", 434 | 435 | 436 | "sidebar.Recents": "最近", 437 | "sidebar.Drafts": "草稿", 438 | "sidebar.ExploreCommunity": "探索社区", 439 | "sidebar.TeamProject": "团队项目", 440 | "sidebar.CreateNewTeam": "创建新的团队", 441 | 442 | 443 | "fileBrowserView.RecentlyViewed": "最近浏览过", 444 | "fileBrowserView.Drafts": "草稿", 445 | "fileBrowserView.Deleted": "已删除", 446 | "fileBrowserView.NewDesignFile": "新建设计文件", 447 | "fileBrowserView.NewDesignFile.Desc": "设计和原型", 448 | "fileBrowserView.NewFigJamFile": "新建 FigJam 文件", 449 | "fileBrowserView.NewFigJamFile.Desc": "白板和图表", 450 | "fileBrowserView.ImportFile": "导入文件", 451 | "fileBrowserView.ImportFile.Desc": "Figma、Sketch 和图片文件", 452 | 453 | "fileBrowserView.Filter": "筛选:", 454 | "fileBrowserView.Filter.Select.AllFiles": "全部文件", 455 | "fileBrowserView.Filter.Select.DesignFiles": "设计文件", 456 | "fileBrowserView.Filter.Select.FigJamFiles": "FigJam 文件", 457 | "fileBrowserView.Filter.Select.Prototypes": "原型", 458 | 459 | "fileBrowserView.Sort": "排序:", 460 | "fileBrowserView.Sort.Select.SortBy": "排序方式", 461 | "fileBrowserView.Sort.Select.Alphabetical": "字母顺序", 462 | "fileBrowserView.Sort.Select.DateCreated": "创建时间", 463 | "fileBrowserView.Sort.Select.LastViewed": "最近浏览", 464 | "fileBrowserView.Sort.Select.LastModified": "最近编辑", 465 | "fileBrowserView.Sort.Select.Order": "排序", 466 | "fileBrowserView.Sort.Select.OldestFirst": "最早", 467 | "fileBrowserView.Sort.Select.NewestFirst": "最新", 468 | 469 | "fileBrowserView.ShowAsGrid": "显示为网格", 470 | "fileBrowserView.ShowAsList": "显示为列表", 471 | 472 | "fileBrowserView.ContextMenu.ShowInProject": "在项目中显示", 473 | "fileBrowserView.ContextMenu.Open": "打开", 474 | "fileBrowserView.ContextMenu.OpenInNewTab": "在新标签页中打开", 475 | "fileBrowserView.ContextMenu.CopyLink": "复制链接", 476 | "fileBrowserView.ContextMenu.AddToYourFavorites": "添加到你的收藏", 477 | "fileBrowserView.ContextMenu.Share": "分享", 478 | "fileBrowserView.ContextMenu.Duplicate": "创建副本", 479 | "fileBrowserView.ContextMenu.Rename": "重命名", 480 | "fileBrowserView.ContextMenu.Delete": "删除", 481 | "fileBrowserView.ContextMenu.RemoveFromRecent": "从最近中移除", 482 | } -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import App from './ui/App.svelte' 2 | import {RunMode} from "./types" 3 | 4 | 5 | const app = new App({ 6 | target: document.body, 7 | props: { 8 | runMode: RunMode.Prod 9 | } 10 | }); 11 | 12 | export default app; -------------------------------------------------------------------------------- /src/store/index.ts: -------------------------------------------------------------------------------- 1 | export const langStore = { 2 | _key: "figma-i18n-lang", 3 | _status: "", 4 | 5 | get status() { 6 | if (window && window.localStorage && this._status == "") { 7 | return localStorage.getItem(this._key) 8 | } 9 | return this._status 10 | }, 11 | 12 | set status(val) { 13 | if (window && window.localStorage) { 14 | localStorage.setItem(this._key, val) 15 | } 16 | this._status = val 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/translator/index.ts: -------------------------------------------------------------------------------- 1 | import * as filter from "../filter" 2 | import { Language, languageDict } from "../locale" 3 | 4 | export interface LangInfo { 5 | ID: string 6 | name: string 7 | dict: { 8 | [elementName: string]: string 9 | } 10 | } 11 | 12 | const generateLangInfoList = (langDict: Language): LangInfo[] => { 13 | let list: LangInfo[] = [] 14 | 15 | for (const key in langDict) { 16 | if (Object.prototype.hasOwnProperty.call(langDict, key)) { 17 | const val = langDict[key] 18 | list.push({ 19 | ID: key, 20 | name: val.name, 21 | dict: val.dict, 22 | }) 23 | } 24 | } 25 | 26 | return list 27 | } 28 | 29 | const languageContentTranslate = function (elementName: string, lang: string): string { 30 | const langDict = languageDict 31 | return langDict[lang] && langDict[lang]["dict"] && langDict[lang]["dict"][elementName] ? langDict[lang]["dict"][elementName] : "" 32 | } 33 | 34 | export const langInfoList = generateLangInfoList(languageDict) 35 | 36 | export const languageConverter = (elements: Element[], lang: string) => { 37 | const matchElement = filter.getTargetElement(elements) 38 | 39 | for (const elementName in matchElement) { 40 | if (Object.prototype.hasOwnProperty.call(matchElement, elementName)) { 41 | const target = matchElement[elementName] 42 | if (target) { 43 | const langCon = languageContentTranslate(elementName, lang) 44 | let trackStatus = true 45 | 46 | if (target.type == "Attr") { 47 | for (let i = 0; i < target.attrList.length; i++) { 48 | const attrNode = target.attrList[i] 49 | if (attrNode.Key == "no-track") { 50 | trackStatus = false 51 | continue 52 | } 53 | if (attrNode.Key == "text-content") { 54 | target.node.textContent = langCon 55 | continue 56 | } 57 | if (attrNode.Value == "" && target.node.getAttribute(attrNode.Key) != langCon) { 58 | target.node.setAttribute(attrNode.Key, langCon) 59 | } 60 | if (attrNode.Value != "" && target.node.getAttribute(attrNode.Key) != attrNode.Value) { 61 | target.node.setAttribute(attrNode.Key, attrNode.Value) 62 | } 63 | } 64 | } 65 | if (target.type == "Text" && target.node.textContent != langCon) { 66 | target.node.textContent = langCon 67 | } 68 | if (trackStatus && target.node && target.node.setAttribute) { 69 | target.node.setAttribute("figma-i18n-id", elementName) 70 | } 71 | } 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/types/index.ts: -------------------------------------------------------------------------------- 1 | export enum RunMode { 2 | Dev, 3 | Prod, 4 | } 5 | 6 | export enum MenuTheme { 7 | Dark = "Dark", 8 | Light = "Light", 9 | } -------------------------------------------------------------------------------- /src/ui/App.svelte: -------------------------------------------------------------------------------- 1 | 102 | -------------------------------------------------------------------------------- /src/ui/Menu.svelte: -------------------------------------------------------------------------------- 1 | 40 | 41 |
42 | 47 |
{ 51 | toggleLanguageMenu() 52 | }} 53 | > 54 | 55 | 64 | 68 | 69 | 70 |
71 | 72 | 79 | 85 | 86 | 87 |
88 |
89 | 90 | {#if openStatus} 91 |
92 | {#each langInfoList as langInfo} 93 |
96 | switchLanguage(langInfo.ID)} 97 | > 98 | 99 | {#if selectLangID == langInfo.ID} 100 | 109 | 113 | 114 | {/if} 115 | 116 |
{langInfo.name}
117 |
118 | {/each} 119 |
120 | {/if} 121 |
122 |
123 | 124 | 261 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@tsconfig/svelte/tsconfig.json", 3 | 4 | "include": ["src/**/*"], 5 | "exclude": ["node_modules/*", "__sapper__/*", "public/*"] 6 | } -------------------------------------------------------------------------------- /yarn-error.log: -------------------------------------------------------------------------------- 1 | Arguments: 2 | D:\Program Files\nodejs\node.exe C:\Users\15005\AppData\Roaming\npm\node_modules\yarn\bin\yarn.js 3 | 4 | PATH: 5 | C:\Program Files (x86)\Common Files\Oracle\Java\javapath;D:\Program Files (x86)\VMware\VMware Workstation\bin\;C:\Python39\Scripts\;C:\Python39\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\ProgramData\chocolatey\bin;D:\Program Files\Git\cmd;C:\Program Files (x86)\dotnet\;C:\Program Files\dotnet\;D:\Program Files\nodejs\;D:\Program Files\TortoiseGit\bin;C:\Program Files\Go\bin;D:\flutter\bin;D:\Program Files\mingw64\bin;D:\Program Files\PuTTY\;C:\Program Files (x86)\ZeroTier\One\;D:\Program Files (x86)\Tencent\微信web开发者工具\dll;C:\Users\15005\.cargo\bin;D:\Program Files\Ruby30-x64\bin;C:\Users\15005\AppData\Local\Microsoft\WindowsApps;C:\Program Files\JetBrains\GoLand 2021.3\bin;;D:\Program Files\Microsoft VS Code\bin;C:\Users\15005\AppData\Local\GitHubDesktop\bin;C:\Users\15005\AppData\Roaming\npm;C:\Users\15005\go\bin;;D:\Program Files\JetBrains\PyCharm 2022.1.2\bin; 6 | 7 | Yarn version: 8 | 1.22.19 9 | 10 | Node version: 11 | 16.14.0 12 | 13 | Platform: 14 | win32 x64 15 | 16 | Trace: 17 | Error: ENOENT: no such file or directory, copyfile 'C:\Users\15005\AppData\Local\Yarn\Cache\v6\npm-ansi-styles-4.3.0-edd803628ae71c04c85ae7a0906edad34b648937-integrity\node_modules\ansi-styles\index.js' -> 'D:\WorkCode\github_desktop\figma-i18n\node_modules\rollup-plugin-postcss\node_modules\ansi-styles\index.js' 18 | 19 | npm manifest: 20 | { 21 | "name": "figma-i18n", 22 | "version": "1.0.7", 23 | "description": "Powerful, intelligent and easy to use Figma internationalisation scripts.", 24 | "author": "afeyer", 25 | "private": true, 26 | "scripts": { 27 | "build": "rollup -c", 28 | "dev": "rollup -c -w", 29 | "start": "sirv public --no-clear", 30 | "check": "svelte-check --tsconfig ./tsconfig.json" 31 | }, 32 | "devDependencies": { 33 | "@rollup/plugin-commonjs": "^17.0.0", 34 | "@rollup/plugin-node-resolve": "^11.0.0", 35 | "@rollup/plugin-typescript": "^8.0.0", 36 | "@tsconfig/svelte": "^2.0.0", 37 | "attractions": "^3.7.0", 38 | "postcss": "^8.4.7", 39 | "rollup": "^2.3.4", 40 | "rollup-plugin-banner2": "^1.2.2", 41 | "rollup-plugin-css-only": "^3.1.0", 42 | "rollup-plugin-livereload": "^2.0.0", 43 | "rollup-plugin-postcss": "^4.0.2", 44 | "rollup-plugin-svelte": "^7.0.0", 45 | "rollup-plugin-terser": "^7.0.0", 46 | "sass": "^1.49.9", 47 | "smelte": "^1.1.8", 48 | "svelte": "^3.0.0", 49 | "svelte-check": "^2.0.0", 50 | "svelte-preprocess": "^4.10.4", 51 | "tslib": "^2.0.0", 52 | "typescript": "^4.0.0" 53 | }, 54 | "dependencies": { 55 | "sirv-cli": "^2.0.0" 56 | } 57 | } 58 | 59 | yarn manifest: 60 | No manifest 61 | 62 | Lockfile: 63 | No lockfile 64 | --------------------------------------------------------------------------------