update:英文版代码备份

This commit is contained in:
2026-11-05 14:49:42 +08:00
parent 419cefd00e
commit 53ac4473f9
142 changed files with 1777 additions and 1604 deletions
+27 -26
View File
@@ -1,3 +1,4 @@
import { t as translate } from "@/locales";
import { formatTimestamp } from "@/util";
const loadImage = (src) =>
@@ -277,7 +278,7 @@ export const generateShareImage = async (canvasId, data) => {
renderText(ctx, data.user.name, 18, "#000", 84, 36);
renderText(ctx, data.recordDate, 9, "#fff", 348, 23, "center", 39);
renderText(ctx, "今日打卡", 14, "#fff", 336, 38, "center", 39);
renderText(ctx, translate('today_s_check_in'), 9, "#fff", 336, 38, "center", 39);
// 文本标签
let cursorX = 84;
@@ -295,7 +296,7 @@ export const generateShareImage = async (canvasId, data) => {
);
cursorX = drawTextBoxesLine(
ctx,
String(pointBook.distance) + " 米",
String(pointBook.distance) + translate('m'),
cursorX + 6,
58,
9,
@@ -318,9 +319,9 @@ export const generateShareImage = async (canvasId, data) => {
2
);
renderText(ctx, "落点稳定性", 13, "#999", 25, 110);
renderText(ctx, "黄心率", 13, "#999", 145, 110);
renderText(ctx, "10环数", 13, "#999", 262, 110);
renderText(ctx, translate('shot_grouping'), 13, "#999", 25, 110);
renderText(ctx, translate('gold_hit_rate'), 13, "#999", 145, 110);
renderText(ctx, translate('10s'), 13, "#999", 262, 110);
renderText(
ctx,
@@ -340,8 +341,8 @@ export const generateShareImage = async (canvasId, data) => {
);
renderText(ctx, arrowData.tenRings, 15, "#000", 262, 133);
renderText(ctx, "平均环数", 13, "#999", 25, 175);
renderText(ctx, "总环数", 13, "#999", 145, 175);
renderText(ctx, translate('average_score'), 13, "#999", 25, 175);
renderText(ctx, translate('total_score'), 13, "#999", 145, 175);
renderText(
ctx,
Number(arrowData.averageRing.toFixed(2)),
@@ -361,7 +362,7 @@ export const generateShareImage = async (canvasId, data) => {
if (hasPoint) {
drawRoundedRect(ctx, 20, 230, 5, 15, 5, "#FED847");
renderText(ctx, "落点分布", 13, "#999", 32, 242);
renderText(ctx, translate('shot_distribution'), 13, "#999", 32, 242);
const bowSrc = await loadImage(pointBook.bowtargetType.iconPng);
const bowImg = await loadCanvasImage(canvas, bowSrc);
@@ -421,7 +422,7 @@ export const generateShareImage = async (canvasId, data) => {
);
});
renderText(ctx, "环值", 9, "#999", 15, ringBarHeight - 1);
renderText(ctx, translate('score'), 9, "#999", 15, ringBarHeight - 1);
ringNames.forEach((ring, index) => {
renderText(
ctx,
@@ -441,16 +442,16 @@ export const generateShareImage = async (canvasId, data) => {
const qrcodeImg = await loadCanvasImage(canvas, qrcodeSrc);
ctx.drawImage(qrcodeImg, 40, hasPoint ? 715 : 358, 68, 68);
renderText(ctx, "射灵星球", 18, "#333", 120, hasPoint ? 734 : 380);
renderText(ctx, translate('sheling_planet'), 18, "#333", 120, hasPoint ? 734 : 380);
renderText(
ctx,
"高效记录每一箭,快来一起打卡吧!",
translate('track_every_arrow_join_us'),
13,
"#999",
120,
hasPoint ? 756 : 402
);
renderText(ctx, "扫码打卡", 13, "#FFA118", 142, hasPoint ? 777 : 422);
renderText(ctx, translate('scan_to_check_in'), 13, "#FFA118", 142, hasPoint ? 777 : 422);
const pointImg = await loadCanvasImage(canvas, "https://static.shelingxingqiu.com/shootmini/static/point.png");
ctx.drawImage(pointImg, 120, hasPoint ? 765 : 410, 18, 14);
// 2D 即时绘制,无需 ctx.draw()
@@ -539,10 +540,10 @@ export const sharePointData = async (canvasId, data) => {
const bubble2Img = await loadCanvasImage(canvas, bubble2Src);
const bubble3Img = await loadCanvasImage(canvas, bubble3Src);
ctx.drawImage(bubble1Img, 10, 88, 143, 87);
renderText(ctx, "本周箭数", 14, "#FDA103", 84, 116, "center");
renderText(ctx, translate('arrows_this_week'), 14, "#FDA103", 84, 116, "center");
renderText(ctx, data.weekArrow, 36, "#FA2A2A", 84, 152, "center");
ctx.drawImage(bubble2Img, 65, 220, 143, 87);
renderText(ctx, "本周消耗", 14, "#FDA103", 139, 248, "center");
renderText(ctx, translate('calories_this_week'), 14, "#FDA103", 139, 248, "center");
renderText(
ctx,
Math.round(data.weekArrow * 1.6),
@@ -553,7 +554,7 @@ export const sharePointData = async (canvasId, data) => {
"center"
);
ctx.drawImage(bubble3Img, 255, 52, 114, 92);
renderText(ctx, "我的名次", 14, "#FDA103", 312, 80, "center");
renderText(ctx, translate('my_rank'), 14, "#FDA103", 312, 80, "center");
renderText(ctx, data.rank, 36, "#FA2A2A", 312, 116, "center");
const qrcodeSrc = await loadImage(
@@ -562,8 +563,8 @@ export const sharePointData = async (canvasId, data) => {
const qrcodeImg = await loadCanvasImage(canvas, qrcodeSrc);
ctx.drawImage(qrcodeImg, 40, 383, 68, 68);
renderText(ctx, "射灵星球", 18, "#333", 120, 412);
renderText(ctx, "高效记录每一箭,快来一起打卡吧!", 13, "#999", 120, 435);
renderText(ctx, translate('sheling_planet'), 18, "#333", 120, 412);
renderText(ctx, translate('track_every_arrow_join_us'), 13, "#999", 120, 435);
// 2D 即时绘制,无需 ctx.draw()
} catch (e) {
console.error("generateShareImage 绘制失败:", e);
@@ -758,9 +759,9 @@ export async function sharePractiseData(canvasId, type, user, data) {
renderText(ctx, user.nickName, 13, "#fff", 58, 34);
renderRankTitle(ctx, user.lvlName);
let subTitle = "正式开启弓箭手之路";
let subTitle = translate('your_archery_journey_starts_here');
if (type > 1) {
subTitle = `今日弓箭练习打卡 ${formatTimestamp(data.startTime)}`;
subTitle = translate('archery_check_in_value', { p0: formatTimestamp(data.startTime) });
}
ctx.drawImage(titleImg, (width - 160) / 2, 160, 160, 40);
@@ -768,10 +769,10 @@ export async function sharePractiseData(canvasId, type, user, data) {
ctx.font = "18px sans-serif";
renderText(ctx, subTitle, 18, "#fff", width / 2, 224, "center");
renderText(ctx, "共", 14, "#fff", 122, 300);
renderText(ctx, translate('total'), 14, "#fff", 102, 300);
const totalRing = data.details.reduce((last, next) => last + next.ring, 0);
renderText(ctx, totalRing, 14, "#fed847", 148, 300, "center");
renderText(ctx, "环", 14, "#fff", 161, 300);
renderText(ctx, translate('pts'), 14, "#fff", 161, 300);
renderLine(ctx, 77);
renderLine(ctx, 185);
@@ -779,10 +780,10 @@ export async function sharePractiseData(canvasId, type, user, data) {
renderScores(ctx, data.details, scoreBgImg);
ctx.drawImage(qrCodeImg, width * 0.06, height * 0.87, 52, 52);
renderText(ctx, "射灵平台", 12, "#fff", width * 0.26, height * 0.9);
renderText(ctx, translate('sheling'), 12, "#fff", width * 0.26, height * 0.9);
renderText(
ctx,
"快加入我们一起玩吧~",
translate('join_us_and_play'),
9,
"rgba(255, 255, 255, 0.5)",
width * 0.26,
@@ -790,7 +791,7 @@ export async function sharePractiseData(canvasId, type, user, data) {
);
renderText(
ctx,
"后羿就是这样练成的",
translate('practice_makes_a_great_archer'),
9,
"rgba(255, 255, 255, 0.5)",
width * 0.26,
@@ -902,7 +903,7 @@ export const generateShareCard = (canvasId, date, actual, total) => {
const totalWidth = ctx.measureText(`${t || ""}`).width || 0;
renderText(
ctx,
"环",
translate('pts'),
20,
"#FFFFFF",
centerX + totalWidth + 5,
@@ -994,7 +995,7 @@ export const generateShareCard = (canvasId, date, actual, total) => {
const totalWidth = ctx.measureText(`${t || ""}`).width || 0;
renderText(
ctx,
"环",
translate('pts'),
20,
"#FFFFFF",
centerX + totalWidth + 5,