4 votes

Traduire une feuille Google entière à l'aide de Google Translate

J'ai une feuille Google rédigée en japonais. Je dois la convertir en anglais.

Je sais que nous pouvons utiliser googletranslate(<sheet!:cell>, <input_language>, <output_language>) à traduire.

Mais sans script, cela m'oblige à traduire chaque ligne. J'ai besoin d'un script qui convertira toute ma feuille Google en anglais.

Je préfère qu'il soit converti en une feuille séparée. Veuillez me faire part des solutions possibles.

TIA

3voto

Tanaike Points 22314
  • Vous souhaitez traduire le japonais en anglais pour toutes les cellules de toutes les feuilles d'une feuille de calcul.
  • Vous souhaitez copier la feuille contenant les valeurs traduites dans la même feuille de calcul.
  • Vous souhaitez y parvenir en utilisant le script de Google Apps.

Je pourrais comprendre ce qui précède. Si ma compréhension est correcte, que pensez-vous de cette réponse ? Il s'agit d'une réponse parmi d'autres.

Dans cette réponse, la classe LanguageApp est utilisée.

Modèle 1 :

Dans ce schéma, chaque cellule est traduite avec LanguageApp.translate() .

Exemple de script :

Veuillez copier et coller le script suivant dans le script de la feuille de calcul. Et exécutez myFunction dans l'éditeur script. Ainsi, toutes les cellules de toutes les feuilles du tableur sont traduites du japonais à l'anglais. Et les valeurs traduites sont placées dans la feuille insérée dans la même feuille de calcul.

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  sheets.forEach(sheet => {
    const s = sheet.copyTo(ss).setName(`translated_${sheet.getSheetName()}`);
    const range = s.getDataRange();
    const translatedValues = range.getDisplayValues().map(r => r.map(c => {
      Utilities.sleep(1000);
      return LanguageApp.translate(c, "ja", "en");
    }));
    range.setValues(translatedValues);
  });
}
  • Dans ce cas, chaque cellule est traduite. D'après la spécification, Utilities.sleep(1000) (1 seconde d'attente) doit être utilisé. Ainsi, lorsqu'il y a beaucoup de cellules, le temps de traitement peut être long.

Modèle 2 :

Dans ce modèle, toutes les cellules d'une feuille sont récupérées et converties en une valeur de chaîne, puis la valeur de chaîne est traduite. Les valeurs traduites sont ensuite placées dans la feuille.

Exemple de script :

Veuillez copier et coller le script suivant dans le script de la feuille de calcul. Et exécutez myFunction dans l'éditeur script. Ainsi, toutes les cellules de toutes les feuilles du tableur sont traduites du japonais à l'anglais. Et les valeurs traduites sont placées dans la feuille insérée dans la même feuille de calcul.

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  sheets.forEach(sheet => {
    const s = sheet.copyTo(ss).setName(`translated_${sheet.getSheetName()}`);
    const range = s.getDataRange();
    const delimiter = "#";
    const sourceValues = range.getDisplayValues().map(r => r.join(delimiter)).join("\n");
    const translatedValues = Utilities.parseCsv(LanguageApp.translate(sourceValues, "ja", "en"), delimiter.charCodeAt(0));
    range.setValues(translatedValues);
    Utilities.sleep(1000);
  });
}
  • Dans ce cas, les valeurs de toutes les cellules sont traduites par une demande de LanguageApp.translate() . Ainsi, la durée du processus sera plus courte que celle du modèle 1. Mais si les valeurs sont élevées, une erreur peut se produire. Je n'en suis pas certain. Je m'en excuse.
  • Dans le script ci-dessus, # est utilisé comme délimiteur pour la conversion en valeur de chaîne. Si le # est utilisé dans les cellules, veuillez changer le caractère.

Remarque :

  • Ce script modifié est exécuté avec l'activation de V8.

Référence :

3voto

toszter Points 329

J'ai rencontré le même problème, mais j'avais besoin d'un support multilingue et je ne voulais pas de retard significatif, ni me préoccuper de savoir si les cellules sources étaient déjà dans la langue de destination souhaitée, alors j'ai trouvé cette solution.

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Translations')
    .addItem('Japanese > English', 'jpToEn')
    .addToUi();
}

function jpToEn() {
  translate('jp','en')
}

function translate(inputLang, outputLang) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var dest = sheet.copyTo(ss);
  dest.setName(`${inputLang}_${outputLang}_${sheet.getName()}`)
  var range = dest.getDataRange();
  var formula = "=iferror(googletranslate('" + sheet.getName() + "'!" + "R[0]C[0],\"" + inputLang +"\",\"" + outputLang + "\"),\"\")";
  range.setFormulaR1C1(formula);
}

Comme vous pouvez le voir, cela ajoute un menu à votre document Google Sheets. Vous pouvez traduire le vôtre comme vous le souhaitez, dans autant de langues que vous le souhaitez. Il suffit d'étendre le menu ou de remplacer les éléments déjà présents.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X