Changeset 25249

Show
Ignore:
Timestamp:
22.03.2012 21:44:44 (7 years ago)
Author:
ak19
Message:

Added code to allow us to get all the up to date strings, instead of just all the strings (but unsorted), or just the strings that require translating/updating. We can create translation memory files (TMX) from all the up to date strings so that can translators using the Google Translator Toolkit can use the strings and string segments as a reference while translating the strings that still require updating/translating. If the TMX file is shared in the GTT, these strings and their segments will also be available to help translators of other application interfaces to use common and consistent terminology.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone2/bin/script/gti.pl

    r24627 r25249  
    131131        } 
    132132    } 
     133    elsif ($gti_command =~ /^get-uptodate-chunks$/i) { 
     134        if ($module eq "gs3interface") {        
     135            print &get_uptodate_chunks_for_gs3(@gti_command_arguments); 
     136        } else { 
     137            print &get_uptodate_chunks(@gti_command_arguments); 
     138        } 
     139    } 
    133140    elsif ($gti_command =~ /^get-language-status$/i) { 
    134141        print &get_language_status(@gti_command_arguments);        
     
    218225    my $xml_response = &create_xml_response_for_all_chunks($translation_file_key, $target_file, \%source_file_key_to_text_mapping, \%target_file_key_to_text_mapping, \%source_file_key_to_last_update_date_mapping, \%target_file_key_to_last_update_date_mapping);    
    219226     
     227    return $xml_response; 
     228} 
     229 
     230 
     231sub get_uptodate_chunks 
     232{ 
     233    # The code of the target language (ensure it is lowercase) 
     234    my $target_language_code = lc(shift(@_)); 
     235    # The key of the file to translate (ensure it is lowercase) 
     236    my $translation_file_key = lc(shift(@_)); 
     237     
     238    # Check that the necessary arguments were supplied 
     239    if (!$target_language_code || !$translation_file_key) { 
     240        &throw_fatal_error("Missing command argument."); 
     241    } 
     242     
     243    # Get (and check) the translation configuration 
     244    my ($source_file, $target_file, $translation_file_type) 
     245    = &get_translation_configuration($target_language_code, $translation_file_key); 
     246     
     247    # Parse the source language and target language files 
     248    my $source_file_path = &util::filename_cat($gsdl_root_directory, $source_file); 
     249    my @source_file_lines = &read_file_lines($source_file_path); 
     250    my %source_file_key_to_line_mapping = &build_key_to_line_mapping(\@source_file_lines, $translation_file_type); 
     251     
     252    my $target_file_path = &util::filename_cat($gsdl_root_directory, $target_file); 
     253    my @target_file_lines = &read_file_lines($target_file_path); 
     254    my %target_file_key_to_line_mapping = &build_key_to_line_mapping(\@target_file_lines, $translation_file_type); 
     255     
     256    # Filter out any automatically translated chunks 
     257    foreach my $chunk_key (keys(%source_file_key_to_line_mapping)) { 
     258        if (&is_chunk_automatically_translated($chunk_key, $translation_file_type)) { 
     259            delete $source_file_key_to_line_mapping{$chunk_key}; 
     260            delete $target_file_key_to_line_mapping{$chunk_key}; 
     261        } 
     262    } 
     263     
     264    my %source_file_key_to_text_mapping = &build_key_to_text_mapping(\@source_file_lines, \%source_file_key_to_line_mapping, $translation_file_type); 
     265    my %target_file_key_to_text_mapping = &build_key_to_text_mapping(\@target_file_lines, \%target_file_key_to_line_mapping, $translation_file_type); 
     266    &log_message("Number of source chunks: " . scalar(keys(%source_file_key_to_text_mapping))); 
     267    &log_message("Number of target chunks: " . scalar(keys(%target_file_key_to_text_mapping))); 
     268     
     269    my %source_file_key_to_last_update_date_mapping = &build_key_to_last_update_date_mapping($source_file, \@source_file_lines, \%source_file_key_to_line_mapping, $translation_file_type); 
     270    my %target_file_key_to_last_update_date_mapping = &build_key_to_last_update_date_mapping($target_file, \@target_file_lines, \%target_file_key_to_line_mapping, $translation_file_type);  
     271   
     272 
     273    # Chunks needing updating are those in the target file that have been more recently edited in the source file 
     274    # All others are uptodate (which implies that they have certainly been translated at some point and would not be empty) 
     275    my @uptodate_target_file_keys = (); 
     276    foreach my $chunk_key (keys(%source_file_key_to_last_update_date_mapping)) { 
     277        my $source_chunk_last_update_date = $source_file_key_to_last_update_date_mapping{$chunk_key}; 
     278        my $target_chunk_last_update_date = $target_file_key_to_last_update_date_mapping{$chunk_key}; 
     279         
     280        # print "key: $chunk_key\nsource date : $source_chunk_last_update_date\ntarget date : $target_chunk_last_update_date\nafter? ". &is_date_after($source_chunk_last_update_date, $target_chunk_last_update_date) . "\n\n";         
     281         
     282        if (defined($target_chunk_last_update_date) && !&is_date_after($source_chunk_last_update_date, $target_chunk_last_update_date)) { 
     283            # &log_message("Chunk with key $chunk_key needs updating."); 
     284            push(@uptodate_target_file_keys, $chunk_key); 
     285        } 
     286    } 
     287 
     288    my $xml_response = &create_xml_response_for_uptodate_chunks($translation_file_key, $target_file, \@uptodate_target_file_keys, \%source_file_key_to_text_mapping, \%target_file_key_to_text_mapping, \%source_file_key_to_last_update_date_mapping, \%target_file_key_to_last_update_date_mapping);    
     289 
    220290    return $xml_response; 
    221291} 
     
    11231193} 
    11241194 
     1195sub create_xml_response_for_uptodate_chunks 
     1196{ 
     1197    my ($translation_file_key, $target_file, $uptodate_target_files_keys, $source_files_key_to_text_mapping, $target_files_key_to_text_mapping, $source_files_key_to_last_update_date_mapping, $target_files_key_to_last_update_date_mapping) = @_; 
     1198     
     1199    # Form an XML response to the command 
     1200    my $xml_response = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"; 
     1201    $xml_response .= "<GTIResponse>\n"; 
     1202    $xml_response .= "  <TranslationFile" 
     1203    . " key=\"" . $translation_file_key . "\"" 
     1204    . " target_file_path=\"" . $target_file . "\"" 
     1205    . " num_chunks_uptodate=\"" . scalar(@$uptodate_target_files_keys) . "\"\/>\n"; 
     1206     
     1207     
     1208    # Then do chunks requiring updating 
     1209    $xml_response .= "  <UptodateChunks size=\"" . scalar(@$uptodate_target_files_keys) . "\">\n"; 
     1210     
     1211     
     1212    # foreach my $chunk_key (@uptodate_target_file_keys) { 
     1213    my @sorted_chunk_keys = sort (@$uptodate_target_files_keys); 
     1214    foreach my $chunk_key (@sorted_chunk_keys) { 
     1215         
     1216        my $source_file_chunk_date = $source_files_key_to_last_update_date_mapping->{$chunk_key} || ""; 
     1217        my $source_file_chunk_text = &make_text_xml_safe($source_files_key_to_text_mapping->{$chunk_key}); 
     1218        my $target_file_chunk_date = $target_files_key_to_last_update_date_mapping->{$chunk_key} || ""; 
     1219        my $target_file_chunk_text = &make_text_xml_safe($target_files_key_to_text_mapping->{$chunk_key}); 
     1220         
     1221        $xml_response .= "    <Chunk key=\"" . &make_text_xml_safe($chunk_key) . "\">\n";    
     1222        $xml_response .= "      <SourceFileText date=\"$source_file_chunk_date\">$source_file_chunk_text</SourceFileText>\n"; 
     1223        $xml_response .= "      <TargetFileText date=\"$target_file_chunk_date\">$target_file_chunk_text</TargetFileText>\n"; 
     1224        $xml_response .= "    </Chunk>\n"; 
     1225 
     1226    } 
     1227     
     1228    $xml_response .= "  </UptodateChunks>\n"; 
     1229     
     1230    $xml_response .= "</GTIResponse>\n"; 
     1231     
     1232    return $xml_response; 
     1233} 
    11251234 
    11261235sub create_xml_response_for_all_chunks 
     
    17161825} 
    17171826 
     1827sub get_uptodate_chunks_for_gs3 
     1828{ 
     1829    # The code of the target language (ensure it is lowercase) 
     1830    my $target_language_code = lc(shift(@_)); 
     1831    # The key of the file to translate (ensure it is lowercase) 
     1832    my $translation_file_key = lc(shift(@_)); 
     1833    # The number of chunks to return (defaults to one if not specified) 
     1834    my $num_chunks_to_return = shift(@_) || "1"; 
     1835     
     1836    # Check that the necessary arguments were supplied 
     1837    if (!$target_language_code || !$translation_file_key) { 
     1838        &throw_fatal_error("Missing command argument."); 
     1839    } 
     1840     
     1841    my %source_files_key_to_text_mapping = (); 
     1842    my %target_files_key_to_text_mapping = (); 
     1843    my %source_files_key_to_last_update_date_mapping = (); 
     1844    my %target_files_key_to_last_update_date_mapping = (); 
     1845     
     1846    &build_gs3_configuration($target_language_code, \%source_files_key_to_text_mapping, \%target_files_key_to_text_mapping,  
     1847    \%source_files_key_to_last_update_date_mapping, \%target_files_key_to_last_update_date_mapping); 
     1848     
     1849 
     1850    # Chunks needing updating are those in the target file that have been more recently edited in the source file 
     1851    # All others are uptodate (which implies that they have certainly been translated at some point and would not be empty) 
     1852    my @uptodate_target_file_keys = (); 
     1853    foreach my $chunk_key (keys(%source_files_key_to_last_update_date_mapping)) { 
     1854        my $source_chunk_last_update_date = $source_files_key_to_last_update_date_mapping{$chunk_key}; 
     1855        my $target_chunk_last_update_date = $target_files_key_to_last_update_date_mapping{$chunk_key}; 
     1856         
     1857        # print "key: $chunk_key\nsource date : $source_chunk_last_update_date\ntarget date : $target_chunk_last_update_date\nafter? ". &is_date_after($source_chunk_last_update_date, $target_chunk_last_update_date) . "\n\n";         
     1858         
     1859        if (defined($target_chunk_last_update_date) && !&is_date_after($source_chunk_last_update_date, $target_chunk_last_update_date)) { 
     1860            # &log_message("Chunk with key $chunk_key needs updating."); 
     1861            push(@uptodate_target_file_keys, $chunk_key); 
     1862        } 
     1863    } 
     1864 
     1865    my $xml_response = &create_xml_response_for_uptodate_chunks($translation_file_key, "", \@uptodate_target_file_keys, \%source_files_key_to_text_mapping, \%target_files_key_to_text_mapping, \%source_files_key_to_last_update_date_mapping, \%target_files_key_to_last_update_date_mapping); 
     1866     
     1867    return $xml_response; 
     1868} 
    17181869 
    17191870