placeholderによって指定された文字列はそのままだと翻訳の対象とならずページ全体を翻訳してもそこだけ無視されてしまう。 そこで、stackoverflowにあった処理を行ったら上手くいったのでまとめておく。
// Find all placeholders var placeholders = document.querySelectorAll('input[placeholder]'); if (placeholders.length) { // convert to array placeholders = Array.prototype.slice.call(placeholders); // copy placeholder text to a hidden div var div = $('<div id="placeholders" style="display:none;"></div>'); placeholders.forEach(function(input){ var text = input.placeholder; div.append('<div>' + text + '</div>'); }); $('body').append(div); // save the first placeholder in a closure var originalPH = placeholders[0].placeholder; // check for changes and update as needed setInterval(function(){ if (isTranslated()) { updatePlaceholders(); originalPH = placeholders[0].placeholder; } }, 500); // hoisted --------------------------- function isTranslated() { // true if the text has been translated var currentPH = $($('#placeholders > div')[0]).text(); return !(originalPH == currentPH); } function updatePlaceholders() { $('#placeholders > div').each(function(i, div){ placeholders[i].placeholder = $(div).text(); }); } }
簡単に原理を説明するとplaceholder内の文字列を取り出し、それをtextとした隠れたdiv要素を作成して翻訳させたあと、 再度placeholderに適用させる、といったところ。 サイトはこちら