]> git.wh0rd.org - tt-rss.git/commitdiff
automatically extract i18n data from .js files
authorAndrew Dolgov <fox@bah.org.ru>
Fri, 20 Feb 2009 09:57:02 +0000 (12:57 +0300)
committerAndrew Dolgov <fox@bah.org.ru>
Fri, 20 Feb 2009 09:57:02 +0000 (12:57 +0300)
localized_js.php
offline.js
update-translations.sh
utils/extract-i18n-js.pl [new file with mode: 0755]
utils/update-js-translations.sh [new file with mode: 0755]

index ee230940ced68f33b72f2a75d83cd3a417d25037..849bab9f181c2ccc2b9051613da1984711abd701 100644 (file)
@@ -9,13 +9,13 @@ function T_js_decl($s1) {
 
        if (!$s1) return;
 
-       $T_s1 = __($s1);
+//     $T_s1 = __($s1);
 
-       if ($T_s1 != $s1) {
+//     if ($T_s1 != $s1) {
                return "T_messages[\"$s1\"] = \"".__($s1)."\";\n";
-       } else {
-               return "";
-       }
+//     } else {
+//             return "";
+//     }
 }
 ?>
 
@@ -31,124 +31,152 @@ function __(msg) {
 }
 
 <?php
-
-print T_js_decl("display feeds");
-print T_js_decl("display tags");
-print T_js_decl("Loading, please wait...");
-print T_js_decl("All feeds updated.");
-print T_js_decl("Marking all feeds as read...");
+print T_js_decl("");
+print T_js_decl("Actions...");
 print T_js_decl("Adding feed...");
-print T_js_decl("Removing feed...");
-print T_js_decl("Saving feed...");
-print T_js_decl("Can't add category: no name specified.");
 print T_js_decl("Adding feed category...");
-print T_js_decl("Can't add user: no login specified.");
-
 print T_js_decl("Adding user...");
-print T_js_decl("Can't create label: missing SQL expression.");
+print T_js_decl("All");
+print T_js_decl("All articles");
+print T_js_decl("All feeds updated.");
+print T_js_decl("Assign score to article:");
+print T_js_decl("Assign selected articles to label?");
+print T_js_decl("Can't add category: no name specified.");
+print T_js_decl("Can't add filter: nothing to match on.");
 print T_js_decl("Can't create label: missing caption.");
-print T_js_decl("Remove selected labels?");
-print T_js_decl("Removing selected labels...");
-print T_js_decl("No labels are selected.");
-print T_js_decl("Remove selected users?");
-print T_js_decl("Removing selected users...");
-print T_js_decl("No users are selected.");
-print T_js_decl("Remove selected filters?");
-print T_js_decl("Removing selected filters...");
-print T_js_decl("No filters are selected.");
-print T_js_decl("Unsubscribe from selected feeds?");
-print T_js_decl("Unsubscribing from selected feeds...");
-print T_js_decl("No feeds are selected.");
-print T_js_decl("Remove selected categories?");
-print T_js_decl("Removing selected categories...");
-print T_js_decl("No categories are selected.");
-print T_js_decl("Saving category...");
-print T_js_decl("Loading help...");
-print T_js_decl("Saving label...");
-print T_js_decl("Login field cannot be blank.");
-print T_js_decl("Saving user...");
-print T_js_decl("Saving filter...");
-print T_js_decl("No labels are selected.");
-print T_js_decl("Please select only one label.");
-print T_js_decl("No users are selected.");
-print T_js_decl("Please select only one user.");
-print T_js_decl("No users are selected.");
-print T_js_decl("Please select only one user.");
-print T_js_decl("Reset password of selected user?");
-print T_js_decl("Resetting password for selected user...");
-print T_js_decl("No feeds are selected.");
-print T_js_decl("Please select only one feed.");
-print T_js_decl("No filters are selected.");
-print T_js_decl("Please select only one filter.");
-print T_js_decl("No feeds are selected.");
-print T_js_decl("Please select one feed.");
-print T_js_decl("No categories are selected.");
-print T_js_decl("Please select only one category.");
-print T_js_decl("No OPML file to upload.");
+print T_js_decl("Can't create user: no login specified.");
+print T_js_decl("Can't open article: received invalid article link");
+print T_js_decl("Can't open article: received invalid XML");
+print T_js_decl("Can't subscribe: no feed URL given.");
+print T_js_decl("Category reordering disabled");
+print T_js_decl("Category reordering enabled");
 print T_js_decl("Changing category of selected feeds...");
