1: <?php
2:
3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
37:
38: 39: 40: 41:
42: class AutomaticTranslationCommand extends CConsoleCommand {
43:
44: private $_find;
45: private $_consolidate;
46: private $_update;
47: private $_merge;
48: private $_assimilate;
49:
50: public function run($args) {
51: $this->attachBehaviors(array(
52: 'X2TranslationBehavior' => array('class' => 'X2TranslationBehavior'),
53: ));
54:
55: list($action, $options, $args) = $this->resolveRequest($args);
56: $this->parseOptions($options);
57: if($this->_assimilate){
58: $this->assimilateLanguageFiles();
59: }
60: if ($this->_find) {
61: $this->addMissingTranslations();
62: $this->outputMissingStats();
63: }
64: if ($this->_consolidate) {
65: $this->consolidateMessages();
66: $this->outputConsolidationStats();
67: }
68: if ($this->_update) {
69: $this->updateTranslations();
70: $this->outputTranslationStats();
71: }
72: if($this->_merge){
73: $this->mergeCustomTranslations();
74: $this->outputMergeStats();
75: }
76: $this->outputErrors();
77: }
78:
79: private function parseOptions($args) {
80: if (isset($args['verbose'])) {
81: $this->verbose = true;
82: }
83:
84: if (!isset($args['mode'])) {
85: $args['mode'] = 'fcu';
86: }
87: if (strpos($args['mode'], 'f') !== false) {
88: $this->_find = true;
89: }
90: if (strpos($args['mode'], 'c') !== false) {
91: $this->_consolidate = true;
92: }
93: if (strpos($args['mode'], 'u') !== false) {
94: $this->_update = true;
95: }
96: if (strpos($args['mode'], 'm') !== false) {
97: $this->_merge = true;
98: }
99: if(strpos($args['mode'], 'a') !== false){
100: $this->_assimilate = true;
101: }
102: }
103:
104: private function outputMissingStats() {
105: echo $this->newMessages." new messages were found and added to the translation files.\n\n";
106: }
107:
108: private function outputConsolidationStats() {
109: echo $this->addedToCommon." messages were added to the common file.\n";
110: echo $this->messagesRemoved." messages were removed from other files.\n\n";
111: }
112:
113: private function outputTranslationStats() {
114: setlocale(LC_MONETARY, 'en_US');
115: echo $this->characterCount . ' characters were translated, resulting in approximately ' . money_format('%n',
116: (($this->characterCount) / 2000000) * 20) . " in fees to Google.\n";
117: if($this->limitReached){
118: echo 'Limit reached. Untranslated messages still remain.' . "\n\n";
119: }else{
120: echo 'Automated translation complete.' . "\n\n";
121: }
122: }
123:
124: private function outputMergeStats(){
125: echo $this->customMessageCount." custom translations incorporated into base code.\n\n";
126: }
127:
128: private function outputErrors() {
129: if (isset($this->errors['missingFiles'])) {
130: echo 'Error - Unable to find the following requested translation files:' . "\n";
131: foreach ($this->errors['missingFiles'] as $file) {
132: echo $file . "\n";
133: }
134: echo "\n";
135: }
136: if(isset($this->errors['missingAttributes'])){
137: echo 'Error - Unable to find associated files for the following models:'."\n";
138: foreach($this->errors['missingAttributes'] as $modelName){
139: echo $modelName . "\n";
140: }
141: echo "\n";
142: }
143: }
144:
145: }
146: