InDesign Story

Pour les lecteurs du billets concernant Tiddlywiki, c’est peut être du réchaffé si ces derniers ont poussé à lire le TW de l’article, sinon tant pis, et de toutes façons il n’y a pas de lien direct, ici il s’agit de modifier la langue utilisée par le logiciel.

Sous QuarkXPress, j’ai longtemps réceptionné des documents en provenance d’outre-Rhin qu’il nous fallait traduire en français. Un des problèmes était que de base le logiciel utilisait la langue d’origine du document comme référence de dictionnaire de césure. Bien que la méthode de mise à jour des styles eut été une solution propre, elle n’a été que vaguement envisagé, les styles étaient bien utilisés, mais variaient d’une parution à l’autre, voir même document à l’autre. Il fallait donc plus radical et efficace.
Facile ! A l’aide d’une bibliothèque on glisse un petit bloc texte type dans la maquette. Ce bloc texte ayant, bien entendu, épuré de tout style afin de ne pas encombrer le document de travail, et bien sur, la langue du paragraphe contenu réglée sur celle de destination (ici français pour ceux qui ne suivent déjà plus!). Il n’y a plus qu’à effectuer un Enregistrer sous et activer la langue unique pour modifier tout le document dans la langue désirée.

Sous InDesign, j’ai bien cherché, mais je n’ai rien trouvé! Soit! Une occasion de plus jouer avec des scripts. En plus cette fois, les fichiers proviennent d’outre-Manche, c’est pas gagné pour leur faire comprendre que le texte français qu’ils maquettent doit utiliser des règles de césures issues d’un dictionnaire français! Ici pas d’option autre que mot par mot, paragraphe par paragraphe, style par style ou même bloc par bloc.

J’ai profité de ce petit contre-temps pour aller une fois de plus du côté de chez Swann, puis du Javascript pour approfondir encore un peu mes expériences.
L’option choisie est de laisser le choix du champ d’application des modification:

  • tous les styles de paragraphes
  • tous les styles de caractères
  • tous les paragraphes

Ce découpage permettant de voir un peu les différents côtés identiques (sic!) de l’application d’une langue dans InDesign via des scripts. L’ordre me parait également logique dans un esprit de nettoyage logique du texte les styles avant les paragraphes afin de préserver les liens de style au maximum en cas de modification à venir.

Première étape, une fenêtre dialogue permettant le choix du champ d’application, si un document est ouvert:

function main(){
  if(app.documents.length != 0){
      var myDialog = app.dialogs.add({name:"Conversion langue FRANCAIS"});
      with(myDialog.dialogColumns.add()){
        staticTexts.add({staticLabel:"Appliquer aux éléments:"});
        var sP = checkboxControls.add({staticLabel:"Style de paragraphe", checkedState:true});
        var sC = checkboxControls.add({staticLabel:"Style de caractères", checkedState:true});
        var aP = checkboxControls.add({staticLabel:"Tous les paragraphes", checkedState:true});
      }

Seconde étape, on effectue les changements sur les items désirés en se basant sur l’état des checkbox précédents:

if(myDialog.show() == true){
        var sP, sC, aP;
        if(sP.checkedState == true){
          for(myCounter = 1; myCounter < app.activeDocument.paragraphStyles.length; myCounter++){
          app.activeDocument.paragraphStyles.item(myCounter).appliedLanguage = app.languagesWithVendors.item("French");
        }}
        if(sC.checkedState == true){
          for(myCounter = 1; myCounter < app.activeDocument.characterStyles.length; myCounter++){
          app.activeDocument.characterStyles.item(myCounter).appliedLanguage = app.languagesWithVendors.item("French");
        }}
        if(aP.checkedState == true){
          for(myCounter = 0; myCounter < app.activeDocument.stories.length; myCounter++){
          app.activeDocument.stories.item(myCounter).appliedLanguage = app.languagesWithVendors.item("French");
      }}

Et pour finir, on n’oublie pas de détruire la fenêtre de dialogue, sinon avec le temps InDesign va un peu craquer!

myDialog.destroy();

Au final, le script complet permettant de convertir un document en français est le suivant:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function main(){
  if(app.documents.length != 0){
      var myDialog = app.dialogs.add({name:"Conversion langue FRANCAIS"});
      with(myDialog.dialogColumns.add()){
        staticTexts.add({staticLabel:"Appliquer aux éléments:"});
        var sP = checkboxControls.add({staticLabel:"Style de paragraphe", checkedState:true});
        var sC = checkboxControls.add({staticLabel:"Style de caractères", checkedState:true});
        var aP = checkboxControls.add({staticLabel:"Tous les paragraphes", checkedState:true});
      }
      if(myDialog.show() == true){
        var sP, sC, aP;
        if(sP.checkedState == true){
          for(myCounter = 1; myCounter < app.activeDocument.paragraphStyles.length; myCounter++){
          app.activeDocument.paragraphStyles.item(myCounter).appliedLanguage = app.languagesWithVendors.item("French");
        }}
        if(sC.checkedState == true){
          for(myCounter = 1; myCounter < app.activeDocument.characterStyles.length; myCounter++){
          app.activeDocument.characterStyles.item(myCounter).appliedLanguage = app.languagesWithVendors.item("French");
        }}
        if(aP.checkedState == true){
          for(myCounter = 0; myCounter < app.activeDocument.stories.length; myCounter++){
          app.activeDocument.stories.item(myCounter).appliedLanguage = app.languagesWithVendors.item("French");
      }}
    }
  myDialog.destroy();
  }
  else{
    alert("Merci d'ouvrir un document.");
  }
}

A venir, quand j’en trouverais la motivation et/ou l’utilisation, un script plus générique allant puiser la liste des langues disponibles, et proposer un changement dans la langue du logiciel après récupérer cette dernière.