-print T_js_decl("Reset to defaults?");
-print T_js_decl("Trying to change password...");
-print T_js_decl("Trying to change e-mail...");
-print T_js_decl("No articles are selected.");
-print T_js_decl("Could not update headlines (missing XML object)");
+print T_js_decl("Clearing feed...");
+print T_js_decl("Clearing selected feed...");
+print T_js_decl("Click to collapse category");
+print T_js_decl("comments");
+print T_js_decl("Could not change feed URL.");
 print T_js_decl("Could not display article (missing XML object)");
-print T_js_decl("No feed selected.");
-print T_js_decl("Replace current publishing address with a new one?");
-print T_js_decl("Address changed.");
-print T_js_decl("Could not change address.");
-print T_js_decl("You can't unsubscribe from the category.");
-print T_js_decl("Please select some feed first.");
-print T_js_decl("You can't edit this kind of feed.");
-print T_js_decl("Can't create label: missing SQL expression.");
-print T_js_decl("Can't create label: missing caption.");
-print T_js_decl("Can't add user: no login specified.");
-print T_js_decl("No labels are selected.");
-print T_js_decl("No users are selected.");
-print T_js_decl("No filters are selected.");
-print T_js_decl("No feeds are selected.");
-print T_js_decl("No categories are selected.");
+print T_js_decl("Could not update headlines (missing XML data)");
+print T_js_decl("Could not update headlines (missing XML object)");
+print T_js_decl("Data for offline browsing has not been downloaded yet.");
+print T_js_decl("display feeds");
+print T_js_decl("Entered passwords do not match.");
+print T_js_decl("Entire feed");
+print T_js_decl("Erase all non-starred articles in %s?");
+print T_js_decl("Erase all non-starred articles in selected feed?");
+print T_js_decl("Error: Invalid feed URL.");
+print T_js_decl("Error: No feed URL given.");
+print T_js_decl("Error while trying to load more headlines");
+print T_js_decl("Failed to load article in new window");
+print T_js_decl("Failed to open window for the article");
+print T_js_decl("How many days of articles to keep (0 - use default)?");
+print T_js_decl("Invert");
+print T_js_decl("Last sync: Cancelled.");
+print T_js_decl("Last sync: Error receiving data.");
+print T_js_decl("Last sync: %s");
+print T_js_decl("Loading feed list...");
+print T_js_decl("Loading, please wait...");
+print T_js_decl("Local data removed.");
 print T_js_decl("Login field cannot be blank.");
-print T_js_decl("No feeds are selected.");
-print T_js_decl("Can't add filter: nothing to match on.");
-print T_js_decl("Can't subscribe: no feed URL given.");
-print T_js_decl("Unsubscribe from %s?");
-print T_js_decl("Mark all visible articles in %s as read?");
+print T_js_decl("Mark all articles as read?");
 print T_js_decl("Mark all articles in %s as read?");
+print T_js_decl("Mark all visible articles in %s as read?");
+print T_js_decl("Mark as read:");
+print T_js_decl("Mark %d article(s) as read?");
 print T_js_decl("Mark %d selected articles in %s as read?");
-print T_js_decl("Please enter label title:");
-print T_js_decl("Save current configuration?");
-print T_js_decl("Old password cannot be blank.");
+print T_js_decl("Marking all feeds as read...");
 print T_js_decl("New password cannot be blank.");
-print T_js_decl("Entered passwords do not match.");
-print T_js_decl("No articles found to mark");
-print T_js_decl("Mark %d article(s) as read?");
 print T_js_decl("No article is selected.");
