Skip to content

Commit 76a2c48

Browse files
committed
add langusge support
1 parent 8061961 commit 76a2c48

File tree

1 file changed

+110
-19
lines changed

1 file changed

+110
-19
lines changed

โ€Ž30-Guess-Number-Game/index.html

Lines changed: 110 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!DOCTYPE html>
2-
<html lang="zh">
2+
<html>
33
<head>
44
<title>็Œœๆ•ฐๅญ—ๆธธๆˆ</title>
55
<meta charset="utf-8">
@@ -110,20 +110,20 @@
110110
</head>
111111
<body>
112112
<div class="container">
113-
<h1>็Œœๆ•ฐๅญ—ๆธธๆˆ</h1>
113+
<h1 id="title">็Œœๆ•ฐๅญ—ๆธธๆˆ</h1>
114114
<div id="game-info">
115-
<span>็งฏๅˆ†: <span id="score">0</span></span>
116-
<span>ๅ‰ฉไฝ™ๆ—ถ้—ด: <span id="timer">300</span>็ง’</span>
117-
<span>ๅ‰ฉไฝ™็Œœๆต‹: <span id="guesses-left">8</span></span>
115+
<span><span id="score-label">็งฏๅˆ†:</span> <span id="score">0</span></span>
116+
<span><span id="timer-label">ๅ‰ฉไฝ™ๆ—ถ้—ด:</span> <span id="timer">300</span><span id="seconds-label">็ง’</span></span>
117+
<span><span id="guesses-left-label">ๅ‰ฉไฝ™็Œœๆต‹:</span> <span id="guesses-left">8</span></span>
118118
</div>
119-
<p>ๅœจไธ‹้ข็š„่กจๅ•ไธญ่พ“ๅ…ฅไธ€ไธช4ไฝๆ•ฐๅญ—๏ผˆๆ•ฐๅญ—ไธ้‡ๅค๏ผ‰๏ผŒ็„ถๅŽ็‚นๅ‡ป"็Œœๆต‹"ๆŒ‰้’ฎใ€‚ไฝ ๆœ‰8ๆฌกๆœบไผšๅ’Œ300็ง’ๆ—ถ้—ดใ€‚</p>
120-
<p>ๅฆ‚ๆžœๆ•ฐๅญ—ๅ’Œไฝ็ฝฎ้ƒฝๆญฃ็กฎ๏ผŒไฝ ไผšๅพ—ๅˆฐไธ€ไธช"A"ใ€‚ๅฆ‚ๆžœๆ•ฐๅญ—ๆญฃ็กฎไฝ†ไฝ็ฝฎ้”™่ฏฏ๏ผŒไฝ ไผšๅพ—ๅˆฐไธ€ไธช"B"ใ€‚</p>
119+
<p id="instruction1">ๅœจไธ‹้ข็š„่กจๅ•ไธญ่พ“ๅ…ฅไธ€ไธช4ไฝๆ•ฐๅญ—๏ผˆๆ•ฐๅญ—ไธ้‡ๅค๏ผ‰๏ผŒ็„ถๅŽ็‚นๅ‡ป"็Œœๆต‹"ๆŒ‰้’ฎใ€‚ไฝ ๆœ‰8ๆฌกๆœบไผšๅ’Œ300็ง’ๆ—ถ้—ดใ€‚</p>
120+
<p id="instruction2">ๅฆ‚ๆžœๆ•ฐๅญ—ๅ’Œไฝ็ฝฎ้ƒฝๆญฃ็กฎ๏ผŒไฝ ไผšๅพ—ๅˆฐไธ€ไธช"A"ใ€‚ๅฆ‚ๆžœๆ•ฐๅญ—ๆญฃ็กฎไฝ†ไฝ็ฝฎ้”™่ฏฏ๏ผŒไฝ ไผšๅพ—ๅˆฐไธ€ไธช"B"ใ€‚</p>
121121
<button id="new-game-btn" onclick="newGame()">ๆ–ฐๆธธๆˆ</button>
122122
<button id="give-up-btn" onclick="giveUp()">ๆ”พๅผƒ</button>
123-
<div id="records"><h3>็Œœๆต‹่ฎฐๅฝ•:</h3></div>
124-
<label for="guess">ไฝ ็š„็Œœๆต‹:</label>
123+
<div id="records"><h3 id="records-title">็Œœๆต‹่ฎฐๅฝ•:</h3></div>
124+
<label for="guess" id="guess-label">ไฝ ็š„็Œœๆต‹:</label>
125125
<input type="text" id="guess" name="guess" pattern="\d{4}">
126-
<button onclick="submitGuess(document.getElementById('guess').value)">็Œœๆต‹</button>
126+
<button onclick="submitGuess(document.getElementById('guess').value)" id="guess-button">็Œœๆต‹</button>
127127
<div id="result"></div>
128128
</div>
129129

