Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c2658d5dd0 | ||
|
|
13684884c7 | ||
|
|
f216a9254e | ||
|
|
dbdbcbba2d | ||
|
|
2ee4609192 | ||
|
|
0d93cf78f7 | ||
|
|
3398ca0dd7 |
2
.env
2
.env
@@ -2,7 +2,7 @@ GENERATE_SOURCEMAP=false
|
|||||||
|
|
||||||
REACT_APP_NAME=KISS Translator
|
REACT_APP_NAME=KISS Translator
|
||||||
REACT_APP_NAME_CN=简约翻译
|
REACT_APP_NAME_CN=简约翻译
|
||||||
REACT_APP_VERSION=1.6.11
|
REACT_APP_VERSION=1.6.12
|
||||||
|
|
||||||
REACT_APP_HOMEPAGE=https://github.com/fishjar/kiss-translator
|
REACT_APP_HOMEPAGE=https://github.com/fishjar/kiss-translator
|
||||||
|
|
||||||
|
|||||||
67
README.en.md
67
README.en.md
@@ -16,7 +16,34 @@ If you also like a little more simplicity, welcome to pick it up.
|
|||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- Keep it simple, smart
|
- [x] Keep it simple, smart
|
||||||
|
- [x] Open source
|
||||||
|
- [x] Adapt to common browsers
|
||||||
|
- [x] Chrome/Edge/Firefox/Kiwi
|
||||||
|
- [ ] Safari
|
||||||
|
- [x] Supports multiple translation services
|
||||||
|
- [x] Google/Microsoft/DeepL/OpenAI
|
||||||
|
- [x] Custom translation interface
|
||||||
|
- [x] Data synchronization function
|
||||||
|
- [x] Custom rules + rule subscription
|
||||||
|
- [x] Custom style
|
||||||
|
- [x] Custom shortcut keys
|
||||||
|
- `Alt+Q` Toggle Translation
|
||||||
|
- `Alt+C` Toggle Styles
|
||||||
|
- `Alt+K` Open Popup
|
||||||
|
- `Alt+O` Open Options
|
||||||
|
|
||||||
|
## Download
|
||||||
|
|
||||||
|
- [x] Browser extension
|
||||||
|
- [x] Chrome [Installation address](https://chrome.google.com/webstore/detail/kiss-translator/bdiifdefkgmcblbcghdlonllpjhhjgof?hl=zh-CN)
|
||||||
|
- [x] Edge [Installation address](https://microsoftedge.microsoft.com/addons/detail/%E7%AE%80%E7%BA%A6%E7%BF%BB%E8%AF%91/jemckldkclkinpjighnoilpbldbdmmlh?hl=zh-CN)
|
||||||
|
- [x] Firefox [Installation address](https://addons.mozilla.org/zh-CN/firefox/addon/kiss-translator/)
|
||||||
|
- [ ] Safari
|
||||||
|
- [x] GreaseMonkey Script
|
||||||
|
- [x] Chrome/Edge/Firefox ([Tampermonkey](https://www.tampermonkey.net/)/[Violentmonkey](https://violentmonkey.github.io/)) [Installation link 1](https://fishjar.github.io/kiss-translator/kiss-translator.user.js)、 [Installation link 2](https://kiss-translator.rayjar.com/kiss-translator.user.js)
|
||||||
|
- Greasy Fork [Installation address](https://greasyfork.org/zh-CN/scripts/472840-kiss-translator)
|
||||||
|
- [x] iOS Safari ([Userscripts Safari](https://github.com/quoid/userscripts)) [Installation link 1](https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js)、 [Installation link 2](https://kiss-translator.rayjar.com/kiss-translator.user-ios-safari.js)
|
||||||
|
|
||||||
## Associated ProjectS
|
## Associated ProjectS
|
||||||
|
|
||||||
@@ -38,43 +65,7 @@ If you also like a little more simplicity, welcome to pick it up.
|
|||||||
- Supports query of English words, sentences and Chinese characters.
|
- Supports query of English words, sentences and Chinese characters.
|
||||||
- Supports history records and word collections.
|
- Supports history records and word collections.
|
||||||
|
|
||||||
## Description
|
## Development Guidelines
|
||||||
|
|
||||||
### Support shortcut keys
|
|
||||||
|
|
||||||
- `Alt+Q` Toggle Translation
|
|
||||||
- `Alt+C` Toggle Styles
|
|
||||||
- `Alt+K` Open Popup
|
|
||||||
- `Alt+O` Open Options
|
|
||||||
|
|
||||||
## Schedule
|
|
||||||
|
|
||||||
- [x] Provide trial installation package
|
|
||||||
- [x] Adapt browser
|
|
||||||
- [x] Chrome
|
|
||||||
- [x] Edge
|
|
||||||
- [x] Firefox
|
|
||||||
- [ ] Safari
|
|
||||||
- [x] Kiwi
|
|
||||||
- [x] Support translation services
|
|
||||||
- [x] Google
|
|
||||||
- [x] Microsoft
|
|
||||||
- [x] DeepL
|
|
||||||
- [x] OpenAI
|
|
||||||
- [x] Upload to app Store
|
|
||||||
- [x] Chrome [Install Link](https://chrome.google.com/webstore/detail/kiss-translator/bdiifdefkgmcblbcghdlonllpjhhjgof)
|
|
||||||
- [x] Edge [Install Link](https://microsoftedge.microsoft.com/addons/detail/kiss-translator/jemckldkclkinpjighnoilpbldbdmmlh)
|
|
||||||
- [x] Firefox [Install Link](https://addons.mozilla.org/en-US/firefox/addon/kiss-translator/)
|
|
||||||
- [ ] Safari
|
|
||||||
- [x] Greasy Fork [Install Link](https://greasyfork.org/en/scripts/472840-kiss-translator)
|
|
||||||
- [x] Open source
|
|
||||||
- [x] Data Synchronization Function
|
|
||||||
- [x] Greasemonkey Script ([Setting Page 1](https://fishjar.github.io/kiss-translator/options.html)、[Setting Page 2](https://kiss-translator.rayjar.com/options))
|
|
||||||
- [x] [Tampermonkey](https://www.tampermonkey.net/) (Chrome/Edge/Firefox) [Install Link 1](https://fishjar.github.io/kiss-translator/kiss-translator.user.js)、[Install Link 2](https://kiss-translator.rayjar.com/kiss-translator.user.js)
|
|
||||||
- [x] [Violentmonkey](https://violentmonkey.github.io/) (Chrome/Edge/Firefox) [Install Link 1](https://fishjar.github.io/kiss-translator/kiss-translator.user.js)、[Install Link 2](https://kiss-translator.rayjar.com/kiss-translator.user.js)
|
|
||||||
- [x] [Userscripts Safari](https://github.com/quoid/userscripts) (iOS Safari) [Install Link 1](https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js)、[Install Link 2](https://kiss-translator.rayjar.com/kiss-translator.user-ios-safari.js)
|
|
||||||
|
|
||||||
## Guide
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
git clone https://github.com/fishjar/kiss-translator.git
|
git clone https://github.com/fishjar/kiss-translator.git
|
||||||
|
|||||||
67
README.md
67
README.md
@@ -16,7 +16,34 @@
|
|||||||
|
|
||||||
## 特点
|
## 特点
|
||||||
|
|
||||||
- 保持简约
|
- [x] 保持简约
|
||||||
|
- [x] 开放源代码
|
||||||
|
- [x] 适配常见浏览器
|
||||||
|
- [x] Chrome/Edge/Firefox/Kiwi
|
||||||
|
- [ ] Safari
|
||||||
|
- [x] 支持多种翻译服务
|
||||||
|
- [x] Google/Microsoft/DeepL/OpenAI
|
||||||
|
- [x] 自定义翻译接口
|
||||||
|
- [x] 数据同步功能
|
||||||
|
- [x] 自定义规则 + 规则订阅
|
||||||
|
- [x] 自定义样式
|
||||||
|
- [x] 自定义快捷键
|
||||||
|
- `Alt+Q` 开启翻译
|
||||||
|
- `Alt+C` 切换样式
|
||||||
|
- `Alt+K` 打开弹窗
|
||||||
|
- `Alt+O` 打开设置
|
||||||
|
|
||||||
|
## 下载
|
||||||
|
|
||||||
|
- [x] 浏览器扩展
|
||||||
|
- [x] Chrome [安装地址](https://chrome.google.com/webstore/detail/kiss-translator/bdiifdefkgmcblbcghdlonllpjhhjgof?hl=zh-CN)
|
||||||
|
- [x] Edge [安装地址](https://microsoftedge.microsoft.com/addons/detail/%E7%AE%80%E7%BA%A6%E7%BF%BB%E8%AF%91/jemckldkclkinpjighnoilpbldbdmmlh?hl=zh-CN)
|
||||||
|
- [x] Firefox [安装地址](https://addons.mozilla.org/zh-CN/firefox/addon/kiss-translator/)
|
||||||
|
- [ ] Safari
|
||||||
|
- [x] 油猴脚本
|
||||||
|
- [x] Chrome/Edge/Firefox ([Tampermonkey](https://www.tampermonkey.net/)/[Violentmonkey](https://violentmonkey.github.io/)) [安装链接 1](https://fishjar.github.io/kiss-translator/kiss-translator.user.js)、 [安装链接 2](https://kiss-translator.rayjar.com/kiss-translator.user.js)
|
||||||
|
- Greasy Fork [安装地址](https://greasyfork.org/zh-CN/scripts/472840-kiss-translator)
|
||||||
|
- [x] iOS Safari ([Userscripts Safari](https://github.com/quoid/userscripts)) [安装链接 1](https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js)、 [安装链接 2](https://kiss-translator.rayjar.com/kiss-translator.user-ios-safari.js)
|
||||||
|
|
||||||
## 关联项目
|
## 关联项目
|
||||||
|
|
||||||
@@ -38,43 +65,7 @@
|
|||||||
- 支持英文单词、句子、汉字的查询。
|
- 支持英文单词、句子、汉字的查询。
|
||||||
- 支持历史记录、单词收藏。
|
- 支持历史记录、单词收藏。
|
||||||
|
|
||||||
## 简要说明
|
## 开发指引
|
||||||
|
|
||||||
### 支持快捷键
|
|
||||||
|
|
||||||
- `Alt+Q` 开启翻译
|
|
||||||
- `Alt+C` 切换样式
|
|
||||||
- `Alt+K` 打开弹窗
|
|
||||||
- `Alt+O` 打开设置
|
|
||||||
|
|
||||||
## 进度
|
|
||||||
|
|
||||||
- [x] 提供试用安装包
|
|
||||||
- [x] 适配浏览器
|
|
||||||
- [x] Chrome
|
|
||||||
- [x] Edge
|
|
||||||
- [x] Firefox
|
|
||||||
- [ ] Safari
|
|
||||||
- [x] Kiwi
|
|
||||||
- [x] 支持翻译服务
|
|
||||||
- [x] Google
|
|
||||||
- [x] Microsoft
|
|
||||||
- [x] DeepL
|
|
||||||
- [x] OpenAI
|
|
||||||
- [x] 上架应用市场
|
|
||||||
- [x] Chrome [安装地址](https://chrome.google.com/webstore/detail/kiss-translator/bdiifdefkgmcblbcghdlonllpjhhjgof?hl=zh-CN)
|
|
||||||
- [x] Edge [安装地址](https://microsoftedge.microsoft.com/addons/detail/%E7%AE%80%E7%BA%A6%E7%BF%BB%E8%AF%91/jemckldkclkinpjighnoilpbldbdmmlh?hl=zh-CN)
|
|
||||||
- [x] Firefox [安装地址](https://addons.mozilla.org/zh-CN/firefox/addon/kiss-translator/)
|
|
||||||
- [ ] Safari
|
|
||||||
- [x] Greasy Fork [安装地址](https://greasyfork.org/zh-CN/scripts/472840-kiss-translator)
|
|
||||||
- [x] 开放源代码
|
|
||||||
- [x] 数据同步功能
|
|
||||||
- [x] 油猴脚本 ([设置页面 1](https://fishjar.github.io/kiss-translator/options.html)、[设置页面 2](https://kiss-translator.rayjar.com/options))
|
|
||||||
- [x] [Tampermonkey](https://www.tampermonkey.net/) (Chrome/Edge/Firefox) [安装链接 1](https://fishjar.github.io/kiss-translator/kiss-translator.user.js)、[安装链接 2](https://kiss-translator.rayjar.com/kiss-translator.user.js)
|
|
||||||
- [x] [Violentmonkey](https://violentmonkey.github.io/) (Chrome/Edge/Firefox) [安装链接 1](https://fishjar.github.io/kiss-translator/kiss-translator.user.js)、[安装链接 2](https://kiss-translator.rayjar.com/kiss-translator.user.js)
|
|
||||||
- [x] [Userscripts Safari](https://github.com/quoid/userscripts) (iOS Safari) [安装链接 1](https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js)、[安装链接 2](https://kiss-translator.rayjar.com/kiss-translator.user-ios-safari.js)
|
|
||||||
|
|
||||||
## 指引
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
git clone https://github.com/fishjar/kiss-translator.git
|
git clone https://github.com/fishjar/kiss-translator.git
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "kiss-translator",
|
"name": "kiss-translator",
|
||||||
"description": "A minimalist bilingual translation Extension & Greasemonkey Script",
|
"description": "A minimalist bilingual translation Extension & Greasemonkey Script",
|
||||||
"version": "1.6.11",
|
"version": "1.6.12",
|
||||||
"author": "Gabe<yugang2002@gmail.com>",
|
"author": "Gabe<yugang2002@gmail.com>",
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"manifest_version": 2,
|
"manifest_version": 2,
|
||||||
"name": "__MSG_app_name__",
|
"name": "__MSG_app_name__",
|
||||||
"description": "__MSG_app_description__",
|
"description": "__MSG_app_description__",
|
||||||
"version": "1.6.11",
|
"version": "1.6.12",
|
||||||
"default_locale": "en",
|
"default_locale": "en",
|
||||||
"author": "Gabe<yugang2002@gmail.com>",
|
"author": "Gabe<yugang2002@gmail.com>",
|
||||||
"homepage_url": "https://github.com/fishjar/kiss-translator",
|
"homepage_url": "https://github.com/fishjar/kiss-translator",
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"manifest_version": 3,
|
"manifest_version": 3,
|
||||||
"name": "__MSG_app_name__",
|
"name": "__MSG_app_name__",
|
||||||
"description": "__MSG_app_description__",
|
"description": "__MSG_app_description__",
|
||||||
"version": "1.6.11",
|
"version": "1.6.12",
|
||||||
"default_locale": "en",
|
"default_locale": "en",
|
||||||
"author": "Gabe<yugang2002@gmail.com>",
|
"author": "Gabe<yugang2002@gmail.com>",
|
||||||
"homepage_url": "https://github.com/fishjar/kiss-translator",
|
"homepage_url": "https://github.com/fishjar/kiss-translator",
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ const customApiLangs = `["en", "English - English"],
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
const customApiHelpZH = `/// 自定义翻译源接口说明
|
const customApiHelpZH = `/// 自定义翻译源接口说明
|
||||||
|
|
||||||
// 请求(Request)数据将按下面规范发送
|
// 请求(Request)数据将按下面规范发送
|
||||||
{
|
{
|
||||||
url: {{YOUR_URL}},
|
url: {{YOUR_URL}},
|
||||||
@@ -70,6 +71,7 @@ ${customApiLangs}
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
const customApiHelpEN = `/// Custom translation source interface description
|
const customApiHelpEN = `/// Custom translation source interface description
|
||||||
|
|
||||||
// Request data will be sent according to the following specifications
|
// Request data will be sent according to the following specifications
|
||||||
{
|
{
|
||||||
url: {{YOUR_URL}},
|
url: {{YOUR_URL}},
|
||||||
@@ -342,8 +344,8 @@ export const I18N = {
|
|||||||
en: `Follow the syntax of "CSS"`,
|
en: `Follow the syntax of "CSS"`,
|
||||||
},
|
},
|
||||||
setting: {
|
setting: {
|
||||||
zh: `设置`,
|
zh: `设置 (Alt+O)`,
|
||||||
en: `Setting`,
|
en: `Setting (Alt+O)`,
|
||||||
},
|
},
|
||||||
pattern: {
|
pattern: {
|
||||||
zh: `匹配网址`,
|
zh: `匹配网址`,
|
||||||
@@ -527,19 +529,19 @@ export const I18N = {
|
|||||||
},
|
},
|
||||||
hide_fab_button: {
|
hide_fab_button: {
|
||||||
zh: `隐藏悬浮按钮`,
|
zh: `隐藏悬浮按钮`,
|
||||||
en: `"Hide Fab Button`,
|
en: `Hide Fab Button`,
|
||||||
},
|
},
|
||||||
show: {
|
show: {
|
||||||
zh: `显示`,
|
zh: `显示`,
|
||||||
en: `"Show`,
|
en: `Show`,
|
||||||
},
|
},
|
||||||
hide: {
|
hide: {
|
||||||
zh: `隐藏`,
|
zh: `隐藏`,
|
||||||
en: `"Hide`,
|
en: `Hide`,
|
||||||
},
|
},
|
||||||
save_rule: {
|
save_rule: {
|
||||||
zh: `保存规则`,
|
zh: `保存规则`,
|
||||||
en: `"Save Rule`,
|
en: `Save Rule`,
|
||||||
},
|
},
|
||||||
global_rule: {
|
global_rule: {
|
||||||
zh: `全局规则`,
|
zh: `全局规则`,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ export function useRules() {
|
|||||||
const updateRules = useCallback(
|
const updateRules = useCallback(
|
||||||
async (rules) => {
|
async (rules) => {
|
||||||
await save(rules);
|
await save(rules);
|
||||||
trySyncRules();
|
trySyncRules(false, true);
|
||||||
},
|
},
|
||||||
[save]
|
[save]
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ export function SettingProvider({ children }) {
|
|||||||
const syncSetting = useMemo(
|
const syncSetting = useMemo(
|
||||||
() =>
|
() =>
|
||||||
debounce(() => {
|
debounce(() => {
|
||||||
trySyncSetting();
|
trySyncSetting(false, true);
|
||||||
}, [2000]),
|
}, [2000]),
|
||||||
[]
|
[]
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -150,5 +150,5 @@ export const saveRule = async (newRule) => {
|
|||||||
rules.unshift(newRule);
|
rules.unshift(newRule);
|
||||||
}
|
}
|
||||||
await setRules(rules);
|
await setRules(rules);
|
||||||
trySyncRules();
|
trySyncRules(false, true);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -19,12 +19,21 @@ import { sha256 } from "./utils";
|
|||||||
* 同步设置
|
* 同步设置
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
const syncSetting = async (isBg = false) => {
|
const syncSetting = async (isBg = false, isForce = false) => {
|
||||||
const { syncUrl, syncKey, settingUpdateAt = 0 } = await getSyncWithDefault();
|
let {
|
||||||
|
syncUrl,
|
||||||
|
syncKey,
|
||||||
|
settingUpdateAt = 0,
|
||||||
|
settingSyncAt = 0,
|
||||||
|
} = await getSyncWithDefault();
|
||||||
if (!syncUrl || !syncKey) {
|
if (!syncUrl || !syncKey) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isForce) {
|
||||||
|
settingUpdateAt = Date.now();
|
||||||
|
}
|
||||||
|
|
||||||
const setting = await getSettingWithDefault();
|
const setting = await getSettingWithDefault();
|
||||||
const res = await apiSyncData(
|
const res = await apiSyncData(
|
||||||
syncUrl,
|
syncUrl,
|
||||||
@@ -32,7 +41,7 @@ const syncSetting = async (isBg = false) => {
|
|||||||
{
|
{
|
||||||
key: KV_SETTING_KEY,
|
key: KV_SETTING_KEY,
|
||||||
value: setting,
|
value: setting,
|
||||||
updateAt: settingUpdateAt,
|
updateAt: settingSyncAt === 0 ? 0 : settingUpdateAt,
|
||||||
},
|
},
|
||||||
isBg
|
isBg
|
||||||
);
|
);
|
||||||
@@ -48,9 +57,9 @@ const syncSetting = async (isBg = false) => {
|
|||||||
return res.value;
|
return res.value;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const trySyncSetting = async (isBg = false) => {
|
export const trySyncSetting = async (isBg = false, isForce = false) => {
|
||||||
try {
|
try {
|
||||||
return await syncSetting(isBg);
|
return await syncSetting(isBg, isForce);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log("[sync setting]", err);
|
console.log("[sync setting]", err);
|
||||||
}
|
}
|
||||||
@@ -60,12 +69,21 @@ export const trySyncSetting = async (isBg = false) => {
|
|||||||
* 同步规则
|
* 同步规则
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
const syncRules = async (isBg = false) => {
|
const syncRules = async (isBg = false, isForce = false) => {
|
||||||
const { syncUrl, syncKey, rulesUpdateAt } = await getSyncWithDefault();
|
let {
|
||||||
|
syncUrl,
|
||||||
|
syncKey,
|
||||||
|
rulesUpdateAt = 0,
|
||||||
|
rulesSyncAt = 0,
|
||||||
|
} = await getSyncWithDefault();
|
||||||
if (!syncUrl || !syncKey) {
|
if (!syncUrl || !syncKey) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isForce) {
|
||||||
|
rulesUpdateAt = Date.now();
|
||||||
|
}
|
||||||
|
|
||||||
const rules = await getRulesWithDefault();
|
const rules = await getRulesWithDefault();
|
||||||
const res = await apiSyncData(
|
const res = await apiSyncData(
|
||||||
syncUrl,
|
syncUrl,
|
||||||
@@ -73,7 +91,7 @@ const syncRules = async (isBg = false) => {
|
|||||||
{
|
{
|
||||||
key: KV_RULES_KEY,
|
key: KV_RULES_KEY,
|
||||||
value: rules,
|
value: rules,
|
||||||
updateAt: rulesUpdateAt,
|
updateAt: rulesSyncAt === 0 ? 0 : rulesUpdateAt,
|
||||||
},
|
},
|
||||||
isBg
|
isBg
|
||||||
);
|
);
|
||||||
@@ -89,9 +107,9 @@ const syncRules = async (isBg = false) => {
|
|||||||
return res.value;
|
return res.value;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const trySyncRules = async (isBg = false) => {
|
export const trySyncRules = async (isBg = false, isForce = false) => {
|
||||||
try {
|
try {
|
||||||
return await syncRules(isBg);
|
return await syncRules(isBg, isForce);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log("[sync user rules]", err);
|
console.log("[sync user rules]", err);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user