-print T_js_decl("Star article");
-print T_js_decl("Unstar article");
+print T_js_decl("No articles are selected.");
+print T_js_decl("No articles found to display.");
+print T_js_decl("No articles found to mark");
+print T_js_decl("No categories are selected.");
+print T_js_decl("No feeds are selected.");
+print T_js_decl("No feed selected.");
+print T_js_decl("No filters are selected.");
+print T_js_decl("No labels are selected.");
+print T_js_decl("None");
+print T_js_decl("No OPML file to upload.");
+print T_js_decl("No users are selected.");
+print T_js_decl("Old password cannot be blank.");
+print T_js_decl("Please enter label caption:");
+print T_js_decl("Please enter login:");
+print T_js_decl("Please enter new label background color:");
+print T_js_decl("Please enter new label foreground color:");
+print T_js_decl("Please select one feed.");
+print T_js_decl("Please select only one feed.");
+print T_js_decl("Please select only one filter.");
+print T_js_decl("Please select only one user.");
+print T_js_decl("Please select some feed first.");
 print T_js_decl("Please wait...");
+print T_js_decl("Please wait until operation finishes.");
 print T_js_decl("Publish article");
-print T_js_decl("Unpublish article");
-print T_js_decl("You can't clear this type of feed.");
-print T_js_decl("Erase all non-starred articles in %s?");
-print T_js_decl("Mark all articles as read?");
-print T_js_decl("Rescore articles in selected feeds?");
-print T_js_decl("Rescoring selected feeds...");
-print T_js_decl("Rescore articles in all feeds? This operation may take a lot of time.");
-print T_js_decl("Rescoring feeds...");
-print T_js_decl("You can't rescore this kind of feed.");
+print T_js_decl("Published feed URL changed.");
+print T_js_decl("Purging selected feed...");
+print T_js_decl("Remove filter %s?");
+print T_js_decl("Remove selected articles from label?");
+print T_js_decl("Remove selected categories?");
+print T_js_decl("Remove selected filters?");
+print T_js_decl("Remove selected labels?");
+print T_js_decl("Remove selected users?");
+print T_js_decl("Removing feed...");
+print T_js_decl("Removing filter...");
+print T_js_decl("Removing offline data...");
+print T_js_decl("Removing selected categories...");
+print T_js_decl("Removing selected filters...");
+print T_js_decl("Removing selected labels...");
+print T_js_decl("Removing selected users...");
+print T_js_decl("Replace current publishing address with a new one?");
+print T_js_decl("Rescore all articles? This operation may take a lot of time.");
 print T_js_decl("Rescore articles in %s?");
+print T_js_decl("Rescore articles in selected feeds?");
+print T_js_decl("Rescore last 100 articles in selected feeds?");
 print T_js_decl("Rescoring articles...");
 print T_js_decl("Reset category order?");
-print T_js_decl("Category reordering enabled");
-print T_js_decl("Category reordering disabled");
+print T_js_decl("Reset label colors to default?");
+print T_js_decl("Reset password of selected user?");
+print T_js_decl("Resetting password for selected user...");
+print T_js_decl("Reset to defaults?");
 print T_js_decl("Save changes to selected feeds?");
+print T_js_decl("Save current configuration?");
+print T_js_decl("Saving article tags...");
+print T_js_decl("Saving feed...");
 print T_js_decl("Saving feeds...");
