jsでcodeを書いていて、SpeechSynthesisUtteranceで単語を読ませるようにしています。
普通の単語はうまく読んでくれるのですが、アポストロフィーを読んでくれません。
例えば、'Let's go'(英)、'l'elefante'(伊)、'l'éléphant'(仏)などは『Uncaught SyntaxError: missing ) after argument list』というエラーが出ますが、'le zèbre'(仏)はエラーも出ずに正常に動きます。それぞれの文字入力は入力法を切り替えて入力しています。使う言語は 表示言語、音声合成、音声認識、手書きなどインストール済みです。OSはWindowsです。
どのようにすれば改善するでしょうか?
javascript
1'use strict'; 2//日本語カードの配列 3const doubutsu = 4['inu', 'usagi', 'ushi', 'uma', 'saru', 'neko', 'nezumi', 'kirin', 5'shika', 'zou', 'buta', 'raion', 'risu', 'kaba', 'kangaru', 6'kitsune', 'kuma', 'pannda', 'koara', 'gorira', 'tora', 'hitsuji', 7'yagi', 'ookami', 'sai', 'shimauma', 'tanuki', 'rakuda', 'kyouryuu', 8'cinpanji', 'hyou', 'koumori', 'tonakai', 'harinezumi', 'mogura', 9'roba', 'sukanku', 'doubutsu', 'shippo', 'araiguma', 'musasabi', 10'inoshishi', 'kamonohashi']; 11 12//フランス語の配列 13const Fanimals = 14['le chien', 'le lapin', 'la vache', 'le cheval', 'le singe', 'le chat', 15'la souris', 'la girafe', 'le cerf', 'l\'éléphqnt', 'le cochon', 'le lion', 16'l\'écureil', 'l\'hippopotame', 'les kangourous', 'le renard', 'l\'ours', 17'le panda', 'le koala', 'le gorille', 'le tigre', 'le mouton', 'la chèvre', 18'le loup', 'le rhinocéros', 'le zèbre', 'le blaireau', 'les chameaux', 19'le dinosaure', 'le chimpanzé', 'le léopard', 'la chauve-souris', 'le renne', 20'le hérisson', 'la taupe', 'l\'âne', 'la mouffette', 'les animaux', 21'les queues', 'le raton laveur', 'l\'écureuil volant', 'les sangliers', 22'l\'ornithorynaue']; 23 24//イタリア語の配列 25const Ianimals = 26['il cane', 'il coniglio', 'la vacca', 'il cavallo', 'la scimmia', 27'il gatto', 'il topo', 'la giraffa', 'il cervo', 'l\'elefante', 28'il maiale', 'il leone', 'lo scoiattolo', 'l\'ippopotamo', 'i canguri', 29'la volpe', 'l\'orso', 'il panda', 'il koala', 'il gorilla', 'la tigre', 30'la pecola', 'la capra', 'il lupo', 'il rinoceronte', 'la zebra', 31'il cane procione', 'i cammelli', 'il dinosauro', 'il scimpanze', 32'il leopardo', 'il pipistrello', 'la renna', 'il riccio', 'la talpa', 33'l\'asino', 'la moffetta', 'gli animali', 'le code', 'il procione', 34'lo scoiattolo volante', 'i cinghiali', 'l\'ornitorinco']; 35 36let matchCards = []; 37 38const jCards = doubutsu; 39const wCards = Fanimals; 40const pictures = Array.from(jCards); 41const answers = Array.from(wCards); 42 43//日本語カード Yates shuffle 44for(let i = pictures.length - 1; i >= 0; i--){ 45let r = Math.floor(Math.random() * ( i + 1)); 46const japanese = pictures[r]; 47jArea.insertAdjacentHTML('afterbegin', `<img src="image/doubutsu/${japanese}.jpg" 48id="${japanese}" onclick="imgCheck('${japanese}')">`); 49[pictures[i], pictures[r]] = [pictures[r], pictures[i]]; 50} 51 52//外国語カード Yates shuffle 53for(let i = answers.length - 1; i >= 0; i--){ 54let r = Math.floor(Math.random() * (i + 1)); 55const words = answers[r]; 56wArea.insertAdjacentHTML('afterbegin', `<button id="${words}" 57onclick="wordCheck('${words}')">${words}</button>`); 58[answers[i], answers[r]] = [answers[r], answers[i]]; 59} 60 61function imgCheck(japanese){ 62document.getElementById(japanese).style.opacity = 0.6; 63matchCards.unshift(japanese); 64jArea.style.pointerEvents = "none"; 65console.log(matchCards); 66if(matchCards.length === 2){ 67check(); 68} else { 69return; 70} 71} 72 73function wordCheck(words){ 74document.getElementById(words).style.opacity = 0.6; 75matchCards.push(words); 76wArea.style.pointerEvents = "none"; 77console.log(matchCards); 78if(matchCards.length === 2){ 79check(); 80} else { 81return; 82} 83} 84//const language = 'it-IT'; 85//const language = 'en-US'; 86//const language = 'es-ES'; 87const language = 'fr-FR'; 88//const language = 'de-DE' 89 90function disappear(){ 91console.log(matchCards); 92document.getElementById(matchCards[0]).style.display = "none"; 93document.getElementById(matchCards[1]).style.display = "none"; 94matchCards = []; 95} 96 97function check(){ 98console.log(jCards.indexOf(matchCards[0])); 99console.log(wCards.indexOf(matchCards[1])); 100if(jCards.indexOf(matchCards[0]) === wCards.indexOf(matchCards[1])){ 101let voice = new SpeechSynthesisUtterance(); 102voice.text = matchCards[1]; 103voice.lang = language; 104speechSynthesis.speak(voice); 105jArea.style.pointerEvents = ""; 106wArea.style.pointerEvents = ""; 107setTimeout(disappear, 1300); 108const pIndex = jCards.indexOf(`${matchCards[0]}.jpg`); 109pictures.splice(pIndex, 1); 110if(pictures.length === 0){ 111location.href = 'clear.html'; 112} 113} else { 114var voice = new SpeechSynthesisUtterance(); 115voice.text = '間違いです'; 116voice.lang = 'ja-JP'; 117speechSynthesis.speak(voice); 118document.getElementById(matchCards[0]).style.opacity = "initial"; 119document.getElementById(matchCards[1]).style.opacity = "initial"; 120matchCards = []; 121jArea.style.pointerEvents = ""; 122wArea.style.pointerEvents = ""; 123} 124}
実際のコードをご提示ください。
簡単なコードだと読んでくれるのですが、下のようなコードだと読んでくれません。宜しくお願い致します。
'use strict';
//日本語カードの配列
const doubutsu =
['inu', 'usagi', 'ushi', 'uma', 'saru', 'neko', 'nezumi', 'kirin',
'shika', 'zou', 'buta', 'raion', 'risu', 'kaba', 'kangaru',
'kitsune', 'kuma', 'pannda', 'koara', 'gorira', 'tora', 'hitsuji',
'yagi', 'ookami', 'sai', 'shimauma', 'tanuki', 'rakuda', 'kyouryuu',
'cinpanji', 'hyou', 'koumori', 'tonakai', 'harinezumi', 'mogura',
'roba', 'sukanku', 'doubutsu', 'shippo', 'araiguma', 'musasabi',
'inoshishi', 'kamonohashi'];
//フランス語の配列
const Fanimals =
['le chien', 'le lapin', 'la vache', 'le cheval', 'le singe', 'le chat',
'la souris', 'la girafe', 'le cerf', 'l\'éléphqnt', 'le cochon', 'le lion',
'l\'écureil', 'l\'hippopotame', 'les kangourous', 'le renard', 'l\'ours',
'le panda', 'le koala', 'le gorille', 'le tigre', 'le mouton', 'la chèvre',
'le loup', 'le rhinocéros', 'le zèbre', 'le blaireau', 'les chameaux',
'le dinosaure', 'le chimpanzé', 'le léopard', 'la chauve-souris', 'le renne',
'le hérisson', 'la taupe', 'l\'âne', 'la mouffette', 'les animaux',
'les queues', 'le raton laveur', 'l\'écureuil volant', 'les sangliers',
'l\'ornithorynaue'];
//イタリア語の配列
const Ianimals =
['il cane', 'il coniglio', 'la vacca', 'il cavallo', 'la scimmia',
'il gatto', 'il topo', 'la giraffa', 'il cervo', 'l\'elefante',
'il maiale', 'il leone', 'lo scoiattolo', 'l\'ippopotamo', 'i canguri',
'la volpe', 'l\'orso', 'il panda', 'il koala', 'il gorilla', 'la tigre',
'la pecola', 'la capra', 'il lupo', 'il rinoceronte', 'la zebra',
'il cane procione', 'i cammelli', 'il dinosauro', 'il scimpanze',
'il leopardo', 'il pipistrello', 'la renna', 'il riccio', 'la talpa',
'l\'asino', 'la moffetta', 'gli animali', 'le code', 'il procione',
'lo scoiattolo volante', 'i cinghiali', 'l\'ornitorinco'];
let matchCards = [];
const jCards = doubutsu;
const wCards = Fanimals;
const pictures = Array.from(jCards);
const answers = Array.from(wCards);
//日本語カード Yates shuffle
for(let i = pictures.length - 1; i >= 0; i--){
let r = Math.floor(Math.random() * ( i + 1));
const japanese = pictures[r];
jArea.insertAdjacentHTML('afterbegin', `<img src="image/doubutsu/${japanese}.jpg"
id="${japanese}" onclick="imgCheck('${japanese}')">`);
[pictures[i], pictures[r]] = [pictures[r], pictures[i]];
}
//外国語カード Yates shuffle
for(let i = answers.length - 1; i >= 0; i--){
let r = Math.floor(Math.random() * (i + 1));
const words = answers[r];
wArea.insertAdjacentHTML('afterbegin', `<button id="${words}"
onclick="wordCheck('${words}')">${words}</button>`);
[answers[i], answers[r]] = [answers[r], answers[i]];
}
function imgCheck(japanese){
document.getElementById(japanese).style.opacity = 0.6;
matchCards.unshift(japanese);
jArea.style.pointerEvents = "none";
console.log(matchCards);
if(matchCards.length === 2){
check();
} else {
return;
}
}
function wordCheck(words){
document.getElementById(words).style.opacity = 0.6;
matchCards.push(words);
wArea.style.pointerEvents = "none";
console.log(matchCards);
if(matchCards.length === 2){
check();
} else {
return;
}
}
//const language = 'it-IT';
//const language = 'en-US';
//const language = 'es-ES';
const language = 'fr-FR';
//const language = 'de-DE'
function disappear(){
console.log(matchCards);
document.getElementById(matchCards[0]).style.display = "none";
document.getElementById(matchCards[1]).style.display = "none";
matchCards = [];
}
function check(){
console.log(jCards.indexOf(matchCards[0]));
console.log(wCards.indexOf(matchCards[1]));
if(jCards.indexOf(matchCards[0]) === wCards.indexOf(matchCards[1])){
let voice = new SpeechSynthesisUtterance();
voice.text = matchCards[1];
voice.lang = language;
speechSynthesis.speak(voice);
jArea.style.pointerEvents = "";
wArea.style.pointerEvents = "";
setTimeout(disappear, 1300);
const pIndex = jCards.indexOf(`${matchCards[0]}.jpg`);
pictures.splice(pIndex, 1);
if(pictures.length === 0){
location.href = 'clear.html';
}
} else {
var voice = new SpeechSynthesisUtterance();
voice.text = '間違いです';
voice.lang = 'ja-JP';
speechSynthesis.speak(voice);
document.getElementById(matchCards[0]).style.opacity = "initial";
document.getElementById(matchCards[1]).style.opacity = "initial";
matchCards = [];
jArea.style.pointerEvents = "";
wArea.style.pointerEvents = "";
}
}
質問は編集できますし、こちらはあくまで「質問への追記修正依頼」のコメント欄です。質問本文に追記してください。
あとコードはマークダウンのcode機能利用してくださいね。
回答1件
あなたの回答
tips
プレビュー