Linux за българи: Форуми

Преводи => Преводи на програми => Темата е започната от: neter в Mar 07, 2015, 05:04



Титла: Превод на Tiny Tiny RSS
Публикувано от: neter в Mar 07, 2015, 05:04
Нахвърлих един превод на Tiny Tiny RSS. Преводът е на текущата версия от GitHub, пълен е, само дето се оказа, че засега има няколко стринга, които са забити статично в кода и ги няма в преводния файл, но са малко и трудно се забелязват. Ще гледам преводът да влезе официално в пакета, но ви го споделям предварително тук, за да може тези, които ползват приложението, да го пробват, че доста от стринговете ги писах без проверка къде точно са в интерфейса, та няма да откажа корекции на неточности и предложения за по-добър превод.
За да сработи преводът е нужно папката от архива да се постави в папката locale на tt-rss инсталацията, след което във файла include/functions.php на ред 70 (или около него, в масива $tr) трябва да се добави ред
Код
GeSHi (PHP):
  1. "bg_BG" => "Български",
за да се появи в менюто с езици и да може да се използва от приложението.

При това датите все още ще излизат на английски, тъй като разработчиците ползват директно PHP функцията date() за изписването им, която няма локализация. Ще им пусна предложение да ползват и PHP функцията strftime(), за да могат да се локализират и датите, но ако някой иска не е трудно да си я добави и сам. В същия файл include/functions.php около ред 950 имаме следното парче код
Код
GeSHi (PHP):
  1.        if (!$no_smart_dt) {
  2.            return smart_date_time($user_timestamp,
  3.                $tz_offset, $owner_uid);
  4.        } else {
  5.            if ($long)
  6.                $format = get_pref('LONG_DATE_FORMAT', $owner_uid);
  7.            else
  8.                $format = get_pref('SHORT_DATE_FORMAT', $owner_uid);
  9.  
  10.            return date($format, $user_timestamp);
  11.        }    
  12.    }    
  13.  
  14.    function smart_date_time($timestamp, $tz_offset = 0, $owner_uid = false) {
  15.        if (!$owner_uid) $owner_uid = $_SESSION['uid'];
  16.  
  17.        if (date("Y.m.d", $timestamp) == date("Y.m.d", time() + $tz_offset)) {
  18.            return date("G:i", $timestamp);
  19.        } else if (date("Y", $timestamp) == date("Y", time() + $tz_offset)) {
  20.            $format = get_pref('SHORT_DATE_FORMAT', $owner_uid);
  21.            return date($format, $timestamp);
  22.        } else {
  23.            $format = get_pref('LONG_DATE_FORMAT', $owner_uid);
  24.            return date($format, $timestamp);
  25.        }    
  26.    }
Трябва да се промени така
Код
GeSHi (PHP):
  1.        setlocale(LC_TIME, 'bg_BG.UTF-8');
  2.  
  3.        if (!$no_smart_dt) {
  4.            return smart_date_time($user_timestamp,
  5.                $tz_offset, $owner_uid);
  6.        } else {
  7.            if ($long)
  8.                $format = get_pref('LONG_DATE_FORMAT', $owner_uid);
  9.            else
  10.                $format = get_pref('SHORT_DATE_FORMAT', $owner_uid);
  11.  
  12.            //return date($format, $user_timestamp);
  13.            return strftime($format, strtotime(date("d F Y, H:i:s", $user_timestamp)));
  14.        }    
  15.    }    
  16.  
  17.    function smart_date_time($timestamp, $tz_offset = 0, $owner_uid = false) {
  18.        if (!$owner_uid) $owner_uid = $_SESSION['uid'];
  19.  
  20.        if (date("Y.m.d", $timestamp) == date("Y.m.d", time() + $tz_offset)) {
  21.            return date("G:i", $timestamp);
  22.        } else if (date("Y", $timestamp) == date("Y", time() + $tz_offset)) {
  23.            $format = get_pref('SHORT_DATE_FORMAT', $owner_uid);
  24.            //return date($format, $timestamp);
  25.            return strftime($format, strtotime(date("d F Y, H:i:s", $timestamp)));
  26.        } else {
  27.            $format = get_pref('LONG_DATE_FORMAT', $owner_uid);
  28.            //return date($format, $timestamp);
  29.            return strftime($format, strtotime(date("d F Y, H:i:s", $timestamp)));
  30.        }    
  31.    }
