generated from dellevin/template
新增中英文
This commit is contained in:
46
static/js/game_my.js
Normal file
46
static/js/game_my.js
Normal file
@@ -0,0 +1,46 @@
|
||||
// ========== 游戏配置数据 ==========
|
||||
const gamesData = [
|
||||
{ name: '《永劫无间》', desc: '我身无拘,武道无穷' },
|
||||
{ name: '《我的世界》', desc: '这个小盒才是我的永远的家' },
|
||||
{ name: '《鬼谷八荒》', desc: '当互动版的修仙小说看了,很好玩.' },
|
||||
{ name: '《江城创业记》', desc: '缝合怪,但是全缝了。很喜欢的一款游戏' },
|
||||
{ name: '《中国式家长》', desc: '我承认我做不好一个孩子,也做不好一个家长' },
|
||||
{ name: '《王者荣耀》', desc: '买了好多皮肤,和朋友玩才是真快乐(已退坑)' },
|
||||
{ name: '《QQ飞车手游》', desc: '氪了好多,有些后悔了(已退坑)' },
|
||||
{ name: '《龙族幻想》', desc: '因为龙族入坑的,小氪(已退坑)' },
|
||||
{ name: '《洛克王国》', desc: '还记得小时候拿压岁钱偷偷买点卡(已退坑)' },
|
||||
{ name: '《造梦西游》', desc: '造梦3从小学玩到大学,现在还时不时的回味一下(已退坑)' },
|
||||
];
|
||||
|
||||
// ========== 渲染游戏列表的函数 ==========
|
||||
function renderGames(gamesArray) {
|
||||
const container = document.getElementById('games-container');
|
||||
if (!container) {
|
||||
console.error("未找到游戏容器 #games-container");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!gamesArray || gamesArray.length === 0) {
|
||||
container.innerHTML = '<div class="memo-error" data-i18n="no_games_data">暂无游戏数据</div>';
|
||||
return;
|
||||
}
|
||||
|
||||
const currentLang = localStorage.getItem(LANG_KEY) || 'zh';
|
||||
|
||||
let html = '';
|
||||
gamesArray.forEach((game,index) => {
|
||||
const nameKey = `game_name_${index}`;
|
||||
const descKey = `game_desc_${index}`;
|
||||
const nameTranslation = translations[currentLang][nameKey] || game.name;
|
||||
const descTranslation = translations[currentLang][descKey] || game.desc;
|
||||
|
||||
html += `
|
||||
<div class="game-item">
|
||||
<div class="game-name">${nameTranslation}</div>
|
||||
<div class="game-desc">${descTranslation}</div>
|
||||
</div>
|
||||
`;
|
||||
});
|
||||
|
||||
container.innerHTML = html;
|
||||
}
|
||||
204
static/js/memos.js
Normal file
204
static/js/memos.js
Normal file
@@ -0,0 +1,204 @@
|
||||
// ==================== 闲言碎语 API 加载与分页功能 ====================
|
||||
(function () {
|
||||
// 确保使用 HTTPS
|
||||
const MEMOS_API_BASE = "https://memos.iletter.top/api/v1/memos";
|
||||
const PAGE_SIZE = 5; // 每页加载的 memo 数量
|
||||
|
||||
let memoData = []; // 存储所有已加载的 memo
|
||||
let allLoaded = false; // 标记是否已加载所有数据
|
||||
let isLoading = false; // 标记是否正在加载,防止重复请求
|
||||
let nextPageToken = null; // 用于 API 分页的 token
|
||||
|
||||
// 获取 DOM 元素
|
||||
const memosTab = document.querySelector('.nav-tab[data-tab="memos"]');
|
||||
const memosContainer = document.getElementById("memos-container");
|
||||
const memosContent = document.getElementById("memos-content");
|
||||
|
||||
// 日期格式化函数 (简单实现)
|
||||
function formatDate(dateStr) {
|
||||
const date = new Date(dateStr);
|
||||
return date.toLocaleString("sv-SE"); // 使用瑞典格式,结果接近 '2026-01-08 00:57:04'
|
||||
}
|
||||
|
||||
// 渲染 Memo 列表 (追加模式)
|
||||
function renderMemos(memos) {
|
||||
if (!memos || memos.length === 0) {
|
||||
// 如果是首次加载且无数据
|
||||
if (memoData.length === 0) {
|
||||
memosContainer.innerHTML =
|
||||
'<div class="memo-error" data-i18n="no_memos_data">暂无数据</div>';
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
let html = "";
|
||||
memos.forEach((memo) => {
|
||||
const formattedDate = formatDate(memo.displayTime);
|
||||
const tagsHtml =
|
||||
memo.tags && memo.tags.length > 0
|
||||
? `<div class="memo-tags">${memo.tags
|
||||
.map((tag) => `<span class="memo-tag">${tag}</span>`)
|
||||
.join("")}</div>`
|
||||
: "";
|
||||
|
||||
// 去掉 \n# 及其后面的部分
|
||||
const contentWithoutHash = memo.content.split("\n#")[0];
|
||||
// --- 新增: 生成附件 HTML ---
|
||||
let attachmentsHtml = "";
|
||||
if (
|
||||
memo.attachments &&
|
||||
Array.isArray(memo.attachments) &&
|
||||
memo.attachments.length > 0
|
||||
) {
|
||||
attachmentsHtml = '<div class="memo-attachments">';
|
||||
memo.attachments.forEach((attachment) => {
|
||||
// 检查附件类型是否为图片
|
||||
if (attachment.type && attachment.type.startsWith("image/")) {
|
||||
// 构造缩略图链接
|
||||
const thumbnailUrl = `https://memos.iletter.top/file/${attachment.name
|
||||
}/${encodeURIComponent(attachment.filename)}?thumbnail=true`;
|
||||
|
||||
attachmentsHtml += `
|
||||
<div class="memo-attachment-item">
|
||||
<img src="${thumbnailUrl}" alt="${attachment.filename
|
||||
}" class="memo-attachment-image" data-full-url="${"https://memos.iletter.top/file/" +
|
||||
attachment.name +
|
||||
"/" +
|
||||
encodeURIComponent(attachment.filename)
|
||||
}">
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
// 如果需要处理其他类型的附件,可以在这里添加 else if 分支
|
||||
else {
|
||||
attachmentsHtml += `<a href="https://memos.iletter.top/file/${attachment.name
|
||||
}/${encodeURIComponent(attachment.filename)}" target="_blank">${attachment.filename
|
||||
}</a>`;
|
||||
}
|
||||
});
|
||||
attachmentsHtml += "</div>";
|
||||
}
|
||||
|
||||
html += `
|
||||
<div class="memo-item">
|
||||
<div class="memo-date">${formattedDate}</div>
|
||||
<div class="memo-content">${contentWithoutHash}</div>
|
||||
${attachmentsHtml}
|
||||
${tagsHtml}
|
||||
</div>
|
||||
`;
|
||||
});
|
||||
|
||||
// 如果是首次加载,则替换容器内容
|
||||
if (memoData.length === memos.length) {
|
||||
memosContainer.innerHTML = html;
|
||||
} else {
|
||||
// 否则追加到现有内容之后
|
||||
memosContainer.insertAdjacentHTML("beforeend", html);
|
||||
}
|
||||
}
|
||||
|
||||
// 加载 Memo 数据 (分页) - 修正后的函数
|
||||
async function loadMemos() {
|
||||
// 防止重复加载或已加载完毕时再次加载
|
||||
if (isLoading || allLoaded) {
|
||||
console.log("加载状态检查:", { isLoading, allLoaded });
|
||||
return;
|
||||
}
|
||||
isLoading = true;
|
||||
|
||||
// 显示加载状态 (仅在首次加载时替换,后续加载追加)
|
||||
if (memoData.length === 0) {
|
||||
memosContainer.innerHTML =
|
||||
'<div class="memo-loading" data-i18n="loading_memos">正在加载...</div>';
|
||||
}
|
||||
|
||||
try {
|
||||
// 构建 API 请求 URL,确保 pageToken 不为 null 时才添加
|
||||
const url = new URL(MEMOS_API_BASE);
|
||||
url.searchParams.set("pageSize", PAGE_SIZE.toString());
|
||||
url.searchParams.set("orderBy", "display_time desc");
|
||||
if (nextPageToken) {
|
||||
url.searchParams.set("pageToken", nextPageToken);
|
||||
}
|
||||
|
||||
// console.log("请求 URL:", url.toString()); // 调试信息
|
||||
|
||||
const response = await fetch(url);
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! status: ${response.status}`);
|
||||
}
|
||||
const data = await response.json();
|
||||
// console.log("API 响应:", data); // 调试信息
|
||||
|
||||
const newMemos = data.memos || [];
|
||||
memoData = memoData.concat(newMemos);
|
||||
|
||||
// --- 修复的关键逻辑 ---
|
||||
// 检查 API 返回的 next_page_token 是否为空字符串
|
||||
if (data.nextPageToken === "") {
|
||||
allLoaded = true; // 标记为已全部加载
|
||||
nextPageToken = null; // 清空 token
|
||||
console.log("检测到 nextPageToken 为空,已全部加载。");
|
||||
} else {
|
||||
// 如果不为空,更新 token 以供下次使用
|
||||
nextPageToken = data.nextPageToken;
|
||||
}
|
||||
|
||||
// 渲染新加载的数据
|
||||
renderMemos(newMemos);
|
||||
|
||||
// --- 修复的关键逻辑 ---
|
||||
// 只有在尚未全部加载完时,才渲染加载更多按钮
|
||||
if (!allLoaded) {
|
||||
renderLoadMoreButton();
|
||||
} else {
|
||||
const loadMoreContainer = document.getElementById("load-more-btn");
|
||||
if (loadMoreContainer) {
|
||||
loadMoreContainer.remove();
|
||||
}
|
||||
// 数据全部加载完后,可以显示一个提示
|
||||
memosContainer.insertAdjacentHTML(
|
||||
"beforeend",
|
||||
'<div class="memo-error" data-i18n="all_memos_loaded">已加载全部数据</div>'
|
||||
);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("加载闲言碎语失败:", error);
|
||||
// 如果是首次加载失败,替换内容
|
||||
if (memoData.length === 0) {
|
||||
memosContainer.innerHTML = `<div class="memo-error" data-i18n="memos_load_error">加载失败: ${error.message}</div>`;
|
||||
} else {
|
||||
// 如果是追加加载失败,提示错误,但保留已有内容
|
||||
memosContainer.insertAdjacentHTML(
|
||||
"beforeend",
|
||||
`<div class="memo-error" data-i18n="memos_load_error_append">加载失败: ${error.message}</div>`
|
||||
);
|
||||
}
|
||||
} finally {
|
||||
isLoading = false;
|
||||
}
|
||||
}
|
||||
|
||||
// 渲染“加载更多”按钮
|
||||
function renderLoadMoreButton() {
|
||||
const existingButton = document.getElementById("load-more-btn");
|
||||
if (existingButton) existingButton.remove();
|
||||
const loadMoreButton = document.createElement("div");
|
||||
loadMoreButton.id = "load-more-btn";
|
||||
loadMoreButton.className = "memo-pagination";
|
||||
loadMoreButton.innerHTML = `<button class="memo-page-btn" onclick="loadMemos()" data-i18n="load_more_button">加载更多</button>`;
|
||||
memosContainer.appendChild(loadMoreButton);
|
||||
}
|
||||
|
||||
// 为加载更多按钮绑定事件 (使用全局函数)
|
||||
window.loadMemos = loadMemos;
|
||||
|
||||
// 当“闲言碎语”标签被点击时加载数据
|
||||
memosTab.addEventListener("click", function () {
|
||||
// 只有在内容是空的或者首次加载时才调用
|
||||
if (memoData.length === 0) {
|
||||
loadMemos();
|
||||
}
|
||||
});
|
||||
})();
|
||||
68
static/js/tools_my.js
Normal file
68
static/js/tools_my.js
Normal file
@@ -0,0 +1,68 @@
|
||||
// ========== 工具配置数据 ==========
|
||||
// 将工具数据集中管理
|
||||
const toolsData = [
|
||||
{ name: 'Rolan', desc: '应用启动器,从大学用到现在' },
|
||||
{ name: 'Chrome', desc: '确实好用,正在向着屎迈进' },
|
||||
{ name: 'VS Code', desc: '代码编辑器,轻量?高效!' },
|
||||
{ name: 'IntelliJ IDEA', desc: 'JAVA代码编辑器' },
|
||||
{ name: 'PyCharm', desc: 'python代码编辑器' },
|
||||
{ name: 'Android Studio', desc: '安卓软件开发,一直在学(新建文件夹)' },
|
||||
{ name: 'HbuilderX', desc: '写小程序真心不错,vue+js很棒!减少了学习压力' },
|
||||
{ name: 'Navicate', desc: '链接mysql的神器,sqlyog是谁?真不熟。' },
|
||||
{ name: 'Xshell', desc: '链接服务器简单易用配合xftp很好用' },
|
||||
{ name: 'Postman', desc: 'API测试与调试工具' },
|
||||
{ name: 'VMware', desc: '虚拟机管理,工具有毒?先拿这个试试' },
|
||||
{ name: 'PhotoShop', desc: 'ps图片专用蒙版套索十分好用' },
|
||||
{ name: 'Obsidian', desc: '知识管理,双链接笔记。本地笔记爱好者的福音。' },
|
||||
{ name: 'Typora', desc: 'Markdown编辑器,简洁美观。' },
|
||||
{ name: 'Docker', desc: '容器化部署,一个docker-compose走天下' },
|
||||
{ name: 'Premiere Pro', desc: '剪辑视频调音做简单的效果,简单易用' },
|
||||
{ name: 'After Effects', desc: '特效制作神器,就是对显卡和cpu比较不友好' },
|
||||
{ name: 'CheatEngine', desc: '风灵月影没出来就用它,亦是内存hook的极佳选择' },
|
||||
{ name: 'x64dbg', desc: '孩子!你想掌握逆向之力嘛!先从x64dbg开始吧!' },
|
||||
{ name: 'WireGuard', desc: '组网神器,去你妹的向日葵,去你妹的todesk' },
|
||||
{ name: 'Syncthing', desc: '文件同步,超级好用,同步笔记的不错选择。' },
|
||||
{ name: 'NeatReader', desc: '看书软件,有点后悔花了188买了永久' },
|
||||
{ name: 'Corel VideoStudio', desc: '万恶的苏州思杰马克丁!还我会声会影' },
|
||||
{ name: '网易云音乐', desc: '每天听,每天用,尊贵的年费vip+版权破解Unblock Netease' },
|
||||
{ name: '喜马拉雅听书', desc: '每天听,每天用。三体,穷鬼的上下两千年等优秀书籍' },
|
||||
{ name: '一本日记', desc: '正经人谁写日记啊!' },
|
||||
{ name: 'Ollama', desc: '本地部署对话AI,微调模型,32b是4070遭不住' },
|
||||
{ name: 'AnythingLLM', desc: 'AI知识库的极佳选择,比我自己微调+向量化好' },
|
||||
{ name: 'UVR5', desc: '处理音频的神器,想当年苦逼的分离音频算什么!' },
|
||||
{ name: 'Remote Desktop Manager', desc: '超级强大的远控软件' },
|
||||
{ name: 'SyncClipboard', desc: '剪切板同步,好用,爱用。再也不用微信消息复制粘贴了' },
|
||||
{ name: 'QtScrcpy', desc: '局域网控制手机神器,远程adb牛逼' },
|
||||
];
|
||||
|
||||
// ========== 渲染工具列表的函数 ==========
|
||||
function renderTools(toolsArray) {
|
||||
const container = document.getElementById('tools-container');
|
||||
if (!container) {
|
||||
console.error("未找到工具容器 #tools-container");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!toolsArray || toolsArray.length === 0) {
|
||||
container.innerHTML = '<div class="memo-error" data-i18n="no_tools_data">暂无工具数据</div>'; // 可选:无数据提示
|
||||
return;
|
||||
}
|
||||
const currentLang = localStorage.getItem(LANG_KEY) || 'zh';
|
||||
|
||||
let html = '';
|
||||
toolsArray.forEach((tool,index) => {
|
||||
const nameKey = `tool_name_${index}`;
|
||||
const descKey = `tool_desc_${index}`;
|
||||
const nameTranslation = translations[currentLang][nameKey] || tool.name; // 如果没有翻译,则回退到原始数据
|
||||
const descTranslation = translations[currentLang][descKey] || tool.desc;
|
||||
|
||||
html += `
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">${nameTranslation}</div>
|
||||
<div class="tool-desc">${descTranslation}</div>
|
||||
</div>
|
||||
`;
|
||||
});
|
||||
|
||||
container.innerHTML = html;
|
||||
}
|
||||
278
static/js/translations.js
Normal file
278
static/js/translations.js
Normal file
@@ -0,0 +1,278 @@
|
||||
const translations = {
|
||||
'zh': { // 中文
|
||||
'page_title': '白荼 - BAITU',
|
||||
'nav_about': '关于我',
|
||||
'nav_website': '我的网站',
|
||||
'nav_tools': '常用工具',
|
||||
'nav_games': '常玩游戏',
|
||||
'nav_memos': '闲言碎语',
|
||||
'nav_contact': '联系我',
|
||||
'hello': '你好',
|
||||
'greeting': '见字如面,展信舒颜。',
|
||||
'my_name': '白荼',
|
||||
'about_me_p1': '我叫<strong>白荼</strong>,河北衡水人,土生土长的北方汉子,毕业于一所不知名的二本院校。信息管理与信息系统专业。自学java、vue、linux、mysql、python等开发技术和一些软件逆向技术,同时还略懂些PS图片、PR视频、AE特效制作。做过系统,剪过网线,搞过plc耍过单片机,维护修理过服务器,运营过公众号和网站等等。可谓是会,但只会一点点。别人都觉得我是个大佬,其实我就是个小菜鸡。但我不会气馁,努力成为一个大佬的。正如永劫无间刘炼的一句话“天下万般之绝学,莫过于恒心。”',
|
||||
'about_me_p2': '平时的爱好也就是玩玩游戏,看看书,刷刷动漫,不爱出门,肥宅一个。讨厌重复简单的工作,会想办法偷懒写写自己的顺手的小工具什么的,毕竟懒惰是我的生产力。我也经常混迹于各大网络论坛博客并在各个技术博主下面直呼"大佬666"、"大佬牛牛牛"。自己的博客也在断断续续中更新。主要是记录生活随笔和碰到的技术难题。',
|
||||
'about_me_p3': '本站秉承简约风格,采用纯HTML,Umami做网站底部的uv/pv ,闲言碎语模块使用memos接口。同时使用堡塔云WAF防护,nginx缓存加速网站静态资源。如果您有兴趣,可以直接下载本站的 <a href="https://gitea.iletter.top/dellevin/BaiTu-homepage" target="_blank">https://gitea.iletter.top/dellevin/BaiTu-homepage </a> 并使用。',
|
||||
'about_me_p4': '作为一个99年的码农,很庆幸我在工作之后还对技术有着极大的热情!如果你也对技术有着同样的兴趣,也很希望认识你!一同进步共同成长!',
|
||||
'my_website_h2': '我的网站',
|
||||
'personal_blog_h3': '个人博客',
|
||||
'personal_blog_link1': 'ittoolman.top - Github托管',
|
||||
'personal_blog_link2': 'blog.iletter.top - typecho用户的最后坚守',
|
||||
'online_apps_h3': '在线应用',
|
||||
'online_app_link1': '简单图床 - 图床工具',
|
||||
'online_app_link2': 'Gitea - 私人git托管仓库',
|
||||
'online_app_link3': 'OpenList - 在线云盘合集',
|
||||
'online_app_link4': 'Beszel - 服务器监控',
|
||||
'contact_me_h2': '联系我',
|
||||
'contact_intro': '欢迎通过以下方式与我联系:',
|
||||
'email_label': '邮箱:',
|
||||
'wechat_label': '微信:',
|
||||
'qq_label': '扣扣:',
|
||||
'address_label': '地址:',
|
||||
'address_value': '山东省·济南市·市中区',
|
||||
'social_media_h3': '社交媒体',
|
||||
'social_link1': 'GitHub',
|
||||
'social_link2': '微博',
|
||||
'social_link3': '知乎',
|
||||
'social_link4': 'B站',
|
||||
'social_link5': '52pojie',
|
||||
'leave_message_h3': '留言',
|
||||
'leave_message_p': '如果你有任何问题或建议,欢迎<a href="https://blog.iletter.top/401.html" target="_blank">点击此链接</a>去我的博客下面给我留言!',
|
||||
'leave_message_link': '点击此链接',
|
||||
'my_tools_h2': '我的工具',
|
||||
'loading_tools': '正在加载工具列表...',
|
||||
'my_games_h2': '我常玩的游戏',
|
||||
'loading_games': '正在加载游戏列表...',
|
||||
'memos_h2': '闲言碎语',
|
||||
'loading_memos': '正在加载...',
|
||||
'footer_text': '我虽然是个废物,但我仍然选择用自己喜欢的方式度过自己的余生',
|
||||
'visitor_count_label': '本站访客数 :',
|
||||
'visit_count_label': '本站总访问量 :',
|
||||
|
||||
// --- 新增: 游戏翻译 (zh) ---
|
||||
'game_name_0': '《永劫无间》',
|
||||
'game_desc_0': '我身无拘,武道无穷',
|
||||
'game_name_1': '《我的世界》',
|
||||
'game_desc_1': '这个小盒才是我的永远的家',
|
||||
'game_name_2': '《鬼谷八荒》',
|
||||
'game_desc_2': '当互动版的修仙小说看了,很好玩.',
|
||||
'game_name_3': '《江城创业记》',
|
||||
'game_desc_3': '缝合怪,但是全缝了。很喜欢的一款游戏',
|
||||
'game_name_4': '《中国式家长》',
|
||||
'game_desc_4': '我承认我做不好一个孩子,也做不好一个家长',
|
||||
'game_name_5': '《王者荣耀》',
|
||||
'game_desc_5': '买了好多皮肤,和朋友玩才是真快乐(已退坑)',
|
||||
'game_name_6': '《QQ飞车手游》',
|
||||
'game_desc_6': '氪了好多,有些后悔了(已退坑)',
|
||||
'game_name_7': '《龙族幻想》',
|
||||
'game_desc_7': '因为龙族入坑的,小氪(已退坑)',
|
||||
'game_name_8': '《洛克王国》',
|
||||
'game_desc_8': '还记得小时候拿压岁钱偷偷买点卡(已退坑)',
|
||||
'game_name_9': '《造梦西游》',
|
||||
'game_desc_9': '造梦3从小学玩到大学,现在还时不时的回味一下(已退坑)',
|
||||
|
||||
// --- 新增: 工具翻译 (zh) ---
|
||||
'tool_name_0': 'Rolan',
|
||||
'tool_desc_0': '应用启动器,从大学用到现在',
|
||||
'tool_name_1': 'Chrome',
|
||||
'tool_desc_1': '确实好用,正在向着屎迈进',
|
||||
'tool_name_2': 'VS Code',
|
||||
'tool_desc_2': '代码编辑器,轻量?高效!',
|
||||
'tool_name_3': 'IntelliJ IDEA',
|
||||
'tool_desc_3': 'JAVA代码编辑器',
|
||||
'tool_name_4': 'PyCharm',
|
||||
'tool_desc_4': 'python代码编辑器',
|
||||
'tool_name_5': 'Android Studio',
|
||||
'tool_desc_5': '安卓软件开发,一直在学(新建文件夹)',
|
||||
'tool_name_6': 'HbuilderX',
|
||||
'tool_desc_6': '写小程序真心不错,vue+js很棒!减少了学习压力',
|
||||
'tool_name_7': 'Navicate',
|
||||
'tool_desc_7': '链接mysql的神器,sqlyog是谁?真不熟。',
|
||||
'tool_name_8': 'Xshell',
|
||||
'tool_desc_8': '链接服务器简单易用配合xftp很好用',
|
||||
'tool_name_9': 'Postman',
|
||||
'tool_desc_9': 'API测试与调试工具',
|
||||
'tool_name_10': 'VMware',
|
||||
'tool_desc_10': '虚拟机管理,工具有毒?先拿这个试试',
|
||||
'tool_name_11': 'PhotoShop',
|
||||
'tool_desc_11': 'ps图片专用蒙版套索十分好用',
|
||||
'tool_name_12': 'Obsidian',
|
||||
'tool_desc_12': '知识管理,双链接笔记。本地笔记爱好者的福音。',
|
||||
'tool_name_13': 'Typora',
|
||||
'tool_desc_13': 'Markdown编辑器,简洁美观。',
|
||||
'tool_name_14': 'Docker',
|
||||
'tool_desc_14': '容器化部署,一个docker-compose走天下',
|
||||
'tool_name_15': 'Premiere Pro',
|
||||
'tool_desc_15': '剪辑视频调音做简单的效果,简单易用',
|
||||
'tool_name_16': 'After Effects',
|
||||
'tool_desc_16': '特效制作神器,就是对显卡和cpu比较不友好',
|
||||
'tool_name_17': 'CheatEngine',
|
||||
'tool_desc_17': '风灵月影没出来就用它,亦是内存hook的极佳选择',
|
||||
'tool_name_18': 'x64dbg',
|
||||
'tool_desc_18': '孩子!你想掌握逆向之力嘛!先从x64dbg开始吧!',
|
||||
'tool_name_19': 'WireGuard',
|
||||
'tool_desc_19': '组网神器,去你妹的向日葵,去你妹的todesk',
|
||||
'tool_name_20': 'Syncthing',
|
||||
'tool_desc_20': '文件同步,超级好用,同步笔记的不错选择。',
|
||||
'tool_name_21': 'NeatReader',
|
||||
'tool_desc_21': '看书软件,有点后悔花了188买了永久',
|
||||
'tool_name_22': 'Corel VideoStudio',
|
||||
'tool_desc_22': '万恶的苏州思杰马克丁!还我会声会影',
|
||||
'tool_name_23': '网易云音乐',
|
||||
'tool_desc_23': '每天听,每天用,尊贵的年费vip+版权破解Unblock Netease',
|
||||
'tool_name_24': '喜马拉雅听书',
|
||||
'tool_desc_24': '每天听,每天用。三体,穷鬼的上下两千年等优秀书籍',
|
||||
'tool_name_25': '一本日记',
|
||||
'tool_desc_25': '正经人谁写日记啊!',
|
||||
'tool_name_26': 'Ollama',
|
||||
'tool_desc_26': '本地部署对话AI,微调模型,32b是4070遭不住',
|
||||
'tool_name_27': 'AnythingLLM',
|
||||
'tool_desc_27': 'AI知识库的极佳选择,比我自己微调+向量化好',
|
||||
'tool_name_28': 'UVR5',
|
||||
'tool_desc_28': '处理音频的神器,想当年苦逼的分离音频算什么!',
|
||||
'tool_name_29': 'Remote Desktop Manager',
|
||||
'tool_desc_29': '超级强大的远控软件',
|
||||
'tool_name_30': 'SyncClipboard',
|
||||
'tool_desc_30': '剪切板同步,好用,爱用。再也不用微信消息复制粘贴了',
|
||||
'tool_name_31': 'QtScrcpy',
|
||||
'tool_desc_31': '局域网控制手机神器,远程adb牛逼',
|
||||
},
|
||||
'en': { // 英文
|
||||
'page_title': 'BaiTu - BAITU',
|
||||
'nav_about': 'About Me',
|
||||
'nav_website': 'My Websites',
|
||||
'nav_tools': 'Tools',
|
||||
'nav_games': 'Games',
|
||||
'nav_memos': 'Memos',
|
||||
'nav_contact': 'Contact Me',
|
||||
'hello': 'Hello',
|
||||
'greeting': '',
|
||||
'my_name': 'BaiTu',
|
||||
'about_me_p1': 'My name is <strong>BaiTu</strong>, from Hengshui, Hebei, a native northerner. I graduated from an obscure second-tier university with a major in Information Management and Information Systems. I self-studied development technologies like Java, Vue, Linux, MySQL, Python, and some software reverse engineering techniques. I also have basic skills in PS, PR, and AE. I have experience with systems, networking, PLCs, microcontrollers, server maintenance, and managing public accounts and websites. In short, I know a little bit about many things. Others might think I\'m an expert, but actually, I\'m just a rookie. However, I won\'t give up and will strive to become an expert. As Liu Lian from Yu Jie Wu Jian said, "The most important skill in the world is perseverance."',
|
||||
'about_me_p2': 'My hobbies usually involve playing games, reading books, watching anime, and I prefer staying indoors. I hate repetitive and simple work, so I often write small tools to make life easier because laziness drives my productivity. I frequently lurk on various forums and blogs, shouting "Expert 666" or "Expert Amazing" under tech bloggers. My own blog updates sporadically, mainly recording daily life notes and technical challenges encountered.',
|
||||
'about_me_p3': 'This site follows a minimalist style, using pure HTML. Umami tracks UV/PV at the bottom. The Memos section uses the Memos API. It also employs Baota Cloud WAF protection and nginx caching for static resources. If you are interested, you can directly download the source code from <a href="https://gitea.iletter.top/dellevin/BaiTu-homepage" target="_blank">https://gitea.iletter.top/dellevin/BaiTu-homepage </a> and use it.',
|
||||
'about_me_p4': 'As a 99er programmer, I am glad to still have great passion for technology after starting work! If you share the same interest in technology, I would love to meet you! Let\'s progress and grow together!',
|
||||
'my_website_h2': 'My Websites',
|
||||
'personal_blog_h3': 'Personal Blogs',
|
||||
'personal_blog_link1': 'ittoolman.top - Hosted on Github',
|
||||
'personal_blog_link2': 'blog.iletter.top - Last Stand for Typecho Users',
|
||||
'online_apps_h3': 'Online Applications',
|
||||
'online_app_link1': 'Simple Image Hosting - Image Uploader Tool',
|
||||
'online_app_link2': 'Gitea - Private Git Repository',
|
||||
'online_app_link3': 'OpenList - Online Cloud Disk Collection',
|
||||
'online_app_link4': 'Beszel - Server Monitoring',
|
||||
'contact_me_h2': 'Contact Me',
|
||||
'contact_intro': 'Feel free to reach out via the following methods:',
|
||||
'email_label': 'Email:',
|
||||
'wechat_label': 'WeChat:',
|
||||
'qq_label': 'QQ:',
|
||||
'address_label': 'Address:',
|
||||
'address_value': 'Shizhong District, Jinan, Shandong Province',
|
||||
'social_media_h3': 'Social Media',
|
||||
'social_link1': 'GitHub',
|
||||
'social_link2': 'Weibo',
|
||||
'social_link3': 'Zhihu',
|
||||
'social_link4': 'Bilibili',
|
||||
'social_link5': '52pojie',
|
||||
'leave_message_h3': 'Leave a Message',
|
||||
'leave_message_p': 'If you have any questions or suggestions, feel free to <a href="https://blog.iletter.top/401.html" target="_blank">click here</a> to leave me a message on my blog!',
|
||||
'leave_message_link': 'click here',
|
||||
'my_tools_h2': 'My Tools',
|
||||
'loading_tools': 'Loading tools list...',
|
||||
'my_games_h2': 'Games I Often Play',
|
||||
'loading_games': 'Loading games list...',
|
||||
'memos_h2': 'Memos',
|
||||
'loading_memos': 'Loading...',
|
||||
'footer_text': 'I still choose to spend the rest of my life in my own way although I am a failure.',
|
||||
'visitor_count_label': 'Visitors:',
|
||||
'visit_count_label': 'Total Visits:',
|
||||
|
||||
// --- 新增: 游戏翻译 (en) ---
|
||||
'game_name_0': 'Naraka: Bladepoint',
|
||||
'game_desc_0': 'I am unrestricted, martial arts are boundless',
|
||||
'game_name_1': 'Minecraft',
|
||||
'game_desc_1': 'This little box is my forever home',
|
||||
'game_name_2': 'Gates of Havoc',
|
||||
'game_desc_2': 'Played like an interactive Xianxia novel, quite fun.',
|
||||
'game_name_3': 'Jiangcheng Entrepreneurship Story',
|
||||
'game_desc_3': 'A mashup game, but fully mashed. But a favorite game of mine.',
|
||||
'game_name_4': 'Chinese Parents',
|
||||
'game_desc_4': 'I admit I\'m not good at being a child, nor a parent.',
|
||||
'game_name_5': 'Arena of Valor',
|
||||
'game_desc_5': 'Bought many skins, real joy comes from playing with friends (quit now).',
|
||||
'game_name_6': 'QQ Speed Mobile',
|
||||
'game_desc_6': 'Spent a lot, now a bit regretful (quit now).',
|
||||
'game_name_7': 'Dragon Raja',
|
||||
'game_desc_7': 'Got into it because of the Dragon Raja series, spent a little (quit now).',
|
||||
'game_name_8': 'Roco Kingdom',
|
||||
'game_desc_8': 'Remember secretly buying cards with New Year money as a kid (quit now).',
|
||||
'game_name_9': 'Dream Journey West',
|
||||
'game_desc_9': 'Playing Dream Journey 3 from elementary to college, still enjoy it occasionally (quit now).',
|
||||
|
||||
// --- 新增: 工具翻译 (en) ---
|
||||
'tool_name_0': 'Rolan',
|
||||
'tool_desc_0': 'App launcher, used since college',
|
||||
'tool_name_1': 'Chrome',
|
||||
'tool_desc_1': 'Truly useful, but heading towards poop.',
|
||||
'tool_name_2': 'VS Code',
|
||||
'tool_desc_2': 'Code editor, lightweight? Efficient!',
|
||||
'tool_name_3': 'IntelliJ IDEA',
|
||||
'tool_desc_3': 'JAVA Code Editor',
|
||||
'tool_name_4': 'PyCharm',
|
||||
'tool_desc_4': 'Python Code Editor',
|
||||
'tool_name_5': 'Android Studio',
|
||||
'tool_desc_5': 'Android app development, always learning (create new folder).',
|
||||
'tool_name_6': 'HbuilderX',
|
||||
'tool_desc_6': 'Great for writing mini-programs, Vue+JS is awesome! Reduces learning pressure.',
|
||||
'tool_name_7': 'Navicat',
|
||||
'tool_desc_7': 'A神器 for connecting MySQL, what\'s SQLyog? Never heard of it.',
|
||||
'tool_name_8': 'Xshell',
|
||||
'tool_desc_8': 'Easy to connect to servers, works well with Xftp.',
|
||||
'tool_name_9': 'Postman',
|
||||
'tool_desc_9': 'API testing and debugging tool',
|
||||
'tool_name_10': 'VMware',
|
||||
'tool_desc_10': 'Virtual machine management, tool toxic? Try this first.',
|
||||
'tool_name_11': 'Photoshop',
|
||||
'tool_desc_11': 'PS image dedicated, masks and lasso are very useful.',
|
||||
'tool_name_12': 'Obsidian',
|
||||
'tool_desc_12': 'Knowledge management, bidirectional linking notes. A blessing for local note lovers.',
|
||||
'tool_name_13': 'Typora',
|
||||
'tool_desc_13': 'Markdown editor, simple and beautiful.',
|
||||
'tool_name_14': 'Docker',
|
||||
'tool_desc_14': 'Containerized deployment, docker-compose rules them all.',
|
||||
'tool_name_15': 'Premiere Pro',
|
||||
'tool_desc_15': 'Video editing, audio adjustment, simple effects, easy to use.',
|
||||
'tool_name_16': 'After Effects',
|
||||
'tool_desc_16': 'Special effects creation神器, but not friendly to GPU and CPU.',
|
||||
'tool_name_17': 'Cheat Engine',
|
||||
'tool_desc_17': 'Used it before Feng Ling Yue Ying came out, also a great choice for memory hooks.',
|
||||
'tool_name_18': 'x64dbg',
|
||||
'tool_desc_18': 'Kid! Want to master reverse power? Start with x64dbg!',
|
||||
'tool_name_19': 'WireGuard',
|
||||
'tool_desc_19': 'Networking神器, screw Sunflower, screw Todesk.',
|
||||
'tool_name_20': 'Syncthing',
|
||||
'tool_desc_20': 'File sync, super handy, great choice for syncing notes.',
|
||||
'tool_name_21': 'NeatReader',
|
||||
'tool_desc_21': 'Reading software, a bit regret spending 188 for lifetime.',
|
||||
'tool_name_22': 'Corel VideoStudio',
|
||||
'tool_desc_22': 'Evil Suzhou CorelMark! Give me back Pinnacle Studio.',
|
||||
'tool_name_23': 'Netease Cloud Music',
|
||||
'tool_desc_23': 'Listen and use daily, premium annual VIP + copyright unlock Unblock Netease.',
|
||||
'tool_name_24': 'Ximalaya Audiobook',
|
||||
'tool_desc_24': 'Listen and use daily. Great books like Three Body, Poor Man\'s Past and Future etc.',
|
||||
'tool_name_25': 'A Diary',
|
||||
'tool_desc_25': 'Who writes a diary anyway?!',
|
||||
'tool_name_26': 'Ollama',
|
||||
'tool_desc_26': 'Local AI deployment, fine-tuning models, 32b is too much for 4070.',
|
||||
'tool_name_27': 'AnythingLLM',
|
||||
'tool_desc_27': 'An excellent choice for AI knowledge base, better than my own fine-tuning + vectorization.',
|
||||
'tool_name_28': 'UVR5',
|
||||
'tool_desc_28': 'Audio processing神器, what hardships were separating audio back then!',
|
||||
'tool_name_29': 'Remote Desktop Manager',
|
||||
'tool_desc_29': 'Super powerful remote control software.',
|
||||
'tool_name_30': 'SyncClipboard',
|
||||
'tool_desc_30': 'Clipboard sync, handy, love it. No more copying/pasting via WeChat messages.',
|
||||
'tool_name_31': 'QtScrcpy',
|
||||
'tool_desc_31': 'LAN phone control tool, remote adb is awesome.',
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user