Bonsoir,
Mon objectif est de créer un site web en javaee qui permet d'éditer des sous-titres(rendre un travail de traduction des sous-titres) comme le fonctionnement du site amara.org. Il m'a été demandé de remplir les conditions suivantes :
1 / - Enregistrement de la traduction en base de données. (effectué mais je ne comprends pas le sens. car on ne saura pas après faire la correspondance entre la phrase traduite , le morceau et la durée du morceau).
2/ - Code : utilisation du Pattern DAO (effectué)
3/ - Export de la traduction en .srt ?????
4/ - Upload d'un nouveau fichier à traduire(effectué)
La seule question qui me pose problème est la question 1 et 2.
Pour la question 1 :
- J'ai essayé de lire le fichier et de stocker au fur et à mesure chaque ligne lue dans une liste ArrayList.
- Ensuite j'ai essayé d'extraire uniquement les lignes contenant le texte. (pas les numéros de morceaux, pas les durées d'affichage du texte et pas de ligne vide).
Voici la fonction :
Cette fonction me permet grâce à une jsp d'afficher le texte à traduire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 public ArrayList<String> trouverPhraseUniquement(ArrayList<String> original) { originalSubtitles = new ArrayList<String>(); for (int i = 0; i < original.size(); i++) { String ch = original.get(i); if (!estUnEntier(ch) && !ch.matches("^$") && !ch.matches("[0-2][0-3]:[0-5][0-9]:[0-5][0-9],[0-9][0-9][0-9] --> [0-2][0-3]:[0-5][0-9]:[0-5][0-9],[0-9][0-9][0-9]")) { originalSubtitles.add(ch); } } return originalSubtitles; } private boolean estUnEntier(String line) { try { Integer.parseInt(line); return true; } catch (NumberFormatException e) { return false; } }
Seulement, après je ne sais pas à quelle morceau appartient telle ou telle phrase. càd je n'arrive pas à transformer le fichier traduit en fichier .srt.
Alors du coup j'ai pensé à une solution qui s'avère facile à comprendre mais difficile à mettre en application. Voici l'idée :
1/ création d'une hashMap : clé = numéro du morceau et valeur = numéro du morceau, durée, phrase1, phrase2, ..
le type de la clé = int alors que le type de valeur = String.
Ainsi chaque ligne correspondra à un numéro de morceau.
Voilà un code très simple qui fonctionne juste pour le premier morceau à cause de la condition
while ((line = br.readLine()) != null && !line.equals("")):
Si j'arrive à extrapoler cette fonction pour l'ensemble des morceaux du fichier, c'est plus facile pour moi de reconnaître à quoi correspond chaque phrase traduite.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 public HashMap<String, String> SubtitlesHandlerBis(String fileName) { originalSubtitles = new ArrayList<String>(); ArrayList<String> temp = new ArrayList<String>(); HashMap<String, String> originalSubtitles2 = new HashMap<String, String>(); HashMap<String, String> temporaire = new HashMap<String, String>(); BufferedReader br; try { br = new BufferedReader(new FileReader(fileName)); String line; while ((line = br.readLine()) != null && !line.equals("")) { temp.add(line); String morceau; morceau = temp.get(0); temporaire.put(morceau, temp.get(0)); for (int i = 0; i < temp.size(); i++) { if (i != 0) { temporaire.put(morceau, temp.get(i)); } } afficherMap(temporaire); } br.close(); } catch (IOException e) { e.printStackTrace(); } return temporaire; }
Pour résumer, la traduction ne me pose pas de problème. mais l'export de la traduction en fichier .srt me pose problème car je ne comprends pas du tout ce qu'il faut faire.
Rq : pour l'enregistrement dans la base de données : j'ai créé deux tables (une contenant : id_morceau(clé primaire) et la durée (date de début morceau et date de fin. la deuxième table contenant : id_phrase (clé primaire), id_morceau(clé secondaire), phrase(string)).
Si quelqu'un pourrait me proposer une idée ou rectifier la mienne. je le remercie d'avance pour son aide.
Merci
Batman90
Partager