Естествено, трябва да имаме bg_BG.UTF-8 сред добавените локали на сървъра. И, разбира се, задаването на локализацията ще е по-удобно да се изнесе в конфигурационния файл, но да не усложнявам примера. Важно е да се обърне внимание, че синтаксисът на функцията strftime() ($2) е различен от синтаксиса на функцията date() ($2), така че след това човек трябва да си направи съответната замяна на стойностите за дълъг и къс формат на датите в предпочитанията на Tiny Tiny RSS.
За улеснение давам пример, че аз за дълъг формат съм си задал
Цитат
%a, %d %b %Y - %H:%M
а за къс формат
Цитат
%d %b, %H:%M


Титла: Re: Превод на Tiny Tiny RSS
Публикувано от: go_fire в Mar 10, 2015, 21:54
Ех Нетере, какво щяхме да правим безтеб?! Не само тази тема. Я да видим дори само днешната ти активност. Срам е, че архива към темата ти не е бил свален нито веднъж. Ако позволиш мъничка забележчица. Поне аз бих предпочел второто да е от типа:

Код
GeSHi (Bash):
  1. --- 01  2015-03-10 21:52:37.000000000 +0200
  2. +++ 02  2015-03-10 21:53:13.000000000 +0200
  3. @@ -1,4 +1,6 @@
  4. -if (!$no_smart_dt) {
  5. +setlocale(LC_TIME, 'bg_BG.UTF-8');
  6. +
  7. +        if (!$no_smart_dt) {
  8.             return smart_date_time($user_timestamp,
  9.                 $tz_offset, $owner_uid);
  10.         } else {
  11. @@ -7,7 +9,8 @@
  12.             else
  13.                 $format = get_pref('SHORT_DATE_FORMAT', $owner_uid);
  14.  
  15. -            return date($format, $user_timestamp);
  16. +            //return date($format, $user_timestamp);
  17. +            return strftime($format, strtotime(date("d F Y, H:i:s", $user_timestamp)));
  18.         }    
  19.     }    
  20.  
  21. @@ -18,9 +21,11 @@
  22.             return date("G:i", $timestamp);
  23.         } else if (date("Y", $timestamp) == date("Y", time() + $tz_offset)) {
  24.             $format = get_pref('SHORT_DATE_FORMAT', $owner_uid);
  25. -            return date($format, $timestamp);
  26. +            //return date($format, $timestamp);
  27. +            return strftime($format, strtotime(date("d F Y, H:i:s", $timestamp)));
  28.         } else {
  29.             $format = get_pref('LONG_DATE_FORMAT', $owner_uid);
  30. -            return date($format, $timestamp);
  31. +            //return date($format, $timestamp);
  32. +            return strftime($format, strtotime(date("d F Y, H:i:s", $timestamp)));
  33.         }    
  34.     }
  35.  

Разбира се, това е само пример. Include/functions.php не се кав 01 и няма да се заменя от 02.  И малко скапано е генерирано, щото нямам целият functions.php.  Ала важното е, че мантрата е: каквото може да се автоматизира, трябва да се автоматизира. Някак си не ми се редактира на ръка (ако ползвах нещото). Що ли?


Титла: Re: Превод на Tiny Tiny RSS
Публикувано от: neter в Mar 10, 2015, 22:50
Да, няма лошо да е в по-автоматизиран вариант. Тук го показах само като идея, имах надеждата разработчиците да го вкарат официално и да не си играем с допълнителни пачове, само че ме отрязаха засега под претекст, че не било важно :) Tiny Tiny RSS ползва rolling release модела и не се знае колко време дадена версия на patch-а ще бъде актуална, а и трудно ще се проследява. По едно време се замислих дали да не пазя един редовно обновяван, но и с добавена промяната за датите, fork на проекта в моя акаунт в GitHub, и така желаещите да си обновяват инсталациите от това копие, но... желаещите вероятно ще се броят на пръсти, въпреки че ще може да се ползва не само от българските потребители, та ще се получи трепане на мухи с гаубица. Ще опитам да измисля достатъчно удобен и смислен за прилагане и поддръжка вариант, благодаря за подкрепата :) Карай за несваления архив тук - във форума на проекта е свален цели 3 пъти (е, не зная дали е свалян за ползване или за проверка, ама все тая), а скоро ще бъде добавен и официално в приложението, при което много народ ще си го дръпне, ще-неще :P