| 
									
										
										
										
											2009-07-07 20:13:39 +00:00
										 |  |  | #!/usr/bin/env php
 | 
					
						
							| 
									
										
										
										
											2008-08-17 12:04:51 -04:00
										 |  |  | <?php | 
					
						
							| 
									
										
										
										
											2009-07-07 20:13:39 +00:00
										 |  |  | /* | 
					
						
							| 
									
										
										
										
											2009-08-25 18:14:12 -04:00
										 |  |  |  * StatusNet - the distributed open-source microblogging tool | 
					
						
							| 
									
										
										
										
											2009-08-25 18:12:20 -04:00
										 |  |  |  * Copyright (C) 2008, 2009, StatusNet, Inc. | 
					
						
							| 
									
										
										
										
											2009-07-07 20:13:39 +00:00
										 |  |  |  * | 
					
						
							|  |  |  |  * This program is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  |  * it under the terms of the GNU Affero General Public License as published by | 
					
						
							|  |  |  |  * the Free Software Foundation, either version 3 of the License, or | 
					
						
							|  |  |  |  * (at your option) any later version. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program 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.  See the | 
					
						
							|  |  |  |  * GNU Affero General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU Affero General Public License | 
					
						
							|  |  |  |  * along with this program.  If not, see <http://www.gnu.org/licenses/>. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Abort if called from a web server
 | 
					
						
							|  |  |  | if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) { | 
					
						
							|  |  |  |     print "This script must be run from the command line\n"; | 
					
						
							|  |  |  |     exit(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); | 
					
						
							| 
									
										
										
										
											2009-08-25 18:42:34 -04:00
										 |  |  | define('STATUSNET', true); | 
					
						
							| 
									
										
										
										
											2009-08-26 10:41:36 -04:00
										 |  |  | define('LACONICA', true); // compatibility
 | 
					
						
							| 
									
										
										
										
											2009-07-07 20:13:39 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | require_once(INSTALLDIR . '/lib/common.php'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-25 18:12:20 -04:00
										 |  |  | // Master StatusNet .pot file location (created by update_pot.sh)
 | 
					
						
							| 
									
										
										
										
											2010-04-07 00:46:03 +02:00
										 |  |  | $statusnet_pot = INSTALLDIR . '/locale/statusnet.pot'; | 
					
						
							| 
									
										
										
										
											2008-08-17 12:04:51 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | set_time_limit(60); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Languages to pull */ | 
					
						
							| 
									
										
										
										
											2009-07-07 20:13:39 +00:00
										 |  |  | $languages = get_all_languages(); | 
					
						
							| 
									
										
										
										
											2008-08-17 12:04:51 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* Update the languages */ | 
					
						
							| 
									
										
										
										
											2009-11-06 16:53:07 +01:00
										 |  |  | // Language code conversion for translatewiki.net (these are MediaWiki codes)
 | 
					
						
							| 
									
										
										
										
											2009-11-06 16:40:54 +01:00
										 |  |  | $codeMap = array( | 
					
						
							|  |  |  | 	'nb'    => 'no', | 
					
						
							|  |  |  | 	'pt_BR' => 'pt-br', | 
					
						
							|  |  |  | 	'zh_CN' => 'zh-hans', | 
					
						
							|  |  |  | 	'zh_TW' => 'zh-hant' | 
					
						
							|  |  |  | ); | 
					
						
							| 
									
										
										
										
											2008-08-17 12:04:51 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-06 18:49:42 +01:00
										 |  |  | $doneCodes = array(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-07 20:13:39 +00:00
										 |  |  | foreach ($languages as $language) { | 
					
						
							| 
									
										
										
										
											2009-11-06 16:40:54 +01:00
										 |  |  | 	$code = $language['lang']; | 
					
						
							| 
									
										
										
										
											2009-07-07 20:13:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-06 16:40:54 +01:00
										 |  |  | 	// Skip export of source language
 | 
					
						
							| 
									
										
										
										
											2009-11-06 16:53:07 +01:00
										 |  |  | 	// and duplicates
 | 
					
						
							| 
									
										
										
										
											2009-11-06 17:16:43 +01:00
										 |  |  | 	if( $code == 'en' || $code == 'no' ) { | 
					
						
							| 
									
										
										
										
											2009-11-06 16:40:54 +01:00
										 |  |  | 		continue; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2009-11-03 12:13:24 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-06 18:49:42 +01:00
										 |  |  | 	// Do not export codes twice (happens for 'nb')
 | 
					
						
							|  |  |  | 	if( in_array( $code, $doneCodes ) ) { | 
					
						
							|  |  |  | 		continue; | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		$doneCodes[] = $code; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-06 16:40:54 +01:00
										 |  |  | 	// Convert code if needed
 | 
					
						
							|  |  |  | 	if( isset( $codeMap[$code] ) ) { | 
					
						
							| 
									
										
										
										
											2009-11-06 16:53:07 +01:00
										 |  |  | 		$twnCode = $codeMap[$code]; | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		$twnCode = str_replace('_', '-', strtolower($code)); // pt_BR -> pt-br
 | 
					
						
							| 
									
										
										
										
											2009-11-06 16:40:54 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Fetch updates from translatewiki.net...
 | 
					
						
							| 
									
										
										
										
											2009-11-03 12:13:24 -08:00
										 |  |  |     $file_url = 'http://translatewiki.net/w/i.php?' . | 
					
						
							|  |  |  |         http_build_query(array( | 
					
						
							|  |  |  |             'title' => 'Special:Translate', | 
					
						
							|  |  |  |             'task' => 'export-to-file', | 
					
						
							| 
									
										
										
										
											2010-09-18 23:50:36 +02:00
										 |  |  |             'group' => 'out-statusnet-core', | 
					
						
							| 
									
										
										
										
											2009-11-06 17:16:43 +01:00
										 |  |  |             'language' => $twnCode)); | 
					
						
							| 
									
										
										
										
											2009-11-03 12:13:24 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-07 20:13:39 +00:00
										 |  |  |     $lcdir = INSTALLDIR . '/locale/' . $code; | 
					
						
							|  |  |  |     $msgdir = "$lcdir/LC_MESSAGES"; | 
					
						
							| 
									
										
										
										
											2009-08-25 18:53:24 -04:00
										 |  |  |     $pofile = "$msgdir/statusnet.po"; | 
					
						
							|  |  |  |     $mofile = "$msgdir/statusnet.mo"; | 
					
						
							| 
									
										
										
										
											2008-09-25 05:28:54 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-07 20:13:39 +00:00
										 |  |  |     /* Check for an existing */ | 
					
						
							|  |  |  |     if (!is_dir($msgdir)) { | 
					
						
							|  |  |  |         mkdir($lcdir); | 
					
						
							|  |  |  |         mkdir($msgdir); | 
					
						
							|  |  |  |         $existingSHA1 = ''; | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |         $existingSHA1 = file_exists($pofile) ? sha1_file($pofile) : ''; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2008-09-25 05:28:54 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-07 20:13:39 +00:00
										 |  |  |     /* Get the remote one */ | 
					
						
							| 
									
										
										
										
											2009-07-08 01:10:19 +00:00
										 |  |  |     $new_file = curl_get_file($file_url); | 
					
						
							| 
									
										
										
										
											2008-09-25 05:28:54 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-08 01:10:19 +00:00
										 |  |  |     if ($new_file === FALSE) { | 
					
						
							| 
									
										
										
										
											2010-04-07 00:46:03 +02:00
										 |  |  |         echo "Could not retrieve .po file for $code: $file_url\n"; | 
					
						
							| 
									
										
										
										
											2009-07-07 20:13:39 +00:00
										 |  |  |         continue; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Update if the local .po file is different to the one downloaded, or
 | 
					
						
							|  |  |  |     // if the .mo file is not present.
 | 
					
						
							| 
									
										
										
										
											2009-07-08 01:10:19 +00:00
										 |  |  |     if (sha1($new_file) != $existingSHA1 || !file_exists($mofile)) { | 
					
						
							| 
									
										
										
										
											2009-07-07 20:13:39 +00:00
										 |  |  |         echo "Updating ".$code."\n"; | 
					
						
							| 
									
										
										
										
											2009-07-08 01:10:19 +00:00
										 |  |  |         file_put_contents($pofile, $new_file); | 
					
						
							| 
									
										
										
										
											2009-11-03 12:13:24 -08:00
										 |  |  |         // --backup=off is workaround for Mac OS X fail
 | 
					
						
							|  |  |  |         system(sprintf('msgmerge -U --backup=off %s %s', $pofile, $statusnet_pot)); | 
					
						
							| 
									
										
										
										
											2009-12-03 00:28:00 +01:00
										 |  |  |         /* Do not rebuild/add .mo files by default | 
					
						
							|  |  |  |          * FIXME: should be made a command line parameter. | 
					
						
							| 
									
										
										
										
											2009-11-21 18:40:34 +01:00
										 |  |  |         system(sprintf('msgfmt -o %s %s', $mofile, $pofile)); | 
					
						
							| 
									
										
										
										
											2009-12-03 00:28:00 +01:00
										 |  |  |          */ | 
					
						
							| 
									
										
										
										
											2009-07-07 20:13:39 +00:00
										 |  |  |     } else { | 
					
						
							|  |  |  |         echo "Unchanged - ".$code."\n"; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2008-09-25 05:28:54 -04:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2009-07-07 20:13:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-25 05:28:54 -04:00
										 |  |  | echo "Finished\n"; | 
					
						
							| 
									
										
										
										
											2009-07-08 01:10:19 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function curl_get_file($url) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     $c = curl_init(); | 
					
						
							|  |  |  |     curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); | 
					
						
							|  |  |  |     curl_setopt($c, CURLOPT_URL, $url); | 
					
						
							|  |  |  |     $contents = curl_exec($c); | 
					
						
							|  |  |  |     curl_close($c); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (!empty($contents)) { | 
					
						
							|  |  |  |         return $contents; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return FALSE; | 
					
						
							|  |  |  | } |