# # Updates titles.txt to Steam format. Written by Charlie Cleveland. # local ($kVersion, $inputFilename, $modName, $languageName, $numTranslationsFound, $outputFilename, %translationData); # # Constants # $kVersion = "v1.0"; $inputFilename = ""; $modName = ""; $languageName = ""; $numTranslationsFound = 0; $outputFilename = ""; sub Main; Main(); sub Main { print "\nRunning SteamifyTitles $kVersion by Charlie Cleveland (flayra\@overmind.org)\n\n"; # Read mod name, input filename and language name $numArgs = $#ARGV + 1; if($numArgs < 3) { print "Usage: "; print "Run from within your mod directory.\n" } else { # Parse arguments $inputFilename = $ARGV[0]; $modName = $ARGV[1]; $languageName = $ARGV[2]; $convertTitles = 0; if($numArgs > 3) { if($ARGV[3] == "y") { $convertTitles = 1; } } #print "\nReading $inputFilename, for mod $modName, in language $languageName...\n"; # Read in file name specified on command line print "Reading old titles from $inputFilename.\n"; open(INFILE, $inputFilename) or die "Couldn't open $inputFilename for reading.\n"; # Read all data into one string local $/; my $theData = ; #print $theData; #while( $theData =~ m/ (\w+) \s* \{(.*?)\} /sgx) while( $theData =~ m/ (\w+) \s* \{(.*?)\} /sgx) { my $theKey = $1; my $theUntrimmedValue = $2; if($theUntrimmedValue =~ s/(.*?)\n+/ /g) { my $theTrimmedData = $1; # Skip comments? #if(index($theKey, "//") != -1) #{ # print "Skipping line: \"$theKey\" = \"$theTrimmedData\"\n"; #} #else #{ #print "Found pair: \"$theKey\" = \"$theTrimmedData\"\n"; $translationData{$theKey} = $theTrimmedData; $numTranslationsFound++; #} } } close(INFILE); print "Found $numTranslationsFound translations.\n"; if($numTranslationsFound > 0) { # Open file for writing as resource/modname_language.txt $outputFilename = lc("resource/$modName") . "_" . lc($languageName) . ".txt"; print "Writing $outputFilename.\n"; open(OUTFILE, ">$outputFilename") or die "Couldn't open file $outputFilename for writing.\n"; my $kLineDelimiter = "\n"; my $kLineSpaceDelimiter = " \n"; my $kPairSeparator = "\t\t\t"; # Write "lang" tag print OUTFILE "\"lang\"$kLineSpaceDelimiter"; my $caseProperLanguage = lc($languageName); $caseProperLanguage = ucfirst($caseProperLanguage); # Write "Language" tag print OUTFILE "{$kLineSpaceDelimiter"; print OUTFILE "\"Language\"$kPairSeparator\"$caseProperLanguage\"$kLineSpaceDelimiter"; # Write "Tokens" tag print OUTFILE "\"Tokens\"$kLineSpaceDelimiter\{$kLineSpaceDelimiter"; # For each translation pair my $key; my $value; # sort( keys( %hash )) #while(($key, $value) = each %translationData) foreach my $key ( sort(keys(%translationData))) { my $value = $translationData{$key}; # Substitute any " for ', or HL stops reading the translation file $value =~ s/\"/\'/g; if(length($value) == 0) { print (" Skipping empty entry for \"$key\"\n"); } else { my $theOutputString = "\"$key\"$kPairSeparator\"$value\"$kLineDelimiter"; #print $theOutputString; print OUTFILE $theOutputString; } } # Write ending braces print OUTFILE "}$kLineSpaceDelimiter"; print OUTFILE "}$kLineSpaceDelimiter"; print OUTFILE "$kLineDelimiter$kLineDelimiter$kLineDelimiter"; # close output file #print("Closing $outputFilename..."); close(OUTFILE); # if we're writing new titles.txt if($convertTitles == 1) { my $newTitlesName = "titles.txt"; print("Writing $newTitlesName in VGUI2 format..."); open(TITLESFILE, ">$newTitlesName") or die "Couldn't open $newTitlesName for writing.\n"; foreach my $key ( sort(keys(%translationData))) { print TITLESFILE "$key\n"; print TITLESFILE "\{\n\#$key\n\}\n\n"; } print "done.\n"; close(TITLESFILE); } print "Done. Don't forget to save \"$outputFilename\" as Unicode using Notepad before using.\n"; } } }