| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 | <?phpnamespace common\modules\i18n;use common\modules\i18n\models\I18nMessage;use common\modules\i18n\models\I18nSourceMessage;use yii\base\BootstrapInterface;class Module extends \common\modules\Module implements BootstrapInterface{    public $controllerNamespace = 'common\modules\i18n\controllers';    public function bootstrap($app)    {        $app->set('i18n', [            'class' => 'yii\i18n\I18N',            'translations' => [                '*'=> [                    'class' => 'yii\i18n\PhpMessageSource',                    'basePath'=>'@common/modules/i18n/messages',                    'fileMap'=>[                        'common'=>'common.php',                        'backend'=>'backend.php',                        'frontend'=>'frontend.php',                    ],                    'on missingTranslation' => [$this, 'missingTranslation']                ],                'app*' => [                    'class' => 'yii\i18n\PhpMessageSource',                    'basePath'=>'@common/modules/i18n/messages',                    'fileMap' => ['app' => $app->id . '.php'],                    'on missingTranslation' => [$this, 'missingTranslation']                ],                /*'*'=> [                    'class' => 'yii\i18n\DbMessageSource',                    'sourceMessageTable'=>'{{%i18n_source_message}}',                    'messageTable'=>'{{%i18n_message}}',                    'enableCaching' => YII_ENV_DEV,                    'cachingDuration' => 3600,                    'on missingTranslation' => ['\common\modules\i18n\Module', 'missingTranslation']                ],*/            ],        ]);    }    /**     * @param \yii\i18n\MissingTranslationEvent $event     */    public function missingTranslation($event)    {        if (isset($this->params['is_auto_translate']) && $this->params['is_auto_translate']) {            //http://fanyi.baidu.com/v2transapi?from=zh&query=世界&to=en            // 当语言没命中的时候用百度翻译并保存到数据库            $model = I18nSourceMessage::find()->where(['category' => $event->category, 'message' => $event->message])->one();            if ($model == null) {                $model = new I18nSourceMessage();                $model->category = $event->category;                $model->message = $event->message;                $model->save();            }            $messageModel = I18nMessage::find()->where(['id' => $model->id, 'language' => $event->language])->one();            if ($messageModel == null) {                $messageModel = new I18nMessage();                $messageModel->language = $event->language;                $messageModel->id = $model->id;                $messageModel->translation = self::translate($event->message, 'en', self::parseLanguage($event->language));                $messageModel->save();            }            $event->translatedMessage = $messageModel->translation;        }    }    public static function parseLanguage($language)    {        $languageMap = [            'zh-CN' => 'zh'        ];        return $languageMap[$language];    }    public static function translate($text, $from , $to)    {        $url = "http://fanyi.baidu.com/v2transapi";        $data = array (            'from' => $from,            'to' => $to,            'query' => $text        );        $data = http_build_query($data);        $ch = curl_init ();        curl_setopt ($ch, CURLOPT_URL, $url );        curl_setopt ($ch, CURLOPT_REFERER, "http://fanyi.baidu.com" );        curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:37.0) Gecko/20100101 Firefox/37.0' );        curl_setopt ($ch, CURLOPT_HEADER, 0 );        curl_setopt ($ch, CURLOPT_POST, 1 );        curl_setopt ($ch, CURLOPT_POSTFIELDS, $data );        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1 );        curl_setopt ($ch, CURLOPT_TIMEOUT, 10 );        $result = curl_exec($ch);        curl_close($ch);        $result = json_decode($result, true);        if (!isset($result['trans_result']['data']['0']['dst'])){            return false;        }        return $result['trans_result']['data']['0']['dst'];    }}
 |