1+ #!/usr/bin/env ruby
2+
3+ require 'nokogiri'
4+ require 'csv'
5+ require 'byebug'
6+ require 'sanitize'
7+
8+ # ruby xliff2csv.rb -F grundey_target
9+ if $stdin. tty?
10+ if ARGV [ 0 ] == '--SourceFolder' || ARGV [ 0 ] == '-S'
11+ folder = ARGV [ 1 ]
12+ else
13+ puts "pas de dossier indiqué après --SourceFolder ou -S"
14+ exit 0
15+ end
16+ end
17+
18+ if folder [ -1 ..-1 ] =="/"
19+ folder = folder [ 0 ..-2 ]
20+ end
21+
22+ files = Dir . glob ( folder +'/*.xliff' )
23+ csv_filename = folder . split ( "/" ) . last
24+
25+ class Hash
26+ def to_string
27+ size = self . size
28+ count = 0
29+ self . inject ( "" ) do |accu , ( k , v ) |
30+ count +=1
31+ accu +="#{ k . to_s } =#{ v } "
32+ accu +="&" unless count == size
33+ accu
34+ end
35+ end
36+ end
37+
38+ CSV . open ( "traductions_#{ csv_filename } .csv" , "w+" , { :col_sep => ";" } ) do |csv |
39+ csv << [ "Filename" , "File_params" , "Trans-unit_params" , "same" , "Source" , "sc" , "Target" , "tc" ]
40+ files . each do |file |
41+ f = File . open ( file )
42+ doc = Nokogiri ::XML ( f , nil , 'UTF-8' ) do |config |
43+ config . options = Nokogiri ::XML ::ParseOptions ::STRICT | Nokogiri ::XML ::ParseOptions ::NONET
44+ end
45+
46+ filename = file . split ( "/" ) . last
47+ params = { }
48+ file_params = doc . xpath ( "//x:file" , "x" => "urn:oasis:names:tc:xliff:document:1.2" ) . first
49+ params [ :original ] = file_params . attr ( "original" )
50+ params [ :source ] = file_params . attr ( "source-language" )
51+ params [ :target ] = file_params . attr ( "target-language" )
52+ params [ :datatype ] = file_params . attr ( "datatype" )
53+ trans_units_params = doc . xpath ( "//x:trans-unit" , "x" => "urn:oasis:names:tc:xliff:document:1.2" )
54+ sources = doc . xpath ( "//x:source" , "x" => "urn:oasis:names:tc:xliff:document:1.2" )
55+ targets = doc . xpath ( "//x:target" , "x" => "urn:oasis:names:tc:xliff:document:1.2" )
56+ sources . each_with_index do |source , index |
57+ trans_params = trans_units_params [ index ]
58+ trans_unit = { }
59+ trans_unit [ :id ] = trans_params . attr ( 'id' )
60+ trans_unit [ :resname ] = trans_params . attr ( 'resname' )
61+ trans_unit [ :restype ] = trans_params . attr ( 'restype' )
62+ trans_unit [ :datatype ] = trans_params . attr ( 'datatype' )
63+ source = source . text
64+ target = targets [ index ] . text
65+
66+ same = ( ( source == target ) ? 1 :0 )
67+ csv << [ filename , params . to_string , trans_unit . to_string , same , source , Sanitize . clean ( source ) . split . size , target , Sanitize . clean ( target ) . split . size ]
68+ end
69+ f . close
70+ end
71+ end
0 commit comments