Added translations support (i18n) (#695)

Co-authored-by: Rongrong <i@rong.moe>
This commit is contained in:
Alayn Gortazar 2022-05-22 22:34:32 +02:00 committed by GitHub
parent c75ee89d58
commit 8d6cf1ff38
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 315 additions and 75 deletions

View File

@ -66,6 +66,7 @@
"clipboard": "2.0.8",
"element-ui": "2.15.6",
"https-browserify": "^1.0.0",
"i18n-js": "^4.0.0-alpha.14",
"md5.js": "^1.3.5",
"psl": "1.8.0",
"route-recognizer": "0.3.4",

View File

@ -1,7 +1,7 @@
<html>
<head>
<meta charset="UTF-8">
<title>RSSHub Radar 选项</title>
<title data-i18n>RSSHub Radar Options</title>
<link rel="stylesheet" href="./options.css">
</head>
<body>

View File

@ -10,19 +10,19 @@
<a class="icons-item icons-setting" href="/options.html#/setting"></a>
</div>
<div class="no-rss">
<h2>( ´・・)ノ(._.`) 当前页面没有检测到 RSS</h2>
<p>参与到 <a href="https://docs.rsshub.app">RSSHub</a> 让万物皆可 RSS 吧!</p>
<h2>( ´・・)ノ(._.`) <span data-i18n>rss not found</span></h2>
<p data-i18n>join rsshub</p>
</div>
<div class="page-rss">
<h2>当前页面上的 RSS</h2>
<h2 data-i18n>current page rss</h2>
<ul></ul>
</div>
<div class="page-rsshub">
<h2>适用于当前页面的 RSSHub</h2>
<h2 data-i18n>current page RSSHub</h2>
<ul></ul>
</div>
<div class="website-rsshub">
<h2>适用于当前网站的 RSSHub</h2>
<h2 data-i18n>current site RSSHub</h2>
<ul></ul>
</div>
<script src="./popup.js"></script>

View File

@ -1,5 +1,5 @@
body {
min-width: 310px;
min-width: 350px;
margin: 0;
padding: 20px 20px 5px;
font-family: 'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', '微软雅黑', Arial, sans-serif;

16
src/js/common/i18n.js Normal file
View File

@ -0,0 +1,16 @@
import { I18n } from 'i18n-js';
import en from '../../translations/en.json';
import es from '../../translations/es.json';
import eu from '../../translations/eu.json';
import zh from '../../translations/zh.json';
const i18n = new I18n({
en,
es,
eu,
zh,
});
i18n.enableFallback = true;
i18n.defaultLocale = 'en';
i18n.locale = navigator.language;
export default i18n;

View File

@ -4,6 +4,12 @@ export function secondToTime(second) {
return `${hour ? hour + '小时' : ''}${min}分钟`;
}
export function secondToHoursMinutes(second) {
const hours = Math.floor(second / 3600);
const minutes = Math.floor((second - hours * 3600) / 60);
return { hours, minutes };
}
const iframe = document.querySelector('#sandbox');
const returnResults = [];
window.addEventListener('message', (event) => {

View File

@ -11,17 +11,17 @@
height="80px">RSSHub Radar</el-header>
<el-menu-item index="/setting">
<i class="el-icon-setting"></i>
<span slot="title">设置</span>
<span slot="title">{{ $i18n.t('settings') }}</span>
</el-menu-item>
<el-menu-item index="/list">
<i class="el-icon-magic-stick"></i>
<span slot="title">规则列表</span>
<span slot="title">{{ $i18n.t('list of rules') }}</span>
</el-menu-item>
<el-menu-item index="/about">
<i class="el-icon-coordinate"></i>
<span slot="title">关于</span>
<span slot="title">{{ $i18n.t('about') }}</span>
</el-menu-item>
<el-footer class="footer">版本 v{{ version }}<br>Made with <i style="color:#d43f57"></i> by <a target="_blank" href="https://diygod.me">DIYgod</a></el-footer>
<el-footer class="footer">{{ $i18n.t('version')}} v{{ version }}<br>Made with <i style="color:#d43f57"></i> by <a target="_blank" href="https://diygod.me">DIYgod</a></el-footer>
</el-menu>
</el-aside>
<el-container class="sub-container">

View File

@ -5,8 +5,15 @@ import App from './App.vue';
import Setting from './views/Setting.vue';
import List from './views/List.vue';
import About from './views/About.vue';
import i18n from '../common/i18n';
import { Container, Menu, MenuItem, Aside, Header, Main, Footer, Input, Checkbox, Message, Loading, Collapse, CollapseItem, Button, Progress, Tooltip } from 'element-ui';
// import translations from "../../translations/translations.json";
// const i18n = new I18n(translations);
// i18n.enableFallback = true;
// i18n.defaultLocale = "zh";
// i18n.locale = navigator.language;
Vue.use(VueRouter);
Vue.use(Container);
Vue.use(Menu);
@ -26,6 +33,7 @@ Vue.use(Tooltip);
Vue.prototype.$loading = Loading.service;
Vue.prototype.$message = Message;
Vue.prototype.$i18n = i18n;
Vue.config.productionTip = false;
const routes = [

View File

@ -1,18 +1,18 @@
<template>
<div class="about">
<el-main>
<div class="title">关于</div>
<div class="title">{{$i18n.t('about')}}</div>
<div class="content">
<div class="tip">
<p>RSSHub Radar <a target="_blank" href="https://docs.rsshub.app">RSSHub</a> 的衍生项目她可以帮助你快速发现和订阅当前网站的 RSS RSSHub项目<a target="_blank" href="https://github.com/DIYgod/RSSHub-Radar">采用 MIT 许可开源</a>使用完全免费但是随着项目规模的增长也需要有相应的资金支持才能持续项目的维护与开发</p>
<p><i class="el-icon-trophy"></i> 赞助 RSSHub Radar 的开发: <a target="_blank" href="https://docs.rsshub.app/support/">https://docs.rsshub.app/support/</a></p>
<p v-html="$i18n.t('rsshub radar info')"></p>
<p><i class="el-icon-trophy"></i> <span v-html="$i18n.t('sponsored development')"></span></p>
<p>&nbsp;</p>
<p>更新日志: <a target="_blank" href="https://github.com/DIYgod/RSSHub-Radar/releases">https://github.com/DIYgod/RSSHub-Radar/releases</a></p>
<p>问题反馈: <a target="_blank" href="https://github.com/DIYgod/RSSHub-radar/issues">https://github.com/DIYgod/RSSHub-radar/issues</a></p>
<p>{{$i18n.t('update log')}}: <a target="_blank" href="https://github.com/DIYgod/RSSHub-Radar/releases">https://github.com/DIYgod/RSSHub-Radar/releases</a></p>
<p>{{$i18n.t('question feedback')}}: <a target="_blank" href="https://github.com/DIYgod/RSSHub-radar/issues">https://github.com/DIYgod/RSSHub-radar/issues</a></p>
<p>GitHub: <a target="_blank" href="https://github.com/DIYgod/RSSHub-Radar">https://github.com/DIYgod/RSSHub-Radar</a></p>
<p>RSSHub 文档: <a target="_blank" href="https://docs.rsshub.app">https://docs.rsshub.app</a></p>
<p v-html="$i18n.t('rsshub documentation')"></p>
<p>&nbsp;</p>
<p><b>万物皆可 RSS</b></p>
<p><b>{{$i18n.t('everything is possible with rss')}}</b></p>
<p><b>Made with <i style="color:#d43f57"></i> by <a target="_blank" href="https://diygod.me">DIYgod</a></b></p>
</div>
</div>

View File

@ -1,10 +1,10 @@
<template>
<div class="list">
<el-main>
<div class="title">规则列表</div>
<div class="title">{{ $i18n.t('rules') }}</div>
<div class="tip">
<p>更多规则支持中快来<a target="_blank" href="https://docs.rsshub.app/joinus/">参与我们</a></p>
<p>{{ time }}前更新</p>
<p v-html="$i18n.t('for more rules join us')"></p>
<p>{{ $i18n.t('updated time ago', {hours: hours, minutes: minutes})}}</p>
</div>
<div class="content" v-loading="loading">
<el-collapse accordion>
@ -37,20 +37,23 @@
<script>
import { getRules, getRulesDate, updateRules } from '../../common/rules';
import { secondToTime, commandSandbox } from '../../common/utils';
import { secondToHoursMinutes, commandSandbox } from '../../common/utils';
export default {
name: 'List',
data: () => ({
loading: true,
rules: {},
time: '',
hours: '',
minutes: '',
rulesText: '',
}),
created() {
getRulesDate((date) => {
let second = (+new Date - +date) / 1000;
this.time = secondToTime(second);
const {hours, minutes} = secondToHoursMinutes(second)
this.hours = hours;
this.minutes = minutes;
this.refreshTime();
});
getRules((rules) => {
@ -72,7 +75,9 @@ export default {
methods: {
refreshTime() {
getRulesDate((date) => {
this.time = secondToTime((+new Date - +date) / 1000);
const {hours, minutes} = secondToHoursMinutes((+new Date - +date) / 1000)
this.hours = hours;
this.minutes = minutes;
setTimeout(() => {
this.refreshTime();
}, 1000);
@ -81,7 +86,7 @@ export default {
updateRules() {
updateRules(this.rulesText, () => {
this.$message({
message: '保存成功',
message: this.$i18n.t('successfully saved'),
type: 'success'
});
});

View File

@ -1,91 +1,91 @@
<template>
<div class="setting">
<div class="title">设置</div>
<div class="title">{{ $i18n.t('settings') }}</div>
<div class="content" v-loading="loading">
<div v-if="!loading">
<div class="subtitle">常规</div>
<div class="subtitle">{{ $i18n.t('general') }}</div>
<div class="setting-item">
<div class="setting-name">自定义 RSSHub 域名</div>
<div class="setting-name">{{ $i18n.t('custom rsshub domain') }}</div>
<div class="setting-input">
<el-input @change="saveConfig" v-model="config.rsshubDomain" placeholder="请输入你的 RSSHub 域名,留空使用官方域名"></el-input>
<el-input @change="saveConfig" v-model="config.rsshubDomain" :placeholder="$i18n.t('enter rsshub domain')"></el-input>
</div>
<template v-if="config.rsshubDomain !== defaultConfig.rsshubDomain">
<div class="setting-name">访问密钥<a target="_blank" href="https://docs.rsshub.app/install/#fang-wen-kong-zhi-pei-zhi"><el-tooltip class="item" effect="dark" content="只有实例启用了访问密钥,才需要配置,如果你不清楚情况,请保持关闭" placement="top"><i class="el-icon-info"></i></el-tooltip></a></div>
<div class="setting-name">{{ $i18n.t('access key') }}<a target="_blank" href="https://docs.rsshub.app/install/#fang-wen-kong-zhi-pei-zhi"><el-tooltip class="item" effect="dark" :content="$i18n.t('configuration required if access keys enabled')" placement="top"><i class="el-icon-info"></i></el-tooltip></a></div>
<div class="setting-input">
<el-checkbox @change="saveConfig" v-model="config.rsshubAccessControl.enabled">开启</el-checkbox>
<el-input @change="saveConfig" style="margin-left: 20px;" v-if="config.rsshubAccessControl.enabled" v-model="config.rsshubAccessControl.accessKey" placeholder="必填,请输入正确的访问密钥"></el-input>
<el-checkbox @change="saveConfig" style="margin-left: 20px;" v-if="config.rsshubAccessControl.enabled" v-model="config.rsshubAccessControl.useCode">生成访问码</el-checkbox>
<el-checkbox @change="saveConfig" v-model="config.rsshubAccessControl.enabled">{{ $i18n.t('enable') }}</el-checkbox>
<el-input @change="saveConfig" style="margin-left: 20px;" v-if="config.rsshubAccessControl.enabled" v-model="config.rsshubAccessControl.accessKey" :placeholder="$i18n.t('required access key')"></el-input>
<el-checkbox @change="saveConfig" style="margin-left: 20px;" v-if="config.rsshubAccessControl.enabled" v-model="config.rsshubAccessControl.useCode">{{ $i18n.t('generate access code') }}</el-checkbox>
</div>
</template>
<div class="setting-name" v-if="isChrome">快捷键</div>
<div class="setting-name" v-if="isChrome">{{ $i18n.t('hot key') }}</div>
<div class="setting-input" v-if="isChrome">
<el-button size="medium" @click="toHotkey">点此设置</el-button>
<el-button size="medium" @click="toHotkey">{{ $i18n.t('click to set') }}</el-button>
</div>
</div>
<div class="subtitle">规则更新</div>
<div class="subtitle">{{ $i18n.t('rules update') }}</div>
<div class="setting-item">
<div class="setting-name" v-if="defaultConfig.enableRemoteRules">我会自动更新你也可以</div>
<div class="setting-input" v-if="defaultConfig.enableRemoteRules">
<el-button style="width: 98px" size="medium" @click="refreshRu" :disabled="refreshDisabled">{{ refreshDisabled ? '更新中' : '立即更新' }}</el-button><el-progress :text-inside="true" :stroke-width="20" :percentage="percentage"></el-progress><span class="time">{{ time }}{{ leftTime }}</span>
</div>
<div class="setting-name" v-if="!defaultConfig.enableRemoteRules">远程更新被禁用</div>
<div class="setting-name" v-if="!defaultConfig.enableRemoteRules">{{ $i18n.t('enable remote rules') }}</div>
</div>
<div class="subtitle">一键订阅</div>
<div class="subtitle">{{ $i18n.t('one-click subscription') }}</div>
<div class="setting-item">
<div class="setting-name">Tiny Tiny RSS <a target="_blank" href="https://ttrss.henry.wang/zh/"><i class="el-icon-info"></i></a></div>
<div class="setting-input">
<el-checkbox @change="saveConfig" v-model="config.submitto.ttrss">开启</el-checkbox>
<el-input @change="saveConfig" style="margin-left: 20px;" v-if="config.submitto.ttrss" v-model="config.submitto.ttrssDomain" placeholder="必填,请输入你的 Tiny Tiny RSS 地址"></el-input>
<el-checkbox @change="saveConfig" v-model="config.submitto.ttrss">{{ $i18n.t('enable') }}</el-checkbox>
<el-input @change="saveConfig" style="margin-left: 20px;" v-if="config.submitto.ttrss" v-model="config.submitto.ttrssDomain" :placeholder="$i18n.t('required address', {service: 'Tiny Tiny RSS'})"></el-input>
</div>
<div class="setting-name">Miniflux <a target="_blank" href="https://miniflux.app"><i class="el-icon-info"></i></a></div>
<div class="setting-input">
<el-checkbox @change="saveConfig" v-model="config.submitto.miniflux">开启</el-checkbox>
<el-input @change="saveConfig" style="margin-left: 20px;" v-if="config.submitto.miniflux" v-model="config.submitto.minifluxDomain" placeholder="必填,请输入你的 Miniflux 地址"></el-input>
<el-checkbox @change="saveConfig" v-model="config.submitto.miniflux">{{ $i18n.t('enable') }}</el-checkbox>
<el-input @change="saveConfig" style="margin-left: 20px;" v-if="config.submitto.miniflux" v-model="config.submitto.minifluxDomain" :placeholder="$i18n.t('required address', {service: 'Miniflux'})"></el-input>
</div>
<div class="setting-name">FreshRSS <a target="_blank" href="https://freshrss.org"><i class="el-icon-info"></i></a></div>
<div class="setting-input">
<el-checkbox @change="saveConfig" v-model="config.submitto.freshrss">开启</el-checkbox>
<el-input @change="saveConfig" style="margin-left: 20px;" v-if="config.submitto.freshrss" v-model="config.submitto.freshrssDomain" placeholder="必填,请输入你的 FreshRSS 地址"></el-input>
<el-checkbox @change="saveConfig" v-model="config.submitto.freshrss">{{ $i18n.t('enable') }}</el-checkbox>
<el-input @change="saveConfig" style="margin-left: 20px;" v-if="config.submitto.freshrss" v-model="config.submitto.freshrssDomain" :placeholder="$i18n.t('required address', {service: 'FreshRSS'})"></el-input>
</div>
<div class="setting-name">Nextcloud News <a target="_blank" href="https://apps.nextcloud.com/apps/news"><i class="el-icon-info"></i></a></div>
<div class="setting-input">
<el-checkbox @change="saveConfig" v-model="config.submitto.nextcloudnews">开启</el-checkbox>
<el-input @change="saveConfig" style="margin-left: 20px;" v-if="config.submitto.nextcloudnews" v-model="config.submitto.nextcloudnewsDomain" placeholder="必填,请输入你的 Nextcloud News 地址"></el-input>
<el-checkbox @change="saveConfig" v-model="config.submitto.nextcloudnews">{{ $i18n.t('enable') }}</el-checkbox>
<el-input @change="saveConfig" style="margin-left: 20px;" v-if="config.submitto.nextcloudnews" v-model="config.submitto.nextcloudnewsDomain" :placeholder="$i18n.t('required address', {service: 'Nextcloud'})"></el-input>
</div>
<div class="setting-name">Feedly <a target="_blank" href="https://feedly.com/"><i class="el-icon-info"></i></a></div>
<div class="setting-input">
<el-checkbox @change="saveConfig" v-model="config.submitto.feedly">开启</el-checkbox>
<el-checkbox @change="saveConfig" v-model="config.submitto.feedly">{{ $i18n.t('enable') }}</el-checkbox>
</div>
<div class="setting-name">Inoreader <a target="_blank" href="https://www.inoreader.com/"><i class="el-icon-info"></i></a></div>
<div class="setting-input">
<el-checkbox @change="saveConfig" v-model="config.submitto.inoreader">开启</el-checkbox>
<el-checkbox @change="saveConfig" v-model="config.submitto.inoreader">{{ $i18n.t('enable') }}</el-checkbox>
</div>
<div class="setting-name">Feedbin <a target="_blank" href="https://feedbin.com/"><i class="el-icon-info"></i></a></div>
<div class="setting-input">
<el-checkbox @change="saveConfig" v-model="config.submitto.feedbin">开启</el-checkbox>
<el-checkbox @change="saveConfig" v-model="config.submitto.feedbin">{{ $i18n.t('enable') }}</el-checkbox>
</div>
<div class="setting-name">The Old Reader <a target="_blank" href="https://theoldreader.com/"><i class="el-icon-info"></i></a></div>
<div class="setting-input">
<el-checkbox @change="saveConfig" v-model="config.submitto.theoldreader">开启</el-checkbox>
<el-checkbox @change="saveConfig" v-model="config.submitto.theoldreader">{{ $i18n.t('enable') }}</el-checkbox>
</div>
<div class="setting-name">Feeds.Pub <a target="_blank" href="https://feeds.pub/"><i class="el-icon-info"></i></a></div>
<div class="setting-input">
<el-checkbox @change="saveConfig" v-model="config.submitto.feedspub">开启</el-checkbox>
<el-checkbox @change="saveConfig" v-model="config.submitto.feedspub">{{ $i18n.t('enable') }}</el-checkbox>
</div>
<div class="setting-name">BazQux Reader <a target="_blank" href="https://bazqux.com/"><i class="el-icon-info"></i></a></div>
<div class="setting-input">
<el-checkbox @change="saveConfig" v-model="config.submitto.bazqux">开启</el-checkbox>
<el-checkbox @change="saveConfig" v-model="config.submitto.bazqux">{{ $i18n.t('enable') }}</el-checkbox>
</div>
<div class="setting-name">本地阅读器 <el-tooltip class="item" effect="dark" content="需要阅读器支持,如 Reeder 等" placement="top"><i class="el-icon-info"></i></el-tooltip></div>
<div class="setting-name">{{ $i18n.t('local reader') }} <el-tooltip class="item" effect="dark" :content="$i18n.t('requires reader support')" placement="top"><i class="el-icon-info"></i></el-tooltip></div>
<div class="setting-input">
<el-checkbox @change="saveConfig" v-model="config.submitto.local">开启</el-checkbox>
<el-checkbox @change="saveConfig" v-model="config.submitto.local">{{ $i18n.t('enable') }}</el-checkbox>
</div>
</div>
<div class="subtitle">通知与提醒</div>
<div class="subtitle">{{ $i18n.t('notifications and reminders') }}</div>
<div class="setting-item">
<div class="setting-name">角标提醒</div>
<div class="setting-name">{{ $i18n.t('show corner badge') }}</div>
<div class="setting-input">
<el-checkbox @change="saveConfig" v-model="config.notice.badge">开启</el-checkbox>
<el-checkbox @change="saveConfig" v-model="config.notice.badge">{{ $i18n.t('enable') }}</el-checkbox>
</div>
</div>
</div>
@ -127,7 +127,7 @@ export default {
saveConfig() {
saveConfig(this.config, () => {
this.$message({
message: '保存成功',
message: this.$i18n.t('successfully saved'),
type: 'success'
});
});

View File

@ -1,9 +1,11 @@
import '../../css/popup.less';
import ClipboardJS from 'clipboard';
import { getConfig } from '../common/config';
import i18n from '../common/i18n';
import settingIcon from '../../svg/setting.svg';
import aboutIcon from '../../svg/about.svg';
import MD5 from 'md5.js';
let config;
function generateList(type, list) {
@ -27,35 +29,35 @@ function generateList(type, list) {
</a>
${
item.isDocs
? `<a href="${url}" class="rss-action">文档</a>`
: `<div class="rss-action rss-copy" data-clipboard-text="${url}">复制</div>
? `<a href="${url}" class="rss-action">${i18n.t('documentation')}</a>`
: `<div class="rss-action rss-copy" data-clipboard-text="${url}">${i18n.t('copy')}</div>
${
config.submitto.ttrss && config.submitto.ttrssDomain
? `<a href="${config.submitto.ttrssDomain.replace(/\/$/, '')}/public.php?op=bookmarklets--subscribe&feed_url=${encodeURI(url)}" class="rss-action rss-submitto-ttrss">订阅到 TTRSS</a>`
? `<a href="${config.submitto.ttrssDomain.replace(/\/$/, '')}/public.php?op=bookmarklets--subscribe&feed_url=${encodeURI(url)}" class="rss-action rss-submitto-ttrss">${i18n.t('subscribe to')} TTRSS</a>`
: ''
}
${
config.submitto.miniflux && config.submitto.minifluxDomain
? `<a href="${config.submitto.minifluxDomain.replace(/\/$/, '')}/bookmarklet?uri=${encodeURI(url)}" class="rss-action rss-submitto-miniflux">订阅到 Miniflux</a>`
? `<a href="${config.submitto.minifluxDomain.replace(/\/$/, '')}/bookmarklet?uri=${encodeURI(url)}" class="rss-action rss-submitto-miniflux">${i18n.t('subscribe to')} Miniflux</a>`
: ''
}
${
config.submitto.freshrss && config.submitto.freshrssDomain
? `<a href="${config.submitto.freshrssDomain.replace(/\/$/, '')}/i/?c=feed&a=add&url_rss=${encodeURI(url)}" class="rss-action rss-submitto-freshrss">订阅到 FreshRSS</a>`
? `<a href="${config.submitto.freshrssDomain.replace(/\/$/, '')}/i/?c=feed&a=add&url_rss=${encodeURI(url)}" class="rss-action rss-submitto-freshrss">${i18n.t('subscribe to')} FreshRSS</a>`
: ''
}
${
config.submitto.nextcloudnews && config.submitto.nextcloudnewsDomain
? `<a href="${config.submitto.nextcloudnewsDomain.replace(/\/$/, '')}/?subscribe_to=${encodeURI(url)}" class="rss-action rss-submitto-nextcloudnews">订阅到 Nextcloud News</a>`
? `<a href="${config.submitto.nextcloudnewsDomain.replace(/\/$/, '')}/?subscribe_to=${encodeURI(url)}" class="rss-action rss-submitto-nextcloudnews">${i18n.t('subscribe to')} Nextcloud News</a>`
: ''
}
${config.submitto.feedly ? `<a href="https://feedly.com/i/subscription/feed/${encodeURI(url)}" class="rss-action rss-submitto-feedly">订阅到 Feedly</a>` : ''}
${config.submitto.inoreader ? `<a href="https://www.inoreader.com/?add_feed=${encodeURI(url)}" class="rss-action rss-submitto-inoreader">订阅到 Inoreader</a>` : ''}
${config.submitto.feedbin ? `<a href="https://feedbin.com/?subscribe=${encodeURI(url)}" class="rss-action rss-submitto-feedbin">订阅到 Feedbin</a>` : ''}
${config.submitto.theoldreader ? `<a href="https://theoldreader.com/feeds/subscribe?url=${encodeURI(url)}" class="rss-action rss-submitto-theoldreader">订阅到 The Old Reader</a>` : ''}
${config.submitto.feedspub ? `<a href="https://feeds.pub/feed/${encodeURIComponent(url)}" class="rss-action rss-submitto-feedspub">订阅到 Feeds.Pub</a>` : ''}
${config.submitto.bazqux ? `<a href="https://bazqux.com/add?url=${encodeURIComponent(url)}" class="rss-action rss-submitto-bazqux">订阅到 BazQux Reader</a>` : ''}
${config.submitto.local ? `<a href="feed://${url}" class="rss-action rss-submitto-local">订阅到本地阅读器</a>` : ''}`
${config.submitto.feedly ? `<a href="https://feedly.com/i/subscription/feed/${encodeURI(url)}" class="rss-action rss-submitto-feedly">${i18n.t('subscribe to')} Feedly</a>` : ''}
${config.submitto.inoreader ? `<a href="https://www.inoreader.com/?add_feed=${encodeURI(url)}" class="rss-action rss-submitto-inoreader">${i18n.t('subscribe to')} Inoreader</a>` : ''}
${config.submitto.feedbin ? `<a href="https://feedbin.com/?subscribe=${encodeURI(url)}" class="rss-action rss-submitto-feedbin">${i18n.t('subscribe to')} Feedbin</a>` : ''}
${config.submitto.theoldreader ? `<a href="https://theoldreader.com/feeds/subscribe?url=${encodeURI(url)}" class="rss-action rss-submitto-theoldreader">${i18n.t('subscribe to')} The Old Reader</a>` : ''}
${config.submitto.feedspub ? `<a href="https://feeds.pub/feed/${encodeURIComponent(url)}" class="rss-action rss-submitto-feedspub">${i18n.t('subscribe to')} Feeds.Pub</a>` : ''}
${config.submitto.bazqux ? `<a href="https://bazqux.com/add?url=${encodeURIComponent(url)}" class="rss-action rss-submitto-bazqux">${i18n.t('subscribe to')} BazQux Reader</a>` : ''}
${config.submitto.local ? `<a href="feed://${url}" class="rss-action rss-submitto-local">${i18n.t('subscribe to local reader')}</a>` : ''}`
}
</li>
`;
@ -69,6 +71,11 @@ function generateList(type, list) {
document.querySelector('.icons-setting').innerHTML = settingIcon;
document.querySelector('.icons-about').innerHTML = aboutIcon;
const translatableNodes = document.querySelectorAll('[data-i18n]');
[...translatableNodes].forEach((element) => {
element.innerHTML = i18n.t(element.innerHTML);
});
chrome.tabs.query(
{
active: true,
@ -92,9 +99,9 @@ chrome.tabs.query(
const clipboard = new ClipboardJS('.rss-copy');
clipboard.on('success', function (e) {
e.trigger.innerHTML = '已复制';
e.trigger.innerHTML = i18n.t('copied');
setTimeout(() => {
e.trigger.innerHTML = '复制';
e.trigger.innerHTML = i18n.t('copy');
}, 1000);
});

46
src/translations/en.json Normal file
View File

@ -0,0 +1,46 @@
{
"access key": "Access key",
"about": "About",
"click to set": "Click to set",
"configuration required if access keys enabled": "Configuration is only required if the instance has access keys enabled, keep it off if you don't know the situation",
"copied": "Copied",
"copy": "Copy",
"current page rss": "RSS on the current site",
"current page RSSHub": "RSSHub for the current page",
"custom rsshub domain": "Custom RSSHub domain name",
"current site RSSHub": "RSSHub for the current site",
"documentation": "Info",
"enable": "Enable",
"enable remote rules": "Enable remote rules",
"enter rsshub domain": "Please enter your RSSHub domain name, leave it blank to use the official domain name",
"for more rules join us": "For more rules support, <a target=\"_blank\" href=\"https://docs.rsshub.app/en/joinus/quick-start.html\">join us</a>",
"general": "General",
"generate access code": "Generate access code",
"hot key": "Hot key",
"join rsshub": "Participate in the <a href=\"https://docs.rsshub.app/en/\"> to make everything RSS-able!",
"list of rules": "List of rules",
"local reader": "Local reader",
"one-click subscription": "One-click subscription",
"notifications and reminders": "Notifications and reminders",
"required access key": "Required, please enter the correct access key",
"required address": "Required. Please enter you %{service} address",
"requires reader support": "Requires reader support, such as Reeder, etc.",
"rss not found": "No RSS found",
"rsshub radar options": "RSSHub Radar Options",
"rules": "Rules",
"rules update": "Rules update",
"settings": "Settings",
"show corner badge": "Show corner badge",
"subscribe to": "Subscribe to",
"subscribe to local reader": "Subscribe to local reader",
"successfully saved": "Successfully saved",
"updated time ago": "%{hours}h %{minutes}m since last update",
"version": "Version",
"rsshub radar info": "RSSHub Radar is a spin-off of <a target=\"_blank\" href=\"https://docs.rsshub.app/en/\">RSSHub</a> that helps you quickly discover and subscribe to RSS and RSSHub for your current site, and the project is <a target=\"_blank\" href=\"https://github.com/DIYgod/RSSHub-Radar\">open source</a> under the MIT license and is completely free to use, but as the project grows in size, it also needs to be funded to sustain its maintenance and development",
"sponsored development": "Sponsored development of RSSHub Radar: <a target=\"_blank\" href=\"https://docs.rsshub.app/en/support/\">https://docs.rsshub.app/en/support/</a>",
"update log": "Update log",
"question feedback": "Question Feedback",
"rsshub documentation": "RSSHub Documentation: <a target=\"_blank\" href=\"https://docs.rsshub.app/en/\">https://docs.rsshub.app/en/</a>",
"everything is possible with rss": "Everything is possible with RSS"
}

46
src/translations/es.json Normal file
View File

@ -0,0 +1,46 @@
{
"about": "Acerca de",
"access key": "Clave de acceso",
"click to set": "Hacer click para establecer",
"configuration required if access keys enabled": "La configuración solo es necesaria si las claves de acceso están habilitada. Mantenlo desactivado en caso de duda",
"copied": "Copiado",
"copy": "Copiar",
"current page rss": "RSS en esta página",
"current page RSSHub": "RSSHub para página actual",
"custom rsshub domain": "Dominio RSSHub personalizado",
"current site RSSHub": "RSSHub para website actual",
"documentation": "Info",
"enable": "Activar",
"enable remote rules": "Habilitar reglas remotas",
"enter rsshub domain": "Introduce to dominio de RSSHub, deja el espacio en blanco para utilizar el dominio oficial",
"for more rules join us": "Para más reglas <a target=\"_blank\" href=\"https://docs.rsshub.app/en/joinus/quick-start.html\">únete</a>",
"general": "General",
"generate access code": "Generar código de acceso",
"hot key": "Hot key",
"join rsshub": "Únete a <a href=\"https://docs.rsshub.app/en/\">RSSHub</a> para hacer todo accesible mediante RSS!",
"list of rules": "Lista de reglas",
"local reader": "Lector local",
"notifications and reminders": "Notificaciones y avisos",
"one-click subscription": "Subscripción mediante un click",
"required access key": "Obligatorio, por favor introduct la clave de acceso correcta",
"required address": "Obligatorio. Por favor introduce tu dirección %{service}",
"requires reader support": "Necesita tener un visor como Reeder o algo del estilo instalado ",
"rss not found": "No se han encontrado RSS's",
"rsshub radar options": "RSSHub Radar Configuración",
"rules": "Reglas",
"rules update": "Actualización de reglas",
"settings": "Opciones",
"show corner badge": "Mostrar insignia",
"subscribe to": "Subscribirse a",
"subscribe to local reader": "Subscribirse en lector local",
"successfully saved": "Guardado",
"updated time ago": "%{hours}h %{minutes}m desde la última actualización",
"version": "Versión",
"rsshub radar info": "RSSHub Radar es un proyecto derivado de <a target=\"_blank\" href=\"https://docs.rsshub.app/en/\">RSSHub</a> que permite subscribrirse rápidamente al RSS y/o RSSHub del website actual. Es un proyecto <a target=\"_blank\" href=\"https://github.com/DIYgod/RSSHub-Radar\">open source</a> bajo licencia MIT y su uso es completamete libre y gratuito, pero a medida que el proyecto crece también necesita ser patrocinado para mantener su soporte y desarrollo",
"sponsored development": "Soporta el desarrollo de RSSHub Radar: <a target=\"_blank\" href=\"https://docs.rsshub.app/en/support/\">https://docs.rsshub.app/en/support/</a>",
"update log": "Registro de cambios",
"question feedback": "Feedback e incidencias",
"rsshub documentation": "Documentación de RSSHub: <a target=\"_blank\" href=\"https://docs.rsshub.app/en/\">https://docs.rsshub.app/en/</a>",
"everything is possible with rss": "Todo es posible con RSS"
}

46
src/translations/eu.json Normal file
View File

@ -0,0 +1,46 @@
{
"about": "Honi buruz",
"access key": "Sarrera-gakoa",
"click to set": "Ezartzeko klik egin",
"configuration required if access keys enabled": "Konfigurazioa sarrera-gakoak gaituta daudenean da derrigorrezkoa, ez gaitu ez baduzu egoera ezagutzen",
"copied": "Kopiatuta",
"copy": "Kopiatu",
"current page rss": "Orrialde honetako RSSak",
"current page RSSHub": "Orrialde honetarako RSSHub-ak",
"custom rsshub domain": "RSSHub domeinu pertsonalizatua",
"current site RSSHub": "Gune honetarako RSSHub-ak",
"documentation": "Info",
"enable": "Gaitu",
"enable remote rules": "Hurruneko arauak gaitu",
"enter rsshub domain": "Mesedez sartu zure RSSHub domeinua, domeinu ofiziala erabiltzeko utzi zuriz",
"for more rules join us": "Arau gehiago jasatzeko <a target=\"_blank\" href=\"https://docs.rsshub.app/en/joinus/quick-start.html\">batu zaitez</a>!",
"general": "Orokorra",
"generate access code": "Sarrera kodea sortu",
"hot key": "Hot key",
"join rsshub": "Gehitu zure burua <a href=\"https://docs.rsshub.app/en/\">RSSHub</a>-era dena RSS bitartez jaso ahal izateko!",
"list of rules": "Arau-zerrenda",
"local reader": "Bertako irakurgailua",
"one-click subscription": "Klik bakarreko harpidetza",
"notifications and reminders": "Jakinarazpenak",
"required access key": "Nahitaezkoa, mesedez sartu sarrera-gako zuzena",
"required address": "Nahitaezkoa. Mesedez sartu zure %{service} helbidea",
"requires reader support": "Reeder edo horrelakoren baten moduko irakurgailua behar du",
"rss not found": "Ez da RSSrik aurkitu",
"rsshub radar options": "RSSHub Radar Aukerak",
"rules": "Arauak",
"rules update": "Arauen eguneraketa",
"settings": "Aukerak",
"show corner badge": "Izkinako marka erakutsi",
"subscribe to": "Harpidetu: ",
"subscribe to local reader": "Harpidetu irakurgailu lokalean",
"successfully saved": "Gordeta",
"updated time ago": "%{hours}o %{minutes}m azken eguneraketatik",
"version": "Bertsioa",
"rsshub radar info": "RSSHub Radar momentuko webgunearen RSS eta RSSHub-era modu azkar eta erraz batean harpidetzera laguntzen duen <a target=\"_blank\" href=\"https://docs.rsshub.app/en/\">RSSHub</a>-en proiektu eratorria da. Guztiz erabilera librea du eta MIT lizentziapean dagoen <a target=\"_blank\" href=\"https://github.com/DIYgod/RSSHub-Radar\">kode irekiko</a> proiektua da, baina handitzen doan heinean bere mantentze eta garapenari eusteko finantzazio beharra dauka.",
"sponsored development": "RSSHub Radar laguntzeko: <a target=\"_blank\" href=\"https://docs.rsshub.app/en/support/\">https://docs.rsshub.app/en/support/</a>",
"update log": "Eguneraketa-egunkaria",
"question feedback": "Galdera eta atazak",
"rsshub documentation": "RSSHub dokumentazioa: <a target=\"_blank\" href=\"https://docs.rsshub.app/en/\">https://docs.rsshub.app/en/</a>",
"everything is possible with rss": "Dena da posible RSS-ekin"
}

46
src/translations/zh.json Normal file
View File

@ -0,0 +1,46 @@
{
"about": "关于",
"access key": "访问密钥",
"click to set": "点此设置",
"configuration required if access keys enabled": "只有实例启用了访问密钥,才需要配置,如果你不清楚情况,请保持关闭",
"copied": "已复制",
"copy": "复制",
"current page rss": "当前页面上的 RSS",
"current page RSSHub": "适用于当前页面的 RSSHub",
"custom rsshub domain": "自定义 RSSHub 域名",
"current site RSSHub": "适用于当前网站的 RSSHub",
"documentation": "文档",
"enable": "开启",
"enable remote rules": "远程更新被禁用",
"enter rsshub domain": "请输入你的 RSSHub 域名,留空使用官方域名",
"for more rules join us": "更多规则支持中,快来<a target=\"_blank\" href=\"https://docs.rsshub.app/joinus/quick-start.html\">参与我们</a>吧!",
"general": "常规",
"generate access code": "生成访问码",
"hot key": "快捷键",
"join rsshub": "参与到 <a href=\"https://docs.rsshub.app\">RSSHub</a> 让万物皆可 RSS 吧!",
"list of rules": "规则列表",
"local reader": "本地阅读器",
"notifications and reminders": "通知与提醒",
"one-click subscription": "一键订阅",
"required address": "必填,请输入你的 %{service} 地址",
"required access key": "必填,请输入正确的访问密钥",
"requires reader support": "需要阅读器支持,如 Reeder 等",
"rss not found": "当前页面没有检测到 RSS",
"rsshub radar options": "RSSHub Radar 选项",
"rules": "规则列表",
"rules update": "规则更新",
"settings": "设置",
"show corner badge": "角标提醒",
"subscribe to": "订阅到",
"subscribe to local reader": "订阅到本地阅读器",
"successfully saved": "保存成功",
"updated time ago": "%{hours}小时 %{minutes}分钟 前更新",
"version": "版本",
"rsshub radar info": "RSSHub Radar 是 <a target=\"_blank\" href=\"https://docs.rsshub.app\">RSSHub</a> 的衍生项目,她可以帮助你快速发现和订阅当前网站的 RSS 和 RSSHub项目<a target=\"_blank\" href=\"https://github.com/DIYgod/RSSHub-Radar\">采用 MIT 许可开源</a>,使用完全免费,但是随着项目规模的增长,也需要有相应的资金支持才能持续项目的维护与开发",
"sponsored development": "赞助 RSSHub Radar 的开发: <a target=\"_blank\" href=\"https://docs.rsshub.app/support/\">https://docs.rsshub.app/support/</a>",
"update log": "更新日志",
"question feedback": "问题反馈",
"rsshub documentation": "RSSHub 文档: <a target=\"_blank\" href=\"https://docs.rsshub.app\">https://docs.rsshub.app</a>",
"everything is possible with rss": "万物皆可 RSS"
}

View File

@ -1686,6 +1686,11 @@ big.js@^5.2.2:
resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
bignumber.js@*:
version "9.0.2"
resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.2.tgz#71c6c6bed38de64e24a65ebe16cfcf23ae693673"
integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==
bluebird@^3.1.1:
version "3.5.5"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f"
@ -3070,6 +3075,14 @@ human-signals@^2.1.0:
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
i18n-js@^4.0.0-alpha.14:
version "4.0.0-alpha.14"
resolved "https://registry.yarnpkg.com/i18n-js/-/i18n-js-4.0.0-alpha.14.tgz#a4515f2941bcc20721690b4f995adfc097f72cb5"
integrity sha512-B1irDMAo3c7n3d/qVpVrMmZYXNolEpuUg40ZbXJHTFidGgFNbFPEFk7VMvjmW8934DAyIKdc16WQ55HvwiRgeQ==
dependencies:
bignumber.js "*"
lodash "*"
iconv-lite@^0.4.4:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@ -3514,7 +3527,7 @@ lodash.uniq@^4.5.0:
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
lodash@^4.0.0, lodash@^4.17.15, lodash@^4.2.0, lodash@~4.17.10:
lodash@*, lodash@^4.0.0, lodash@^4.17.15, lodash@^4.2.0, lodash@~4.17.10:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==