@@ -134,6 +134,97 @@ <h2 id="result-message"></h2>
134134
</div>
135135

136136
<script>
137+
const translations = {
138+
"zh": {
139+
"title": "็Œœๆ•ฐๅญ—ๆธธๆˆ",
140+
"scoreLabel": "็งฏๅˆ†:",
141+
"timerLabel": "ๅ‰ฉไฝ™ๆ—ถ้—ด:",
142+
"secondsLabel": "็ง’",
143+
"guessesLeftLabel": "ๅ‰ฉไฝ™็Œœๆต‹:",
144+
"instruction1": "ๅœจไธ‹้ข็š„่กจๅ•ไธญ่พ“ๅ…ฅไธ€ไธช4ไฝๆ•ฐๅญ—๏ผˆๆ•ฐๅญ—ไธ้‡ๅค๏ผ‰๏ผŒ็„ถๅŽ็‚นๅ‡ป\"็Œœๆต‹\"ๆŒ‰้’ฎใ€‚ไฝ ๆœ‰8ๆฌกๆœบไผšๅ’Œ300็ง’ๆ—ถ้—ดใ€‚",
145+
"instruction2": "ๅฆ‚ๆžœๆ•ฐๅญ—ๅ’Œไฝ็ฝฎ้ƒฝๆญฃ็กฎ๏ผŒไฝ ไผšๅพ—ๅˆฐไธ€ไธช\"A\"ใ€‚ๅฆ‚ๆžœๆ•ฐๅญ—ๆญฃ็กฎไฝ†ไฝ็ฝฎ้”™่ฏฏ๏ผŒไฝ ไผšๅพ—ๅˆฐไธ€ไธช\"B\"ใ€‚",
146+
"newGame": "ๆ–ฐๆธธๆˆ",
147+
"giveUp": "ๆ”พๅผƒ",
148+
"recordsTitle": "็Œœๆต‹่ฎฐๅฝ•:",
149+
"guessLabel": "ไฝ ็š„็Œœๆต‹:",
150+
"guessButton": "็Œœๆต‹",
151+
"timeUp": "ๆ—ถ้—ดๅˆฐ๏ผ",
152+
"inputError":"่ฏท่พ“ๅ…ฅไธ€ไธช4ไฝๆ•ฐๅญ—๏ผŒไธ”ๆ•ฐๅญ—ไธ่ƒฝ้‡ๅคใ€‚",
153+
"correctAnswer": "ๆญๅ–œ๏ผไฝ ็Œœๅฏนไบ†๏ผ",
154+
"incorrectAnswer": "ๅพˆ้—ๆ†พ๏ผไฝ ็Œœ้”™ไบ†๏ผ",
155+
"giveUpMessage": "ไฝ ๆ”พๅผƒไบ†็Œœๆต‹๏ผŒๆญฃ็กฎ็ญ”ๆกˆๆ˜ฏ",
156+
"noGame": "ๆฒกๆœ‰่ฟ›่กŒไธญ็š„ๆธธๆˆใ€‚",
157+
"finalAnswer": "ๆญฃ็กฎ็ญ”ๆกˆๆ˜ฏ"
158+
},
159+
"en": {
160+
"title": "Number Guessing Game",
161+
"scoreLabel": "Score:",
162+
"timerLabel": "Time Left:",
163+
"secondsLabel": "seconds",
164+
"guessesLeftLabel": "Guesses Left:",
165+
"instruction1": "Enter a 4-digit number (no repeated digits) below and click the \"Guess\" button. You have 8 chances and 300 seconds.",
166+
"instruction2": "If a number and position are correct, you will get an \"A\". If a number is correct but in the wrong position, you will get a \"B\".",
167+
"newGame": "New Game",
168+
"giveUp": "Give Up",
169+
"recordsTitle": "Guess Records:",
170+
"guessLabel": "Your Guess:",
171+
"guessButton": "Guess",
172+
"timeUp": "Time's Up!",
173+
"inputError":"Please enter a 4-digit number, no repeated digits.",
174+
"correctAnswer": "Congratulations! You guessed correctly!",
175+
"incorrectAnswer": "Sorry! You guessed incorrectly!",
176+
"giveUpMessage": "You gave up and the correct answer is",
177+
"noGame": "No game in progress.",
178+
"finalAnswer": "The correct answer is"
179+
},
180+
"ja": {
181+
"title": "ๆ•ฐๅญ—ๅฝ“ใฆใ‚ฒใƒผใƒ ",
182+
"scoreLabel": "ใ‚นใ‚ณใ‚ข:",
183+
"timerLabel": "ๆฎ‹ใ‚Šๆ™‚้–“:",
184+
"secondsLabel": "็ง’",
185+
"guessesLeftLabel": "ๆฎ‹ใ‚ŠใฎๆŽจๆธฌ:",
186+
"instruction1": "ไธ‹ใฎใƒ•ใ‚ฉใƒผใƒ ใซ4ๆกใฎๆ•ฐๅญ—๏ผˆๆ•ฐๅญ—ใฏ้‡่ค‡ใ—ใชใ„๏ผ‰ใ‚’ๅ…ฅๅŠ›ใ—ใ€ใ€ŒๆŽจๆธฌใ€ใƒœใ‚ฟใƒณใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ—ใฆใใ ใ•ใ„ใ€‚8ๅ›žใฎใƒใƒฃใƒณใ‚นใจ300็ง’ใŒใ‚ใ‚Šใพใ™ใ€‚",
187+
"instruction2": "ๆ•ฐๅญ—ใจไฝ็ฝฎใŒไธกๆ–นใจใ‚‚ๆญฃใ—ใ„ๅ ดๅˆใฏใ€ŒAใ€ใŒ่กจ็คบใ•ใ‚Œใพใ™ใ€‚ๆ•ฐๅญ—ใŒๆญฃใ—ใ„ใŒไฝ็ฝฎใŒ้–“้•ใฃใฆใ„ใ‚‹ๅ ดๅˆใฏใ€ŒBใ€ใŒ่กจ็คบใ•ใ‚Œใพใ™ใ€‚",
188+
"newGame": "ๆ–ฐใ—ใ„ใ‚ฒใƒผใƒ ",
189+
"giveUp": "ใ‚ฎใƒ–ใ‚ขใƒƒใƒ—",
190+
"recordsTitle": "ๆŽจๆธฌ่จ˜้Œฒ:",
191+
"guessLabel": "ใ‚ใชใŸใฎๆŽจๆธฌ:",
192+
"guessButton": "ๆŽจๆธฌ",
193+
"timeUp": "ๆ™‚้–“ๅˆ‡ใ‚Œ๏ผ",
194+
"inputError":"4ๆกใฎๆ•ฐๅญ—ใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„ใ€‚ๆ•ฐๅญ—ใฏ้‡่ค‡ใ—ใชใ„ใ€‚",
195+
"correctAnswer": "ใŠใ‚ใงใจใ†๏ผๆญฃ่งฃใงใ™๏ผ",
196+
"incorrectAnswer": "ๆฎ‹ๅฟต๏ผๆญฃ่งฃใ—ใพใ›ใ‚“๏ผ",
197+
"giveUpMessage": "ใ‚ฎใƒ–ใ‚ขใƒƒใƒ—ใ—ใพใ—ใŸใ€‚ๆญฃ่งฃใฏ",
198+
"noGame": "้€ฒ่กŒไธญใฎใ‚ฒใƒผใƒ ใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚",
199+
"finalAnswer": "ๆญฃ่งฃใฏ"
200+
}
201+
};
202+
203+
var translatedPage = translations[detectLanguage()];
204+
function detectLanguage() {
205+
const lang = navigator.language.slice(0, 2);
206+
return translations[lang] ? lang : "en";
207+
}
208+
209+
function translatePage() {
210+
211+
document.getElementById("title").textContent = translatedPage.title;
212+
document.getElementById("score-label").textContent = translatedPage.scoreLabel;
213+
document.getElementById("timer-label").textContent = translatedPage.timerLabel;
214+
document.getElementById("seconds-label").textContent = translatedPage.secondsLabel;
215+
document.getElementById("guesses-left-label").textContent = translatedPage.guessesLeftLabel;
216+
document.getElementById("instruction1").textContent = translatedPage.instruction1;
217+
document.getElementById("instruction2").textContent = translatedPage.instruction2;
218+
document.getElementById("new-game-btn").textContent = translatedPage.newGame;
219+
document.getElementById("give-up-btn").textContent = translatedPage.giveUp;
220+
document.getElementById("records-title").textContent = translatedPage.recordsTitle;
221+
document.getElementById("guess-label").textContent = translatedPage.guessLabel;
222+
document.getElementById("guess-button").textContent = translatedPage.guessButton;
223+
}
224+
225+
translatePage();
226+
227+
// ไธ‹้ขๆ˜ฏไฝ ็š„ๆธธๆˆ้€ป่พ‘็š„JavaScriptไปฃ็ 
137228
let answer = "", records = [], score = 0, timer, guessesLeft = 8, isGameActive = false, timeLeft = 300;
138229