-#print T_js_decl(
-#print T_js_decl(
-#print T_js_decl(
-#print T_js_decl(
-#print T_js_decl(
-#print T_js_decl(
-#print T_js_decl(
-#print T_js_decl(
+print T_js_decl("Saving filter...");
+print T_js_decl("Saving user...");
+print T_js_decl("Select:");
+print T_js_decl("Selection");
+print T_js_decl("Selection toggle:");
+print T_js_decl("Star article");
+print T_js_decl("Starred");
+print T_js_decl("Starred articles");
+print T_js_decl("Subscribing to feed...");
+print T_js_decl("Switch Tiny Tiny RSS into offline mode?");
+print T_js_decl("Synchronizing...");
+print T_js_decl("Synchronizing articles...");
+print T_js_decl("Synchronizing articles (%d)...");
+print T_js_decl("Synchronizing categories...");
+print T_js_decl("Synchronizing feeds...");
+print T_js_decl("Synchronizing labels...");
+print T_js_decl("tag cloud");
+print T_js_decl("This will remove all offline data stored by Tiny Tiny RSS on this computer. Continue?");
+print T_js_decl("Tiny Tiny RSS has trouble accessing its server. Would you like to go offline?");
+print T_js_decl("Tiny Tiny RSS is in offline mode.");
+print T_js_decl("Tiny Tiny RSS will reload. Go online?");
+print T_js_decl("Trying to change address...");
+print T_js_decl("Trying to change e-mail...");
+print T_js_decl("Trying to change password...");
+print T_js_decl("Unpublish article");
+print T_js_decl("Unread");
+print T_js_decl("Unstar article");
+print T_js_decl("Unsubscribe from %s?");
+print T_js_decl("Unsubscribe from selected feeds?");
+print T_js_decl("Unsubscribing from selected feeds...");
+print T_js_decl("You can't clear this type of feed.");
+print T_js_decl("You can't edit this kind of feed.");
+print T_js_decl("You can't rescore this kind of feed.");
+print T_js_decl("You can't unsubscribe from the category.");
+print T_js_decl("You have to synchronize some articles before going into offline mode.");
+print T_js_decl("You won't be able to access offline version of Tiny Tiny RSS until you switch it into offline mode again. Go online?");
 ?>
index 9054ea455cc0c1b848ff1ea54a65b1818724b351..010bbe05e2b94e00425face108b46890e497bb79 100644 (file)
@@ -854,8 +854,6 @@ function update_offline_data(stage) {
 
                if (!db || offline_mode || getInitParam("offline_enabled") != "1") return;
 
-//             notify_progress("Updating offline data... (" + stage +")", true);
-
                var query = "backend.php?op=rpc&subop=download";
                
                var rs = db.execute("SELECT MAX(id), MIN(id) FROM articles");
index 0b78958b2e2854716ce15cc69d67722824e9ed2b..93c4e5d76e08c47b39af3970fc613dc87edaadff 100755 (executable)
@@ -25,3 +25,5 @@ for lang in $LANGS; do
        PO_BASENAME=`echo $lang | sed s/.po//`
        update_lang $PO_BASENAME
 done
+
+./utils/update-js-translations.sh
diff --git a/utils/extract-i18n-js.pl b/utils/extract-i18n-js.pl
new file mode 100755 (executable)
index 0000000..d6179fc
--- /dev/null
@@ -0,0 +1,15 @@
+#!/usr/bin/perl -w
+#
+use strict;
+
+while (<STDIN>) {
+       chomp;
+
+       if (/(__|notify_progress|notify|notify_info|notify_error)\(['"](.*?)['"]\)/) {
+               my $msg = $2;
+
+               $msg =~ s/\"/\\\"/g;
+
+               print "print T_js_decl(\"$msg\");\n";
+       }
+}
diff --git a/utils/update-js-translations.sh b/utils/update-js-translations.sh
new file mode 100755 (executable)
index 0000000..432cf7e
--- /dev/null
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+if [ ! -f localized_js.php ]; then
+       echo "please run this script from tt-rss directory"
+       exit 1
+fi
+
+cat >localized_js.php <<HEADER
+<?php 
+error_reporting(E_ERROR | E_WARNING | E_PARSE);
+define('DISABLE_SESSIONS', true);
+
+require "functions.php";
+header("Content-Type: text/plain; charset=UTF-8");
+
+function T_js_decl(\$s1) {
+
+       if (!\$s1) return;
+
+//     \$T_s1 = __(\$s1);
+
+//     if (\$T_s1 != \$s1) {
+               return "T_messages[\"\$s1\"] = \"".__(\$s1)."\";\n";
+//     } else {
+//             return "";
+//     }
+}
+?>
+
+var T_messages = new Object();
+
+function __(msg) {
+       if (T_messages[msg]) {
+               return T_messages[msg];
+       } else {
+               debug('[gettext] not found: ' + msg);
+               return msg;
+       }
+}
+
+<?php
+HEADER
+
+cat *js | ./utils/extract-i18n-js.pl | sort | uniq >> localized_js.php
+
+cat >>localized_js.php <<FOOTER
+?>
+FOOTER