|
|
translate.cpp00001 /* 00002 * TOPPERS/FDMP Kernel 00003 * Toyohashi Open Platform for Embedded Real-Time Systems/ 00004 * Function Distributed Multiprocessor Kernel 00005 * 00006 * Copyright (C) 2004 by Witz Corporation, JAPAN 00007 * Copyright (C) 2005 by Takagi Nobuhisa 00008 * 00009 * 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 00010 * によって公表されている GNU General Public License の Version 2 に記 00011 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア 00012 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, 00013 * 利用と呼ぶ)することを無償で許諾する. 00014 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 00015 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 00016 * スコード中に含まれていること. 00017 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 00018 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 00019 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 00020 * の無保証規定を掲載すること. 00021 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 00022 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 00023 * と. 00024 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 00025 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 00026 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 00027 * 報告すること. 00028 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 00029 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 00030 * 00031 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 00032 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 00033 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 00034 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 00035 * 00036 */ 00037 00038 /* 00039 * translate.cpp 00040 */ 00041 #include "toppers/reporter.hpp" 00042 #include <cstring> 00043 #include <string> 00044 #include <map> 00045 #include <utility> 00046 #include <boost/scoped_array.hpp> 00047 00048 #ifdef TOPPERS_HAS_ICONV 00049 #include <iconv.h> 00050 #endif 00051 00052 namespace 00053 { 00054 00055 const int number_of_languages = toppers::reporter::number_of_languages; 00056 toppers::reporter::language_type language = toppers::reporter::English; 00057 00058 const char* message_table[][number_of_languages] = 00059 { 00060 { 00061 "Usage: cfg [options] file\n" 00062 "Options:\n" 00063 " -h --help Display this information\n" 00064 " -lj --japanese Use Japanese\n" 00065 " -le --english Use English\n" 00066 " -cfg --kernel_cfg=<file> Specify the <file> instead of `kernel_cfg.c\'\n" 00067 " -id --kernel_id=<file> Specify the <file> instead of `kernel_id.h\'\n" 00068 " -ucn Enable universal character name in CFG file\n" 00069 " -sjis Enable Shift-JIS in CFG file\n" 00070 " -n <directory> Specify the <directory> where output files\n" 00071 " -kernel <type> Specify the kernel type, <type> which is JSP or FDMP\n", 00072 00073 "使用方法: cfg [options] file\n" 00074 "オプション:\n" 00075 " -h --help この情報を表示します\n" 00076 " -lj --japanese 日本語を使用します\n" 00077 " -le --english 英語を使用します\n" 00078 " -cfg --kernel_cfg=<file> `kernel_cfg.c\'の代わりに<file>を指定します\n" 00079 " -id --kernel_id=<file> `kernel_id.h\'の代わりに<file>を指定します\n" 00080 " -ucn CFGファイル内の国際文字名を許可します\n" 00081 " -sjis CFGファイル内のシフトJISを許可します\n" 00082 " -n <directory> ファイルの出力先として<directory>を指定します\n" 00083 " -kernel <type> カーネル種別(JSPまたはFDMP)を指定します\n", 00084 }, 00085 { 00086 "no input file", 00087 "入力ファイルが指定されていません", 00088 }, 00089 { 00090 "too many input files", 00091 "入力ファイルが多すぎます", 00092 }, 00093 { 00094 "illegal option `%1%\'", 00095 "`%1%\'は不正なオプションです", 00096 }, 00097 { 00098 "unknown error", 00099 "未知のエラーが発生しました", 00100 }, 00101 { 00102 "internal error", 00103 "内部エラーが発生しました", 00104 }, 00105 { 00106 "argument to `%1%\' is missing", 00107 "`%1%\'の引数がありません", 00108 }, 00109 { 00110 "%1% is not directory", 00111 "%1%はディレクトリではありません", 00112 }, 00113 { 00114 "cannot make directory `%1%\'", 00115 "ディレクトリ`%1%\'を作成できません", 00116 }, 00117 { 00118 "cannot create file `%1%\'", 00119 "ファイル`%1%\'を作成できません", 00120 }, 00121 { 00122 "cannot open file `%1%\'", 00123 "ファイル`%1%\'を開けません", 00124 }, 00125 { 00126 "warning: ", 00127 "警告: ", 00128 }, 00129 { 00130 "error: ", 00131 "エラー: ", 00132 }, 00133 { 00134 "fatal error: ", 00135 "致命的エラー: ", 00136 }, 00137 { 00138 "syntax error", 00139 "構文エラー", 00140 }, 00141 { 00142 "static API `%1%\' cannot be unresolved", 00143 "静的API `%1%\'を解決できません", 00144 }, 00145 { 00146 "parameter `%1%\' must be `NULL\'", 00147 "パラメータ`%1%\'はNULLでなければなりません", 00148 }, 00149 { 00150 "parameter `%1%\' is negative", 00151 "パラメータ`%1%\'が負の値です", 00152 }, 00153 { 00154 "`INCLUDE\' expects string literal", 00155 "`INCLUDE\'には文字列リテラルを指定しなければなりません", 00156 }, 00157 { 00158 "missing `%1%\' before `%2%\'", 00159 "`%2\'の前に`%1%\'がありません", 00160 }, 00161 { 00162 "illegal argument `%1%'", 00163 "引数`%1\'が不正です", 00164 }, 00165 { 00166 "id `%1%\' of %2% is duplicated", 00167 "%2%のID番号`%1\'が重複しています", 00168 }, 00169 { 00170 "missing `}\'", 00171 "`}\'がありません", 00172 }, 00173 { 00174 "kerne type `%1%\' is not supported", 00175 "カーネル種別`%1%\'はサポートされていません" 00176 }, 00177 { 00178 "unknown #pragma directive `%1%\'", 00179 "不明な#pragma指令`%1%\'", 00180 }, 00181 { 00182 "no contents in cfg file", 00183 "cfgファイルにコンテンツが含まれていません", 00184 }, 00185 }; 00186 00187 const char* encode( const char* s ) 00188 { 00189 #if defined( __CYGWIN__ ) || defined( __MINGW32__ ) 00190 # if ' ' == 0xa1a1 // CFGのソースコードはEUC 00191 static boost::scoped_array<char> t; 00192 std::size_t ss = std::strlen( s ); 00193 std::size_t st = ss; 00194 00195 t.reset( new char[ss+1] ); 00196 const char *ps = s; 00197 char *pt = t.get(); 00198 iconv_t cd = iconv_open( "SHIFT_JIS", "EUCJP" ); 00199 iconv( cd, &ps, &ss, &pt, &st ); 00200 iconv_close( cd ); 00201 *pt = '\0'; 00202 s = t.get(); 00203 # endif 00204 #endif 00205 return s; 00206 } 00207 00208 const char* translate( const char* s ) 00209 { 00210 struct translation_map 00211 { 00212 std::map<std::string, const char*const*> map_; 00213 00214 translation_map( const char* message[][number_of_languages], std::size_t size ) 00215 { 00216 for ( std::size_t i = 0; i < size; i++ ) 00217 { 00218 map_.insert( std::make_pair( std::string( message[i][0] ), message[i] ) ); 00219 } 00220 } 00221 }; 00222 static translation_map tr( message_table, sizeof( message_table )/sizeof( message_table[0] ) ); 00223 const std::map<std::string, const char*const*>::const_iterator iter( tr.map_.find( s ) ); 00224 if ( iter != tr.map_.end() ) 00225 { 00226 return encode( iter->second[language] ); 00227 } 00228 return s; 00229 } 00230 00231 } 00232 00237 void set_language( toppers::reporter::language_type lang ) 00238 { 00239 language = lang; 00240 toppers::reporter::set_translator( &translate ); 00241 } 00242 Copyright © 2006 by TAKAGI Nobuhisa. このページは Wed Apr 12 16:31:55 2006 に Doxygen によって生成されました。 |