blob: 599faddd5c5044bd7c1ab4aebb06422c725809eb [file] [log] [blame]
gobrien1a8e02f2008-01-30 01:46:26 +00001<?php
2/*******************************************************************************
3 * Copyright (c) 2008 Eclipse Foundation and others.
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License v1.0
6 * which accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * Eclipse Foundation - Initial API and implementation
droy133e7462008-05-13 17:37:24 +000011 * Motoki MORT mori-m@mxa.nes.nec.co.jp - patch, bug 227366
kitlo9c7c62a2008-10-05 16:05:19 +000012 * Kit Lo (IBM) - patch, bug 217339, generate pseudo translations language packs
13 * Kit Lo (IBM) - patch, bug 234430, need language packs by means of other than update site
kitlo7f522672008-10-21 14:15:54 +000014 * Kit Lo (IBM) - patch, bug 251536, newline char missing after copyright comment on first line
kitlo1173dbd2008-10-21 15:58:36 +000015 * Kit Lo (IBM) - patch, bug 238580, language packs should not include strings that are marked "non-translatable"
kitlo5c9da712008-10-27 12:45:40 +000016 * Kit Lo (IBM) - patch, bug 252140, Illegal token characters in babel fragment names
kitlo58d8a5a2008-09-24 20:08:44 +000017 *******************************************************************************/
gobrien1a8e02f2008-01-30 01:46:26 +000018
19/*
kitlo58d8a5a2008-09-24 20:08:44 +000020 * Documentation: http://wiki.eclipse.org/Babel_/_Server_Tool_Specification#Outputs
gobrien1a8e02f2008-01-30 01:46:26 +000021 */
gobrienb854dcb2008-01-30 18:50:45 +000022
droyb6e25c72008-07-18 13:01:13 +000023ob_start();
kitlo9c7c62a2008-10-05 16:05:19 +000024ini_set("memory_limit", "64M");
kitlo58d8a5a2008-09-24 20:08:44 +000025define("BABEL_BASE_DIR", "../../");
kitlo9c7c62a2008-10-05 16:05:19 +000026require(BABEL_BASE_DIR . "html/common_functions.php");
27require(BABEL_BASE_DIR . "classes/system/dbconnection.class.php");
kitlo399df202008-09-30 15:32:25 +000028$dbc = new DBConnection();
29$dbh = $dbc->connect();
droyb6e25c72008-07-18 13:01:13 +000030
kitlo58d8a5a2008-09-24 20:08:44 +000031$work_dir = "/home/babel-working/";
kitlo9c7c62a2008-10-05 16:05:19 +000032if (!($ini = @parse_ini_file(BABEL_BASE_DIR . "classes/base.conf"))) {
gobrienb854dcb2008-01-30 18:50:45 +000033 errorLog("Failed to find/read database conf file - aborting.");
34 exitTo("error.php?errNo=101300","error: 101300 - database conf can not be found");
35}
gobrienb854dcb2008-01-30 18:50:45 +000036$context = $ini['context'];
gobrienb854dcb2008-01-30 18:50:45 +000037
kitlo9c7c62a2008-10-05 16:05:19 +000038$work_context_dir = $work_dir . $context . "/";
39$tmp_dir = $work_context_dir . "tmp/";
40$babel_language_packs_dir = $work_context_dir . "babel_language_packs/";
41$output_dir = $work_context_dir . "output/";
kitlo58d8a5a2008-09-24 20:08:44 +000042$source_files_dir = "source_files_for_generate/";
gobrienb854dcb2008-01-30 18:50:45 +000043
gobrien1a8e02f2008-01-30 01:46:26 +000044$leader = ". . ";
kitlo58d8a5a2008-09-24 20:08:44 +000045$timestamp = date("Ymdhis");
gobrien1a8e02f2008-01-30 01:46:26 +000046
droyd157aac2008-10-07 21:14:33 +000047$rm_command = "rm -rf $work_dir" . "*";
48exec($rm_command);
droy082976e2008-10-07 21:02:23 +000049exec("mkdir -p $output_dir");
50
kitlo9c7c62a2008-10-05 16:05:19 +000051/*
52 * Create language pack links file
53 */
54exec("mkdir -p $babel_language_packs_dir");
55$language_pack_links_file = fopen("${babel_language_packs_dir}index.html", "w");
56fwrite($language_pack_links_file, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">" .
57 "\n<html>\n<head>\n<title>Babel Language Packs</title>" .
58 "\n<meta http-equiv=Content-Type content=\"text/html; charset=UTF-8\">\n</head>" .
59 "\n<body>\n\t<h1>Babel Language Packs</h1>" .
60 "\n\t<h2>Build ID: $timestamp</h2>");
droy0b08d292008-05-28 15:18:11 +000061
kitlo58d8a5a2008-09-24 20:08:44 +000062echo "Generating update site\n";
kitlo9c7c62a2008-10-05 16:05:19 +000063$train_result = mysql_query("SELECT DISTINCT train_id FROM release_train_projects");
kitlo58d8a5a2008-09-24 20:08:44 +000064while (($train_row = mysql_fetch_assoc($train_result)) != null) {
65 $train_id = $train_row['train_id'];
66 $train_version = "3.4.0";
67 if (strcmp($train_id, "europa") == 0) {
68 $train_version = "3.3.0";
droy0b08d292008-05-28 15:18:11 +000069 }
kitlo9c7c62a2008-10-05 16:05:19 +000070 $train_version_timestamp = "$train_version.v$timestamp";
71 $site_xml = "";
kitlo58d8a5a2008-09-24 20:08:44 +000072
73 $output_dir_for_train = $output_dir . $train_row['train_id'] . "/";
74 exec("mkdir $output_dir_for_train");
75 exec("mkdir ${output_dir_for_train}features/");
76 exec("mkdir ${output_dir_for_train}plugins/");
77
kitlo9c7c62a2008-10-05 16:05:19 +000078 fwrite($language_pack_links_file, "\n\t<h3>Release Train: $train_id</h3>\n\t<ul>");
79
80 $language_result = mysql_query("SELECT * FROM languages WHERE languages.is_active");
81 while (($language_row = mysql_fetch_assoc($language_result)) != null) {
droy0b08d292008-05-28 15:18:11 +000082 $language_name = $language_row['name'];
kitlo58d8a5a2008-09-24 20:08:44 +000083 $language_iso = $language_row['iso_code'];
84 $language_locale = $language_row['locale'];
85 $language_id = $language_row['language_id'];
86 if (strcmp($language_iso, "en") == 0) {
87 $language_iso = "en_AA";
88 $language_name = "Pseudo Translations";
89 }
90 if ($language_locale != null) {
droy0b08d292008-05-28 15:18:11 +000091 $language_name = $language_locale . " " . $language_name;
gobrien1a8e02f2008-01-30 01:46:26 +000092 }
kitlo9c7c62a2008-10-05 16:05:19 +000093
94 $site_xml .= "\n\t<category-def name=\"Babel Language Packs in $language_name\" label=\"Babel Language Packs in $language_name\">";
95 $site_xml .= "\n\t\t<description>Babel Language Packs in $language_name</description>";
96 $site_xml .= "\n\t</category-def>";
97
98 fwrite($language_pack_links_file, "\n\t<h4>Language: $language_name</h4>\n\t<ul>");
99
kitlo58d8a5a2008-09-24 20:08:44 +0000100 echo "${leader}Generating language pack for $train_id - $language_name ($language_iso) (language_id=" . $language_id . ")\n";
101
gobrien1a8e02f2008-01-30 01:46:26 +0000102 /*
droy0b08d292008-05-28 15:18:11 +0000103 * Determine which plug-ins need to be in this language pack.
gobrien1a8e02f2008-01-30 01:46:26 +0000104 */
kitlo58d8a5a2008-09-24 20:08:44 +0000105 if (strcmp($language_iso, "en_AA") == 0) {
106 $file_result = mysql_query("SELECT DISTINCT f.project_id, f.version, f.file_id, f.name
107 FROM files AS f
108 INNER JOIN strings AS s ON f.file_id = s.file_id
109 INNER JOIN release_train_projects as v ON (f.project_id = v.project_id AND f.version = v.version)
110 WHERE f.is_active
111 AND v.train_id = '" . $train_row['train_id'] . "'");
kitlo58d8a5a2008-09-24 20:08:44 +0000112 } else {
113 $file_result = mysql_query("SELECT DISTINCT f.project_id, f.version, f.file_id, f.name
114 FROM files AS f
115 INNER JOIN strings AS s ON f.file_id = s.file_id
116 INNER JOIN translations AS t ON (s.string_id = t.string_id AND t.is_active)
117 INNER JOIN release_train_projects as v ON (f.project_id = v.project_id AND f.version = v.version)
118 WHERE t.language_id = " . $language_id . "
119 AND f.is_active
120 AND v.train_id = '" . $train_row['train_id'] . "'");
121 }
122
droy0b08d292008-05-28 15:18:11 +0000123 $plugins = array();
kitlo9c7c62a2008-10-05 16:05:19 +0000124 $projects = array();
125 $project_versions = array();
126 $pseudo_translations_indexes = array();
kitlo58d8a5a2008-09-24 20:08:44 +0000127 while (($file_row = mysql_fetch_assoc($file_result)) != null) {
128 # save original filename
129 $file_row['origname'] = $file_row['name'];
130
droy02c430a2008-06-02 19:42:08 +0000131 # strip useless CVS structure before the plugin name (bug 221675 c14):
132 $pattern = '/^([a-zA-Z0-9\/_-])+\/([a-zA-Z0-9_-]+)\.([a-zA-Z0-9_-]+)(.*)\.properties$/i';
133 $replace = '${2}.${3}${4}.properties';
134 $file_row['name'] = preg_replace($pattern, $replace, $file_row['name']);
kitlo58d8a5a2008-09-24 20:08:44 +0000135
droy02c430a2008-06-02 19:42:08 +0000136 # strip source folder (bug 221675) (org.eclipse.plugin/source_folder/org/eclipse/plugin)
137 $pattern = '/^([a-zA-Z0-9_-]+)\.([a-zA-Z0-9_-]+)\.([a-zA-Z0-9\._-]+)(.*)\/(\1)([\.\/])(\2)([\.\/])(.*)\.properties$/i';
138 $replace = '${1}.${2}.${3}/${5}${6}${7}${8}${9}.properties';
droy0b08d292008-05-28 15:18:11 +0000139 $file_row['name'] = preg_replace($pattern, $replace, $file_row['name']);
kitlo58d8a5a2008-09-24 20:08:44 +0000140
141 if (preg_match("/^([a-zA-Z0-9\.]+)\/(.*)$/", $file_row['name'], $matches)) {
droy0b08d292008-05-28 15:18:11 +0000142 $file_row['subname'] = $matches[2];
143 $plugins[$matches[1]][] = $file_row;
144 } else {
145 echo " WARNING: no plug-in name found in file " . $file_row['file_id'] . " \"" . $file_row['name'] . "\"\n";
gobrien1a8e02f2008-01-30 01:46:26 +0000146 }
droy0b08d292008-05-28 15:18:11 +0000147 }
kitlo58d8a5a2008-09-24 20:08:44 +0000148
droy0b08d292008-05-28 15:18:11 +0000149 /*
150 * Generate one plug-in fragment for each plug-in
151 */
kitlo58d8a5a2008-09-24 20:08:44 +0000152 foreach ($plugins as $plugin_name => $plugin_row) {
153 echo "${leader}${leader}Generating plug-in fragment $plugin_name\n";
gobrien1a8e02f2008-01-30 01:46:26 +0000154 /*
droy0b08d292008-05-28 15:18:11 +0000155 * Clean and create the temporary directory
gobrien1a8e02f2008-01-30 01:46:26 +0000156 */
kitlo58d8a5a2008-09-24 20:08:44 +0000157 if (file_exists($tmp_dir)) {
158 exec("rm -rf $tmp_dir; mkdir $tmp_dir");
droy0b08d292008-05-28 15:18:11 +0000159 } else {
kitlo58d8a5a2008-09-24 20:08:44 +0000160 exec("mkdir $tmp_dir");
droy0b08d292008-05-28 15:18:11 +0000161 }
gobrien1a8e02f2008-01-30 01:46:26 +0000162 /*
droy0b08d292008-05-28 15:18:11 +0000163 * Generate each *.properties file
gobrien1a8e02f2008-01-30 01:46:26 +0000164 */
droy0b08d292008-05-28 15:18:11 +0000165 foreach ($plugin_row as $properties_file) {
166 /*
167 * Convert the filename to *_lang.properties, e.g., foo_fr.properties
168 */
169 $filename = $properties_file['subname'];
kitlo58d8a5a2008-09-24 20:08:44 +0000170 if (preg_match( "/^(.*)\.properties$/", $filename, $matches)) {
droy0b08d292008-05-28 15:18:11 +0000171 $filename = $matches[1] . '_' . $language_iso . '.properties';
gobrien1a8e02f2008-01-30 01:46:26 +0000172 }
kitlo58d8a5a2008-09-24 20:08:44 +0000173 echo "${leader}${leader}${leader}Generating properties file $filename (file_id=" . $properties_file['file_id'] . ")\n";
droy0b08d292008-05-28 15:18:11 +0000174 /*
175 * Create any needed sub-directories
176 */
kitlo58d8a5a2008-09-24 20:08:44 +0000177 $fullpath = $tmp_dir . $filename;
178 preg_match("/^((.*)\/)?(.+?)$/", $fullpath, $matches);
179 exec("mkdir -p \"" . $matches[1] . "\"");
droy0b08d292008-05-28 15:18:11 +0000180 /*
181 * Start writing to the file
182 */
kitlo58d8a5a2008-09-24 20:08:44 +0000183 $outp = fopen($fullpath, "w");
kitlo9c7c62a2008-10-05 16:05:19 +0000184 fwrite($outp, "# Copyright by many contributors; see http://babel.eclipse.org/");
kitlo58d8a5a2008-09-24 20:08:44 +0000185 if (strcmp($language_iso, "en_AA") == 0) {
186 $sql = "SELECT string_id, name, value FROM strings WHERE file_id = " . $properties_file['file_id'] .
187 " AND is_active AND non_translatable = 0";
188 $strings_result = mysql_query($sql);
189 while (($strings_row = mysql_fetch_assoc($strings_result)) != null) {
kitlo9c7c62a2008-10-05 16:05:19 +0000190 fwrite($outp, "\n" . $strings_row['name'] . "=" . $properties_file['project_id'] . $strings_row['string_id'] .
191 ":" . $strings_row['value']);
kitlo58d8a5a2008-09-24 20:08:44 +0000192
193 $value = htmlspecialchars($strings_row['value']);
194 if (strlen($value) > 100) {
195 $value = substr($value, 0, 100) . " ...";
196 }
kitlo9c7c62a2008-10-05 16:05:19 +0000197 $pseudo_translations_indexes[$properties_file['project_id']][] = "\n\t\t<li><a href=\"http://babel.eclipse.org/babel/translate.php?project=" .
198 $properties_file['project_id'] . "&version=" . $properties_file['version'] . "&file=" .
199 $properties_file['origname'] . "&string=" . $strings_row['name'] . "\">" .
200 $properties_file['project_id'] . $strings_row['string_id'] . "</a>&nbsp;" . $value . "</li>";
kitlo58d8a5a2008-09-24 20:08:44 +0000201 }
202 } else {
203 $sql = "SELECT
204 strings.name AS 'key',
205 strings.value AS orig,
206 translations.value AS trans
droy0b08d292008-05-28 15:18:11 +0000207 FROM strings, translations
208 WHERE strings.string_id = translations.string_id
droy0b08d292008-05-28 15:18:11 +0000209 AND strings.file_id = " . $properties_file['file_id'] . "
kitlo1173dbd2008-10-21 15:58:36 +0000210 AND strings.is_active
211 AND strings.non_translatable = 0
212 AND translations.language_id = " . $language_id . "
kitlo58d8a5a2008-09-24 20:08:44 +0000213 AND translations.is_active";
214 $strings_result = mysql_query($sql);
215 while (($strings_row = mysql_fetch_assoc($strings_result)) != null) {
kitlo7f522672008-10-21 14:15:54 +0000216 fwrite($outp, "\n" . $strings_row['key'] . "=");
kitlo9c7c62a2008-10-05 16:05:19 +0000217 # echo "${leader1S}${leaderS}${leaderS}${leaderS}" . $strings_row['key'] . "=";
kitlo58d8a5a2008-09-24 20:08:44 +0000218 if ($strings_row['trans']) {
219 # json_encode returns the string with quotes fore and aft. Need to strip them.
220 # $tr_string = preg_replace('/^"(.*)"$/', '${1}', json_encode($strings_row['trans']));
221 # $tr_string = str_replace('\\\\', '\\', $tr_string);
222 $tr_string = toescapedunicode($strings_row['trans']);
223 fwrite($outp, $tr_string);
224 # echo $strings_row['trans'];
225 } else {
226 fwrite($outp, $strings_row['orig']);
227 }
228 fwrite($outp, "\n");
droy0b08d292008-05-28 15:18:11 +0000229 }
droy0b08d292008-05-28 15:18:11 +0000230 }
231 /*
232 * Finish the properties file
233 */
kitlo58d8a5a2008-09-24 20:08:44 +0000234 fclose($outp);
235 echo "${leader}${leader}${leader}Completed properties file $filename\n";
gobrien1a8e02f2008-01-30 01:46:26 +0000236 }
237 /*
droy0b08d292008-05-28 15:18:11 +0000238 * Copy in the various legal files
gobrien1a8e02f2008-01-30 01:46:26 +0000239 */
kitlo9c7c62a2008-10-05 16:05:19 +0000240 exec("cp ${source_files_dir}about.html $tmp_dir");
droy0b08d292008-05-28 15:18:11 +0000241 /*
242 * Generate the META-INF/MANIFEST.MF file
243 */
244 $parent_plugin_id = $plugin_name;
kitlo9c7c62a2008-10-05 16:05:19 +0000245 $project_id = $properties_file['project_id'];
kitlo5c9da712008-10-27 12:45:40 +0000246 $fragment_id = "$parent_plugin_id.nl_$language_iso";
kitlo9c7c62a2008-10-05 16:05:19 +0000247 $fragment_filename = "${fragment_id}_$train_version_timestamp.jar";
kitlo58d8a5a2008-09-24 20:08:44 +0000248
droy0b08d292008-05-28 15:18:11 +0000249 $plugins[$plugin_name]['id'] = $fragment_id;
kitlo9c7c62a2008-10-05 16:05:19 +0000250 $plugins[$plugin_name]['version'] = $train_version_timestamp;
kitlo58d8a5a2008-09-24 20:08:44 +0000251
252 exec("mkdir $tmp_dir/META-INF" );
253 $outp = fopen("$tmp_dir/META-INF/MANIFEST.MF", "w");
254 fwrite($outp, "Manifest-Version: 1.0\n");
255 fwrite($outp, "Bundle-Name: $parent_plugin_id $language_name NLS Support\n");
256 fwrite($outp, "Bundle-SymbolicName: $fragment_id ;singleton=true\n");
kitlo9c7c62a2008-10-05 16:05:19 +0000257 fwrite($outp, "Bundle-Version: $train_version_timestamp\n");
258 fwrite($outp, "Bundle-Vendor: Eclipse.org\n");
kitlo58d8a5a2008-09-24 20:08:44 +0000259 fwrite($outp, "Fragment-Host: $parent_plugin_id\n");
260 fclose($outp);
droy0b08d292008-05-28 15:18:11 +0000261 /*
262 * Jar up this directory as the fragment plug-in jar
263 */
kitlo58d8a5a2008-09-24 20:08:44 +0000264 system("cd $tmp_dir; jar cfM ${output_dir_for_train}plugins/$fragment_filename .");
265 echo "${leader}${leader}Completed plug-in fragment $plugin_name\n";
kitlo58d8a5a2008-09-24 20:08:44 +0000266
kitlo9c7c62a2008-10-05 16:05:19 +0000267 $projects[$project_id][] = $fragment_id;
268 $project_versions[$project_id] = $properties_file['version'];
droy0b08d292008-05-28 15:18:11 +0000269 }
kitlo9c7c62a2008-10-05 16:05:19 +0000270 foreach ($projects as $project_id => $fragment_ids) {
271 /*
272 * Sort fragment names
273 */
274 asort($fragment_ids);
275 /*
276 * Create ${babel_language_packs_dir}tmp
277 */
278 exec("mkdir -p ${babel_language_packs_dir}tmp/eclipse/features");
279 exec("mkdir -p ${babel_language_packs_dir}tmp/eclipse/plugins");
280 /*
281 * Clean and create the temporary directory
282 */
283 if (file_exists($tmp_dir)) {
284 exec("rm -rf $tmp_dir; mkdir $tmp_dir");
285 } else {
286 exec("mkdir $tmp_dir");
287 }
288 /*
289 * Create the feature.xml
290 *
291 * TODO <url><update label=... url=... and <url><discovery label=... url=... are not implemented
292 *
293 * <url>
294 * <update label="%updateSiteName" url="http://update.eclipse.org/updates/3.2" />
295 * <discovery label="%updateSiteName" url="http://update.eclipse.org/updates/3.2" />
296 * </url>
297 */
kitlo5c9da712008-10-27 12:45:40 +0000298 $feature_id = "org.eclipse.babel.nls_${project_id}_$language_iso";
kitlo9c7c62a2008-10-05 16:05:19 +0000299 $feature_version = "$train_version.v$timestamp";
300 $feature_filename = "${feature_id}_$train_version_timestamp.jar";
301
302 $project_version = $project_versions[$project_id];
303 $sql = "SELECT pct_complete
304 FROM project_progress
305 WHERE project_id = \"$project_id\"
306 AND version = \"$project_version\"
307 AND language_id = $language_id";
308 $project_pct_complete_result = mysql_query($sql);
309 $project_pct_complete = mysql_result($project_pct_complete_result, 0);
310 if (strcmp($language_iso, "en_AA") == 0) {
311 $project_pct_complete = 100;
312 }
313
314 $outp = fopen("$tmp_dir/feature.xml", "w");
315 fwrite($outp, "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" .
316 "\n<feature" .
317 "\n\tid=\"$feature_id\"" .
318 "\n\tlabel=\"Babel Language Pack for $project_id in $language_name ($project_pct_complete%)\"" .
319 "\n\timage=\"eclipse_update_120.jpg\"" .
320 "\n\tprovider-name=\"%providerName\"" .
321 "\n\tversion=\"$train_version_timestamp\">" .
322 "\n\t<copyright>\n\t\t%copyright\n\t</copyright>" .
323 "\n\t<license url=\"%licenseURL\">\n\t\t%license\n\t</license>" .
324 "\n\t<description>Babel Language Pack for $project_id in $language_name</description>" );
325 foreach ($fragment_ids as $fragment_id) {
326 $jar_name = "${output_dir_for_train}plugins/${fragment_id}_$train_version_timestamp.jar";
327 $size = filesize($jar_name);
328 fwrite($outp, "\n\t<plugin fragment=\"true\" id=\"$fragment_id\" unpack=\"false\" " .
329 "version=\"$train_version_timestamp\" download-size=\"$size\" install-size=\"$size\" />");
330 /*
331 * Copy the plugin to ${babel_language_packs_dir}tmp
332 */
333 exec("cp ${output_dir_for_train}plugins/${fragment_id}_$train_version_timestamp.jar ${babel_language_packs_dir}tmp/eclipse/plugins");
334 }
335 fwrite($outp, "\n</feature>");
336 fclose($outp);
337 /*
338 * Copy in the various legal files
339 */
340 exec("cp ${source_files_dir}about.html $tmp_dir");
341 exec("cp ${source_files_dir}eclipse_update_120.jpg $tmp_dir");
342 exec("cp ${source_files_dir}epl-v10.html $tmp_dir");
343 exec("cp ${source_files_dir}feature.properties $tmp_dir");
344 exec("cp ${source_files_dir}license.html $tmp_dir");
345 /*
346 * Copy in the Babel Pseudo Translations Index file
347 */
348 if (strcmp($language_iso, "en_AA") == 0) {
349 $pseudo_translations_index_file = fopen("${output_dir}BabelPseudoTranslationsIndex-$project_id.html", "w");
350 fwrite($pseudo_translations_index_file, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">" .
351 "\n<html>\n<head>\n<title>Babel Pseudo Translations Index for $project_id</title>" .
352 "\n<meta http-equiv=Content-Type content=\"text/html; charset=UTF-8\">\n</head>" .
353 "\n<body>\n\t<h1>Babel Pseudo Translations Index for $project_id</h1>" .
354 "\n\t<h2>Version: $train_version_timestamp</h2>\n\t<ul>");
355 foreach ($pseudo_translations_indexes[$project_id] as $index) {
356 fwrite($pseudo_translations_index_file, $index);
357 }
358 fwrite($pseudo_translations_index_file, "\n\t</ul>\n</body>\n</html>");
359 fclose($pseudo_translations_index_file);
360 exec("cp ${output_dir}BabelPseudoTranslationsIndex-$project_id.html $tmp_dir");
361 exec("rm ${output_dir}BabelPseudoTranslationsIndex-$project_id.html");
362 }
363 /*
364 * Copy the feature to ${babel_language_packs_dir}tmp before jar'ing up
365 */
366 exec("mkdir -p ${babel_language_packs_dir}tmp/eclipse/features/${fragment_id}_$train_version_timestamp");
367 exec("cd $tmp_dir; cp * ${babel_language_packs_dir}tmp/eclipse/features/${fragment_id}_$train_version_timestamp");
368 /*
369 * Zip up language pack
370 */
371 $language_pack_name = "BabelLanguagePack-$project_id-${language_iso}_$train_version_timestamp.zip";
372 exec("cd ${babel_language_packs_dir}tmp; zip -r $babel_language_packs_dir$language_pack_name eclipse");
373 /*
374 * Clean up ${babel_language_packs_dir}tmp
375 */
376 exec("rm -rf ${babel_language_packs_dir}tmp");
377 /*
378 * Add project language pack link to language pack links file
379 */
380 fwrite($language_pack_links_file, "\n\t<li><a href=\"$language_pack_name\">$language_pack_name</a></li>");
381 /*
382 * Jar up this directory as the feature jar
383 */
384 system("cd $tmp_dir; jar cfM ${output_dir_for_train}features/$feature_filename .");
385 /*
386 * Register this feature with the site.xml
387 */
388 $site_xml .= "\n\t<feature url=\"features/$feature_filename\" id=\"$feature_id\" version=\"$feature_version\">";
389 $site_xml .= "\n\t\t<category name=\"Babel Language Packs in $language_name\"/>";
390 $site_xml .= "\n\t</feature>";
391 echo "${leader}Completed language pack for $language_name ($language_iso)\n";
kitlo58d8a5a2008-09-24 20:08:44 +0000392 }
kitlo9c7c62a2008-10-05 16:05:19 +0000393 fwrite($language_pack_links_file, "\n\t</ul>");
gobrien1a8e02f2008-01-30 01:46:26 +0000394 }
gobrien1a8e02f2008-01-30 01:46:26 +0000395 /*
droy0b08d292008-05-28 15:18:11 +0000396 * <site mirrorsURL=... implemented in the weekly build process by sed'ing <site>
gobrien1a8e02f2008-01-30 01:46:26 +0000397 */
kitlo58d8a5a2008-09-24 20:08:44 +0000398 $outp = fopen("${output_dir_for_train}site.xml", "w");
kitlo9c7c62a2008-10-05 16:05:19 +0000399 fwrite($outp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" .
400 "\n<site>" .
401 "\n\t<description url=\"http://babel.eclipse.org/\">" .
402 "\n\t\tThis update site contains user-contributed translations of the strings in all Eclipse projects." .
403 "\n\t\tPlease see the http://babel.eclipse.org/ Babel project web pages for a full how-to-use explanation of" .
404 "\n\t\tthese translations as well as how you can contribute to the translations of this and future versions of Eclipse." .
405 "\n\t</description>");
kitlo58d8a5a2008-09-24 20:08:44 +0000406 fwrite($outp, $site_xml);
kitlo9c7c62a2008-10-05 16:05:19 +0000407 fwrite($outp, "\n</site>");
kitlo58d8a5a2008-09-24 20:08:44 +0000408 fclose($outp);
kitlo9c7c62a2008-10-05 16:05:19 +0000409
410 fwrite($language_pack_links_file, "\n\t</ul>");
gobrien1a8e02f2008-01-30 01:46:26 +0000411}
gobrien1a8e02f2008-01-30 01:46:26 +0000412echo "Completed generating update site\n";
413
kitlo9c7c62a2008-10-05 16:05:19 +0000414fwrite($language_pack_links_file, "\n</body>\n</html>");
415fclose($language_pack_links_file);
416
gobrien1a8e02f2008-01-30 01:46:26 +0000417/*
kitlo58d8a5a2008-09-24 20:08:44 +0000418 2. what happens if the translation feature includes plug-in fragments for
419 plug-ins that are not in the current image?
420 does it load correctly and ignore those fragments? if so, good
421 A: warnings appear in the run-time error log
422 does it fail to load? if so, then we need to generate different features, perhaps
423 one feature for each plug or else we need to know more about the project
424 distro structure to know which plug-ins to put in each feature
425 what happens if those plug-ins are later added - does it load the strings now?
426 A: probably not
427 3. need to handle different versions of each feature/plugin/platform; generate different
428 language packs for each
429 */
gobrien1a8e02f2008-01-30 01:46:26 +0000430
kitlo58d8a5a2008-09-24 20:08:44 +0000431$alloutput = fopen($output_dir."langpack_output_".date("m_d_Y"), "w");
432fwrite($alloutput,ob_get_contents());
kitlo399df202008-09-30 15:32:25 +0000433?>