Source: Scratch Wiki en français
Ce tutoriel permet de réaliser des traductions sans utiliser un bloc de l'extension traduire, permettant à votre projet de fonctionner, même sans connexion à Internet.
Idée
L'extension traduire est très utile, mais les traductions ne sont pas fiables et nécessitent une connexion réseau. L'idée ce tutoriel, c'est de permettre à un projet de fonctionner sans connexion et avec des traductions parfaites.
Le fonctionnement est simple : nous allons créer un code de sauvegarde permettant de « sauvegarder un mot ou expression dans plusieurs langues ». Tous les différents codes seront stockés dans une liste, et pourront être appelés avec une deuxième liste identifiante. C'est, à la base, le principe d'une variable.
De plus, en suivant cette méthode, l'utilisateur est libre de rajouter ses propres traductions, d'en modifier et d'en supprimer.
Réalisation
Matériel nécessaire
Variables
( | T | IDX::variables)
( | T | Valeur 1::variables)
( | T | Valeur 2::variables)
( | T | Peut sortir::variables)
Listes
(| T | ID::list)
(| T | Codes::list)
(| Feuille | Langues | Langue::list)
(| Feuille | Langues | Raccourci::list)
Sprite
- Un seul sprite est nécessaire.
Mise en place
Lancement du projet
Créez ce bloc personnalisé, sans rafraîchissement d'écran :
définir | Lancement |
Créer une feuille de « langues »
Créez ce bloc personnalisé, sans rafraîchissement d'écran :
définir | Feuille | Langues supprimer tous les éléments de la liste (| Feuille | Langues | Langue v) supprimer tous les éléments de la liste (| Feuille | Langues | Raccourci v) ajouter [Français] à [| Feuille | Langues | Langue v]::list ajouter [fr] à [| Feuille | Langues | Raccourci v]::list ajouter [English] à [| Feuille | Langues | Langue v]::list ajouter [en] à [| Feuille | Langues | Raccourci v]::list Les langues suivantes sont facultatives::#bfbfbf // pas un bloc, vous l'aurez deviné ajouter [Deutsch] à [| Feuille | Langues | Langue v]::list ajouter [de] à [| Feuille | Langues | Raccourci v]::list ajouter [Italiano] à [| Feuille | Langues | Langue v]::list ajouter [it] à [| Feuille | Langues | Raccourci v]::list …
Bloc de lancement
Ajoutez le nouveau bloc au bloc de lancement de votre projet.
définir | Lancement | | Feuille | Langues::custom
Code de sauvegarde
Le « code de sauvegarde » utilisé par le wiki est le suivant :
{langue ou raccourci}mot ou expression
{autre langue ou raccourci}même mot ou expression dans autre langue
{…}…
Ainsi, on peut obtenir, par exemple :
{en}hi
{fr}salut
{de}hallo
Maintenant, le but est de pouvoir extraire ces données du code de sauvegarde.
Lire un code de sauvegarde et en extraire une langue
Créez ce bloc personnalisé, sans rafraîchissement d'écran :
définir | Traduction | Obtenir (ID) en (LANGUE) si <non <[T | ID v] contient (ID)>> alors mettre [| T | Valeur 1 v] à [Erreur] mettre [| T | Valeur 2 v] à [Erreur : ID pas trouvée] stop [ce script v] fin mettre [| T | IDX v] à [1] répéter jusqu'à ce que <(| T | IDX) > (longueur de (élément (position de (ID) dans [T | ID v]) de [T | Codes v]))> si <(lettre (| T | IDX) de (élément (position de (ID) dans [T | ID v]) de [T | Codes v])) = [{] > alors si <(| T | Valeur 1) = (LANGUE)> alors stop [ce script v] // si le script s'arrête là, c'est bon signe ! fin mettre [| T | Valeur 1 v] à [] mettre [| T | Valeur 2 v] à [] répéter jusqu'à ce que <<(lettre (| T | IDX) de (élément (position de (ID) dans [T | ID v]) de [T | Codes v])) = [}]> ou <(| T | IDX) > (longueur de (élément (position de (ID) dans [T | ID v]) de [T | Codes v]))>> mettre [| T | Valeur 1 v] à (regrouper (| T | Valeur 1) et (lettre (| T | IDX) de (élément (position de (ID) dans [T | ID v]) de [T | Codes v]))) ajouter [1] à [| T | IDX v] fin si <[| Feuille | Langues | Raccourci v] contient (| T | Valeur 1)> alors mettre [| T | Valeur 1 v] à (élément (position de (| T | Valeur 1) dans [| Feuille | Langues | Raccourci v]) de [| Feuille | Langues | Langue v]) fin ajouter [1] à [| T | IDX v] fin mettre [| T | Valeur 2 v] à (regrouper (| T | Valeur 2) et (lettre (| T | IDX) de (élément (position de (ID) dans [T | ID v]) de [T | Codes v]))) ajouter [1] à [| T | IDX v] fin si <non <(| T | Valeur 1) = (LANGUE)>> alors mettre [| T | Valeur 1 v] à [Erreur] mettre [| T | Valeur 2 v] à [Erreur : Langue pas trouvée] stop [ce script v] fin
Finitions
Exemples de code
| Traduction | Obtenir [word.bye] en [français]::custom dire (| T | Valeur 2) // le mot - expression voulu est stocké dans cette variable
| Traduction | Obtenir [expression.hello world] en [français]::custom dire (| T | Valeur 2) // le mot - expression voulu est stocké dans cette variable
Ajouter des mots et expressions
Revoyons le bloc de départ.
définir | Lancement | | Feuille | Langues::custom
Créons ce bloc personnalisé, sans rafraîchissement d'écran :
définir | Feuille | Mots & Expressions
Ajoutons-le au bloc de départ :
définir | Lancement | | Feuille | Langues::custom | Feuille | Mots & Expressions::custom
Puis, ce bloc personnalisé, sans rafraîchissement d'écran :
définir | Traduction | Créer sauvegarde (ID) (CODE) ajouter (ID) à [| T | ID v]::list ajouter (CODE) à [| T | Codes v]::list
| Traduction | Créer sauvegarde [] []::custom
. L'idéal est de les ajouter dans | Feuille | Mots & Expressions::custom
: définir | Feuille | Mots & Expressions Créer sauvegarde [word.bye] [{en}good bye{fr}au revoir]::custom Créer sauvegarde [expression.hello word] [{en}hello, world{fr}salut, monde]::custom
Ajouter de nouvelles langues
Il vous suffit, dans le bloc | Feuille | Langues::custom
, de respecter ce modèle pour pouvoir ajouter des nouvelles langues :
ajouter [une langue] à [| Feuille | Langues | Langue v]::list ajouter [son raccourci] à [| Feuille | Langues | Raccourci v]::list
Créer un bouton « langue »
Il ne vous reste plus qu'à créer un costume de bouton dans votre sprite et de le montrer quand le voulez.
Ensuite, insérez ce code dans votre sprite :
quand ce sprite est cliqué | Traduction | Obtenir [expression.new language] en (ma langue)::custom // nécessite d'avoir créé l'expression avec l'ID "expression.new language" demander (regrouper (| T | Valeur 2) et [ ?]) et attendre mettre [ma langue v] à (réponse)
Jouer avec la casse des mots
Il est possible de faire que les traductions (qui sont actuellement en minuscules) soient, par exemple, titrées (« un titre exemplaire » devient « Un Titre Exemplaire »), en lisant cette page du wiki.