mirror of
https://git.femboyfinancial.jp/james/lipsync.git
synced 2024-11-21 10:12:04 -08:00
163 lines
6.0 KiB
C#
163 lines
6.0 KiB
C#
|
/*
|
|||
|
* MessageBody.cs
|
|||
|
* Copyright (c) 2008-2009 kbinani
|
|||
|
*
|
|||
|
* This file is part of Boare.Lib.AppUtil.
|
|||
|
*
|
|||
|
* Boare.Lib.AppUtil is free software; you can redistribute it and/or
|
|||
|
* modify it under the terms of the BSD License.
|
|||
|
*
|
|||
|
* Boare.Lib.AppUtil is distributed in the hope that it will be useful,
|
|||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|||
|
*/
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Text;
|
|||
|
using System.IO;
|
|||
|
|
|||
|
namespace Boare.Lib.AppUtil {
|
|||
|
|
|||
|
public class MessageBody {
|
|||
|
public string lang;
|
|||
|
public string po_header = "";
|
|||
|
public Dictionary<string, string> list = new Dictionary<string,string>();
|
|||
|
|
|||
|
public MessageBody( string lang_ ) {
|
|||
|
lang = lang_;
|
|||
|
}
|
|||
|
|
|||
|
public MessageBody( string lang, string[] ids, string[] messages ) {
|
|||
|
this.lang = lang;
|
|||
|
list = new Dictionary<string, string>();
|
|||
|
for( int i = 0; i < ids.Length; i++ ) {
|
|||
|
list.Add( ids[i], messages[i] );
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public MessageBody( string lang_, string file ) {
|
|||
|
lang = lang_;
|
|||
|
//Dictionary<string, string> list = new Dictionary<string, string>();
|
|||
|
po_header = "";
|
|||
|
using ( StreamReader sr = new StreamReader( file ) ) {
|
|||
|
while ( sr.Peek() >= 0 ) {
|
|||
|
string msgid;
|
|||
|
string first_line = sr.ReadLine();
|
|||
|
string last_line = ReadTillMessageEnd( sr, first_line, "msgid", out msgid );
|
|||
|
string msgstr;
|
|||
|
last_line = ReadTillMessageEnd( sr, last_line, "msgstr", out msgstr );
|
|||
|
//if ( msgid.Length > 0 && msgstr.Length > 0 ) {
|
|||
|
if ( msgid.Length > 0 ) {
|
|||
|
if ( list.ContainsKey( msgid ) ) {
|
|||
|
list[msgid] = msgstr;
|
|||
|
} else {
|
|||
|
list.Add( msgid, msgstr );
|
|||
|
}
|
|||
|
} else {
|
|||
|
po_header = msgstr;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
string[] ids = new string[list.Keys.Count];
|
|||
|
string[] msgs = new string[ids.Length];
|
|||
|
int i = -1;
|
|||
|
foreach ( string id in list.Keys ) {
|
|||
|
i++;
|
|||
|
ids[i] = id;
|
|||
|
msgs[i] = list[ids[i]];
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public string GetMessage( string id ) {
|
|||
|
if ( list.ContainsKey( id ) ) {
|
|||
|
string ret = list[id];
|
|||
|
if ( ret == "" ) {
|
|||
|
return id;
|
|||
|
} else {
|
|||
|
return list[id];
|
|||
|
}
|
|||
|
}
|
|||
|
return id;
|
|||
|
}
|
|||
|
|
|||
|
public void Write( string file ) {
|
|||
|
using ( StreamWriter sw = new StreamWriter( file ) ) {
|
|||
|
if ( po_header != "" ) {
|
|||
|
sw.WriteLine( "msgid \"\"" );
|
|||
|
sw.WriteLine( "msgstr \"\"" );
|
|||
|
sw.WriteLine( po_header );
|
|||
|
sw.WriteLine();
|
|||
|
} else {
|
|||
|
sw.WriteLine( "msgid \"\"" );
|
|||
|
sw.WriteLine( "msgstr \"\"" );
|
|||
|
sw.WriteLine( "\"Content-Type: text/plain; charset=UTF-8\\n\"" );
|
|||
|
sw.WriteLine( "\"Content-Transfer-Encoding: 8bit\\n\"" );
|
|||
|
sw.WriteLine();
|
|||
|
}
|
|||
|
foreach ( string key in list.Keys ) {
|
|||
|
string skey = key.Replace( "\n", "\\n\"\n\"" );
|
|||
|
sw.WriteLine( "msgid \"" + skey + "\"" );
|
|||
|
string s = list[key];
|
|||
|
s = s.Replace( "\n", "\\n\"\n\"" );
|
|||
|
sw.WriteLine( "msgstr \"" + s + "\"" );
|
|||
|
sw.WriteLine();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private static void SeparateEntryAndMessage( string source, out string entry, out string message ) {
|
|||
|
string line = source.Trim();
|
|||
|
entry = "";
|
|||
|
message = "";
|
|||
|
if ( line.Length <= 0 ) {
|
|||
|
return;
|
|||
|
}
|
|||
|
int index_space = line.IndexOf( ' ' );
|
|||
|
int index_dquoter = line.IndexOf( '"' );
|
|||
|
int index = Math.Min( index_dquoter, index_space );
|
|||
|
entry = line.Substring( 0, index );
|
|||
|
message = line.Substring( index_dquoter + 1 );
|
|||
|
message = message.Substring( 0, message.Length - 1 );
|
|||
|
}
|
|||
|
|
|||
|
private static string ReadTillMessageEnd( StreamReader sr, string first_line, string entry, out string msg ) {
|
|||
|
msg = "";
|
|||
|
string line = first_line;
|
|||
|
bool entry_found = false;
|
|||
|
if ( line.StartsWith( entry ) ) {
|
|||
|
string dum, dum2;
|
|||
|
SeparateEntryAndMessage( line, out dum, out dum2 );
|
|||
|
msg += dum2;
|
|||
|
} else {
|
|||
|
while ( sr.Peek() >= 0 ) {
|
|||
|
line = sr.ReadLine();
|
|||
|
if ( line.StartsWith( "#" ) ) {
|
|||
|
continue;
|
|||
|
}
|
|||
|
if ( line.StartsWith( entry ) ) {
|
|||
|
string dum, dum2;
|
|||
|
SeparateEntryAndMessage( line, out dum, out dum2 );
|
|||
|
msg += dum2;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
string ret = "";
|
|||
|
while ( sr.Peek() >= 0 ) {
|
|||
|
line = sr.ReadLine();
|
|||
|
if ( !line.StartsWith( "\"" ) ) {
|
|||
|
msg = msg.Replace( "\\\"", "\"" );
|
|||
|
msg = msg.Replace( "\\n", "\n" );
|
|||
|
return line;
|
|||
|
}
|
|||
|
int index = line.LastIndexOf( "\"" );
|
|||
|
msg += line.Substring( 1, index - 1 );
|
|||
|
}
|
|||
|
msg = msg.Replace( "\\\"", "\"" );
|
|||
|
msg = msg.Replace( "\\n", "\n" );
|
|||
|
return line;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|