@@ -31,22 +31,28 @@ namespace rime {
3131
3232class Opencc {
3333 public:
34- Opencc (const path& config_path) {
35- LOG (INFO) << " initializing opencc: " << config_path;
34+ Opencc (const path& config_path)
35+ : initialized_(false ), config_path_(config_path) {}
36+
37+ void Initialize () {
38+ if (initialized_)
39+ return ;
40+ initialized_ = true ;
3641 opencc::Config config;
3742 try {
3843 // opencc accepts file path encoded in UTF-8.
39- converter_ = config.NewFromFile (config_path .u8string ());
44+ converter_ = config.NewFromFile (config_path_ .u8string ());
4045
4146 const list<opencc::ConversionPtr> conversions =
4247 converter_->GetConversionChain ()->GetConversions ();
4348 dict_ = conversions.front ()->GetDict ();
4449 } catch (...) {
45- LOG (ERROR) << " opencc config not found: " << config_path ;
50+ LOG (ERROR) << " opencc config not found: " << config_path_ ;
4651 }
4752 }
4853
4954 bool ConvertWord (const string& text, vector<string>* forms) {
55+ Initialize ();
5056 if (converter_ == nullptr ) {
5157 return false ;
5258 }
@@ -111,6 +117,7 @@ class Opencc {
111117 }
112118
113119 bool RandomConvertText (const string& text, string* simplified) {
120+ Initialize ();
114121 if (dict_ == nullptr )
115122 return false ;
116123 const list<opencc::ConversionPtr> conversions =
@@ -143,13 +150,16 @@ class Opencc {
143150 }
144151
145152 bool ConvertText (const string& text, string* simplified) {
153+ Initialize ();
146154 if (converter_ == nullptr )
147155 return false ;
148156 *simplified = converter_->Convert (text);
149157 return *simplified != text;
150158 }
151159
152160 private:
161+ bool initialized_;
162+ path config_path_;
153163 opencc::ConverterPtr converter_;
154164 opencc::DictPtr dict_;
155165};
0 commit comments