139230
const generateNumber = () => Array.from({length: 10}, (_, i) => i)
@@ -151,7 +242,7 @@ <h2 id="result-message"></h2>
151242
}
152243

153244
const renderRecords = () => {
154-
let list = "<h3>็Œœๆต‹่ฎฐๅฝ•:</h3>";
245+
let list = `<h3>${translatedPage.recordsTitle}</h3>`;
155246
for (let {guess, result} of records) {
156247
list += `<p>${guess}: ${result}</p>`;
157248
}
@@ -172,7 +263,7 @@ <h2 id="result-message"></h2>
172263
timeLeft--;
173264
updateGameInfo();
174265
if (timeLeft <= 0) {
175-
endGame(false, "ๆ—ถ้—ดๅˆฐ๏ผ");
266+
endGame(false, translatedPage.timeUp);
176267
}
177268
}, 1000);
178269
}
@@ -199,7 +290,7 @@ <h2 id="result-message"></h2>
199290
}
200291
if (!isGameActive) return;
201292
if (!/^(?!.*(.).*\1)\d{4}$/.test(guess)) {
202-
alert("่ฏท่พ“ๅ…ฅไธ€ไธช4ไฝๆ•ฐๅญ—๏ผŒไธ”ๆ•ฐๅญ—ไธ่ƒฝ้‡ๅคใ€‚");
293+
alert(translatedPage.inputError);
203294
document.getElementById("guess").value = "";
204295
document.getElementById("guess").focus();
205296
return;
@@ -212,9 +303,9 @@ <h2 id="result-message"></h2>
212303
updateGameInfo();
213304
document.getElementById("result").textContent = result;
214305
if (result === "4A0B") {
215-
endGame(true, "ๆญๅ–œไฝ ๏ผŒไฝ ่ตขไบ†๏ผ");
306+
endGame(true, translatedPage.correctAnswer);
216307
} else if (guessesLeft <= 0) {
217-
endGame(false, "ๅพˆ้—ๆ†พ๏ผŒไฝ ่พ“ไบ†ใ€‚");
308+
endGame(false, translatedPage.incorrectAnswer);
218309
}
219310
document.getElementById('guess').value = "";
220311
document.getElementById('guess').focus();
@@ -233,16 +324,16 @@ <h2 id="result-message"></h2>
233324

234325
const giveUp = () => {
235326
if (isGameActive) {
236-
endGame(false, "ไฝ ๆ”พๅผƒไบ†ๆธธๆˆใ€‚");
327+
endGame(false, translatedPage.giveUpMessage);
237328
} else {
238-
alert("ๆฒกๆœ‰่ฟ›่กŒไธญ็š„ๆธธๆˆใ€‚");
329+
alert(translatedPage.noGame);
239330
}
240331
}
241332

242333
const showResultPopup = (message) => {
243334
document.getElementById("give-up-btn").style.display = "none";
244335
document.getElementById("result-message").textContent = message;
245-
document.getElementById("result-details").textContent = `ๆญฃ็กฎ็ญ”ๆกˆๆ˜ฏ ${answer}`;
336+
document.getElementById("result-details").textContent = `${translatedPage.finalAnswer}: ${answer}`;
246337
document.getElementById("overlay").style.display = "block";
247338
document.getElementById("result-popup").style.display = "block";
248339
document.getElementById("result-popup").focus();
@@ -268,4 +359,4 @@ <h2 id="result-message"></h2>
268359
document.getElementById("guess").focus();
269360
</script>
270361
</body>
271-
</html>
362+
</html>

0 commit comments

Comments
ย (0)