16 сентября | 2024г. | 12:11:49


АвторТема: Локализация имиджей (Обсуждение)  (Прочитано 463119 раз)

0 Пользователей и 31 Гостей смотрят эту тему.

Оффлайн 2boom

  • Рыцарь Джедай
  • *****
  • Сообщений: 15162
  • Поблагодарили: 23781
  • Уважение: +168
язык словацкий...


  • VU+ Duo 2 | Vu + Ultimo | DM800se (A8P) | MK-Digital xp1000
на подкуп резидента webmoney: R152988468288  yandex: 410011849574352  Приват24 (в личку)
Авторские работы (скины, пиконы, плагины) выкладывать на сторонних ресурсах запрещено, без согласования с автором
ПИКОНЫ (PICONS) мини FAQ 
ПАКЕТЫ ПИКОНОВ - РЕФЕРЕНС, ПРОВАЙДЕРЫ, СПУТНИКИ

Оффлайн ака Учкун

  • Рыцарь Джедай
  • *****
  • Забанен!
  • Сообщений: 1098
  • Поблагодарили: 4787
  • Уважение: +49
что обозначают разные цвета в программе ?
.....
ну вот синим строки без перевода , а в середине , желтым ?
Вопрос без контекста получился странным))
На самом деле это результат использования msgmerge или другой подобной программы, попытка перевода по шаблону.
Стопроцентные совпадения слов (вне зависимости от регистра букв) программа сразу переведет и будет без цвета, вернее черно-белым, а желтым цветом, это то, что прога "попыталась" перевести по подобному. Так как это не человек, а программа, чаще всего получается чушь собачья, а не перевод, создатели проги это понимают, и поэтому обозначается желтым цветом или fuzzy, то есть сомнительно, подлежит подтверждению человеком. Ну а синим цветом, это вообще то, на что прога даже по подобию не нашла перевода.......
  • vu+ultimo 9995
Мои авторские работы  нельзя редактировать для выкладывания на паблик.
Но их можно выкладывать неизмененными на любых ресурсах с указанием авторства
Мои кошельки:
WMZ     Z356196865451 WMR     R105983132832

Оффлайн 2boom

  • Рыцарь Джедай
  • *****
  • Сообщений: 15162
  • Поблагодарили: 23781
  • Уважение: +168
0
написал маленкий скриптик для вынимимания из файла строк для локализации и формирования файла .po может пригодится кому.. закидываем в директорию где есть файл plugin.py запускаем на выходе получаем outfile.po в котором все подготовлено для перевода, думаю кто знает разберется, для запуска на компе требуется python Download Python
  • VU+ Duo 2 | Vu + Ultimo | DM800se (A8P) | MK-Digital xp1000
на подкуп резидента webmoney: R152988468288  yandex: 410011849574352  Приват24 (в личку)
Авторские работы (скины, пиконы, плагины) выкладывать на сторонних ресурсах запрещено, без согласования с автором
ПИКОНЫ (PICONS) мини FAQ 
ПАКЕТЫ ПИКОНОВ - РЕФЕРЕНС, ПРОВАЙДЕРЫ, СПУТНИКИ

Оффлайн ака Учкун

  • Рыцарь Джедай
  • *****
  • Забанен!
  • Сообщений: 1098
  • Поблагодарили: 4787
  • Уважение: +49
0
Теперь не надо после каждого обновления опенпли заменять файл перевода и компонент PluginList.py.
Vlamo написал плагин, делающий это за вас.
Все что, от вас требуется, это установить этот плагин и забыть о переводе, пока я его не обновлю.
https://gisclub.tv/index.php?topic=13250.0#new
  • vu+ultimo 9995
Мои авторские работы  нельзя редактировать для выкладывания на паблик.
Но их можно выкладывать неизмененными на любых ресурсах с указанием авторства
Мои кошельки:
WMZ     Z356196865451 WMR     R105983132832

Онлайн Vlsergei

  • Друзья Джедаев
  • *****
  • Сообщений: 4576
  • Поблагодарили: 16901
  • Уважение: +148
0
Спасибо за плагин. Установил, имидж сразу на обновление. После обновления всё нормально, как будто и не обновлялся. :bye:
  • Zgemma H9 Twin SE (МТС CI+v1.3, CI+ Триколор-Сибирь) )-LG55LA620V, Zgemma H9 Twin (EXSET Триколор-Сибирь)-LG55UM7400, VU+ UNO 4K- Samsung PS50C431, Matrix2.
90E(C/Ku)+80E+75E+56E+54,9E

Оффлайн ака Учкун

  • Рыцарь Джедай
  • *****
  • Забанен!
  • Сообщений: 1098
  • Поблагодарили: 4787
  • Уважение: +49
0
Обновил локализацию ОпенПли.
Каждый день в течении месяца добавлял по капле, набралось чуток....
Качайте в теме без обсуждения...
  • vu+ultimo 9995
Мои авторские работы  нельзя редактировать для выкладывания на паблик.
Но их можно выкладывать неизмененными на любых ресурсах с указанием авторства
Мои кошельки:
WMZ     Z356196865451 WMR     R105983132832

Оффлайн SlayerNK

  • Младший Джедай
  • **
  • Сообщений: 84
  • Поблагодарили: 20
  • Уважение: +1
0
Нашел еще в окошке с обновлением не переведенные надписи.
Перевод этих строк в локали давно существует. Просто господа плишники "забыли" сделать их локализуемыми в исходниках.
Открываем вот этот файл SoftwareUpdate.py, находящийся по пути /usr/lib/enigma2/python/Screens/ и находим в коде в строчках все это вот английское вот как на скриншотах

(Ссылка на вложение)

(Ссылка на вложение)

И организуем сами локализуемость, ставя перед кавычками с этими словами нижнее подчеркивание и беря их в скобки, то есть вот так вот как на скриншотах

(Ссылка на вложение)

(Ссылка на вложение)

И все это дело тут же будет на русском (после перезагрузки энигмы)...

Файла SoftwareUpdate.py в имидже (openPli 3.0) у меня не было - нашёл поиском,  исправил как выше и было написано, положил в папку /usr/lib/enigma2/python/Screens/, атрибуты 644. Перезагрузил полностью. Но результата никакого, Mode (в настройках Аудио Видео) не перевелось на русский, так же есть пункт в настройках субтитров. Некоторые оглавления меню скина, то же на английском. Вот мой SoftwareUpdate.py, может быть дело в нём?
Спойлер   SoftwareUpdate.py:
from Screens.ChoiceBox import ChoiceBox
from Screens.MessageBox import MessageBox
from Screens.Screen import Screen
from Screens.Standby import TryQuitMainloop
from Components.ActionMap import ActionMap, NumberActionMap
from Components.Ipkg import IpkgComponent
from Components.Sources.StaticText import StaticText
from Components.Slider import Slider
from enigma import eTimer, getBoxType, eDVBDB
from urllib import urlopen
import socket
import os
import re
import time

class UpdatePlugin(Screen):
   skin = """
      <screen name="UpdatePlugin" position="center,center" size="550,300">
         <widget name="activityslider" position="0,0" size="550,5"  />
         <widget name="slider" position="0,150" size="550,30"  />
         <widget source="package" render="Label" position="10,30" size="540,20" font="Regular;18" halign="center" valign="center" backgroundColor="#25062748" transparent="1" />
         <widget source="status" render="Label" position="10,180" size="540,100" font="Regular;20" halign="center" valign="center" backgroundColor="#25062748" transparent="1" />
      </screen>"""

   def __init__(self, session, *args):
      Screen.__init__(self, session)

      self.sliderPackages = { "dreambox-dvb-modules": 1, "enigma2": 2, "tuxbox-image-info": 3 }

      self.setTitle(_("Software update"))
      self.slider = Slider(0, 4)
      self["slider"] = self.slider
      self.activityslider = Slider(0, 100)
      self["activityslider"] = self.activityslider
      self.status = StaticText(_("Please wait..."))
      self["status"] = self.status
      self.package = StaticText(_("Package list update"))
      self["package"] = self.package
      self.oktext = _("Press OK on your remote control to continue.")

      self.packages = 0
      self.error = 0
      self.processed_packages = []
      self.total_packages = None

      self.channellist_only = 0
      self.channellist_name = ''
      self.updating = False
      self.ipkg = IpkgComponent()
      self.ipkg.addCallback(self.ipkgCallback)
      self.onClose.append(self.__close)

      self["actions"] = ActionMap(["WizardActions"],
      {
         "ok": self.exit,
         "back": self.exit
      }, -1)
      
      self.activity = 0
      self.activityTimer = eTimer()
      self.activityTimer.callback.append(self.checkTraficLight)
      self.activityTimer.callback.append(self.doActivityTimer)
      self.activityTimer.start(100, True)

   def checkTraficLight(self):
   
      self.activityTimer.callback.remove(self.checkTraficLight)
      self.activityTimer.start(100, False)

      currentTimeoutDefault = socket.getdefaulttimeout()
      socket.setdefaulttimeout(3)
      message = ""
      picon = None
      default = True
      try:
         # TODO: Use Twisted's URL fetcher, urlopen is evil. And it can
         # run in parallel to the package update.
         if getBoxType() in urlopen("https://openpli.org/status").read().split(','):
            message = _("The current beta image might not be stable.\nFor more information see www.openpli.org.")
            picon = MessageBox.TYPE_ERROR
            default = False
      except:
         message = _("The status of the current beta image could not be checked because www.openpli.org can not be reached.")
         picon = MessageBox.TYPE_ERROR
         default = False
      socket.setdefaulttimeout(currentTimeoutDefault)
      if default:
         self.startActualUpdate(True)
      else:
         message += "\n" + _("Do you want to update your receiver?")
         self.session.openWithCallback(self.startActualUpdate, MessageBox, message, default = default, picon = picon)

   def getLatestImageTimestamp(self):
      currentTimeoutDefault = socket.getdefaulttimeout()
      socket.setdefaulttimeout(3)
      latestImageTimestamp = ""
      try:
         # TODO: Use Twisted's URL fetcher, urlopen is evil. And it can
         # run in parallel to the package update.
         latestImageTimestamp = re.findall('<dd>(.*?)</dd>', urlopen("https://openpli.org/download/"+getBoxType()+"/").read())[0][:16]
         latestImageTimestamp = time.strftime(_("%d-%b-%Y %-H:%M"), time.strptime(latestImageTimestamp, "%Y/%m/%d %H:%M"))
      except:
         pass
      socket.setdefaulttimeout(currentTimeoutDefault)
      return latestImageTimestamp

   def startActualUpdate(self,answer):
      if answer:
         self.updating = True
         self.ipkg.startCmd(IpkgComponent.CMD_UPDATE)
      else:
         self.close()

   def doActivityTimer(self):
      self.activity += 1
      if self.activity == 100:
         self.activity = 0
      self.activityslider.setValue(self.activity)

   def showUpdateCompletedMessage(self):
      self.setEndMessage(ngettext(_("Update completed, %d package was installed."), _("Update completed, %d packages were installed."), self.packages) % self.packages)

   def ipkgCallback(self, event, param):
      if event == IpkgComponent.EVENT_DOWNLOAD:
         self.status.setText(_("Downloading"))
      elif event == IpkgComponent.EVENT_UPGRADE:
         if self.sliderPackages.has_key(param):
            self.slider.setValue(self.sliderPackages[param])
         self.package.setText(param)
         self.status.setText(_("Upgrading") + ": %s/%s" % (self.packages, self.total_packages))
         if not param in self.processed_packages:
            self.processed_packages.append(param)
            self.packages += 1
      elif event == IpkgComponent.EVENT_INSTALL:
         self.package.setText(param)
         self.status.setText(_("Installing"))
         if not param in self.processed_packages:
            self.processed_packages.append(param)
            self.packages += 1
      elif event == IpkgComponent.EVENT_REMOVE:
         self.package.setText(param)
         self.status.setText(_("Removing"))
         if not param in self.processed_packages:
            self.processed_packages.append(param)
            self.packages += 1
      elif event == IpkgComponent.EVENT_CONFIGURING:
         self.package.setText(param)
         self.status.setText(_("Configuring"))
      elif event == IpkgComponent.EVENT_MODIFIED:
         if config.plugins.softwaremanager.overwriteConfigFiles.value in ("N", "Y"):
            self.ipkg.write(True and config.plugins.softwaremanager.overwriteConfigFiles.value)
         else:
            self.session.openWithCallback(
               self.modificationCallback,
               MessageBox,
               _("A configuration file (%s) has been modified since it was installed.\nDo you want to keep your modifications?") % (param)
            )
      elif event == IpkgComponent.EVENT_ERROR:
         self.error += 1
      elif event == IpkgComponent.EVENT_DONE:
         if self.updating:
            self.updating = False
            self.ipkg.startCmd(IpkgComponent.CMD_UPGRADE_LIST)
         elif self.ipkg.currentCommand == IpkgComponent.CMD_UPGRADE_LIST:
            self.total_packages = len(self.ipkg.getFetchedList())
            if self.total_packages:
               latestImageTimestamp = self.getLatestImageTimestamp()
               if latestImageTimestamp:
                  message = _("Do you want to update your receiver to %s?") % self.getLatestImageTimestamp() + "\n"
               else:
                  message = _("Do you want to update your receiver?") + "\n"
               message = message + "(" + (ngettext(_("%s updated package available"), _("%s updated packages available"), self.total_packages) % self.total_packages) + ")"
               choices = [(_("Update and reboot (recommended)"), "cold"),
                  (_("Update and ask to reboot"), "hot"),
                  (_("Update channel list only"), "channels"),
                  (_("Cancel"), "")]
               self.session.openWithCallback(self.startActualUpgrade, ChoiceBox, title=message, list=choices)
            else:
               self.session.openWithCallback(self.close, MessageBox, _("No updates available"), type=MessageBox.TYPE_INFO, timeout=10, close_on_any_key=True)
         elif self.channellist_only > 0:
            if self.channellist_only == 1:
               self.setEndMessage(_("Could not find installed channel list."))
            elif self.channellist_only == 2:
               self.slider.setValue(2)
               self.ipkg.startCmd(IpkgComponent.CMD_REMOVE, {'package': self.channellist_name})
               self.channellist_only += 1
            elif self.channellist_only == 3:
               self.slider.setValue(3)
               self.ipkg.startCmd(IpkgComponent.CMD_INSTALL, {'package': self.channellist_name})
               self.channellist_only += 1
            elif self.channellist_only == 4:
               self.showUpdateCompletedMessage()
               eDVBDB.getInstance().reloadBouquets()
               eDVBDB.getInstance().reloadServicelist()
         elif self.error == 0:
            self.showUpdateCompletedMessage()
         else:
            self.activityTimer.stop()
            self.activityslider.setValue(0)
            error = _("Your receiver might be unusable now. Please consult the manual for further assistance before rebooting your receiver.")
            if self.packages == 0:
               error = _("No updates available. Please try again later.")
            if self.updating:
               error = _("Update failed. Your receiver does not have a working internet connection.")
            self.status.setText(_("Error") +  " - " + error)
      elif event == IpkgComponent.EVENT_LISTITEM:
         if 'enigma2-plugin-settings-' in param[0] and self.channellist_only > 0:
            self.channellist_name = param[0]
            self.channellist_only = 2
      #print event, "-", param
      pass

   def setEndMessage(self, txt):
      self.slider.setValue(4)
      self.activityTimer.stop()
      self.activityslider.setValue(0)
      self.package.setText(txt)
      self.status.setText(self.oktext)

   def startActualUpgrade(self, answer):
      if not answer or not answer[1]:
         self.close()
         return
      if answer[1] == "cold":
         self.session.open(TryQuitMainloop,retvalue=42)
         self.close()
      elif answer[1] == "channels":
         self.channellist_only = 1
         self.slider.setValue(1)
         self.ipkg.startCmd(IpkgComponent.CMD_LIST, args = {'installed_only': True})
      else:
         self.ipkg.startCmd(IpkgComponent.CMD_UPGRADE, args = {'test_only': False})

   def modificationCallback(self, res):
      self.ipkg.write(res and "N" or "Y")

   def exit(self):
      if not self.ipkg.isRunning():
         if self.packages != 0 and self.error == 0 and self.channellist_only == 0:
            self.session.openWithCallback(self.exitAnswer, MessageBox, _("Update completed. Do you want to reboot your receiver?"))
         else:
            self.close()
      else:
         if not self.updating:
            self.close()

   def exitAnswer(self, result):
      if result is not None and result:
         self.session.open(TryQuitMainloop,retvalue=2)
      self.close()

   def __close(self):
      self.ipkg.removeCallback(self.ipkgCallback)
 

Оффлайн ака Учкун

  • Рыцарь Джедай
  • *****
  • Забанен!
  • Сообщений: 1098
  • Поблагодарили: 4787
  • Уважение: +49
0
Я конечно извиняюсь, но в таких случаях всегда на язык лезет слово "Мля".....
Ну елки-палки блин ты бы еще сослался на мой пост за июль месяц.......
Я еще в августе не имел никакого понятия про линуксовые ресиверы и про язык программирования питон в том числе....

Естественно тот мой пост устарел давным давно.
В указываемом файле в указанном месте применен ngettext, а следовательно уже было заложена локализуемость и мои тогдашние понятия были неверными.....
Не надо ничего менять, в файле локализации уже присутствует перевод через plural........
  • vu+ultimo 9995
Мои авторские работы  нельзя редактировать для выкладывания на паблик.
Но их можно выкладывать неизмененными на любых ресурсах с указанием авторства
Мои кошельки:
WMZ     Z356196865451 WMR     R105983132832

Оффлайн SlayerNK

  • Младший Джедай
  • **
  • Сообщений: 84
  • Поблагодарили: 20
  • Уважение: +1
0
Я конечно извиняюсь, но в таких случаях всегда на язык лезет слово "Мля".....
Ну елки-палки блин ты бы еще сослался на мой пост за июль месяц.......
Я еще в августе не имел никакого понятия про линуксовые ресиверы и про язык программирования питон в том числе....

Естественно тот мой пост устарел давным давно.
В указываемом файле в указанном месте применен ngettext, а следовательно уже было заложена локализуемость и мои тогдашние понятия были неверными.....
Не надо ничего менять, в файле локализации уже присутствует перевод через plural........

Возникла проблема, прошёлся по теме чтобы найти решение. Предлагаете задавать вопрос не читая? То что присутствует перевод, и ничего менять не надо - это хорошо. Только плохо, что не переводит. Что такое plural, мне лично не понятно.

Вот так в вашем последнем файле:

msgid "Mode"
msgstr "Режим"

msgid "Mode "
msgstr "Режим"





Оффлайн a_pkh

  • Младший Джедай
  • **
  • Сообщений: 195
  • Поблагодарили: 100
  • Уважение: 0
0
После обновлений снова всплыли не переведенные строчки в Pli.....
 

Оффлайн MegAndretH

  • Джедай Куратор
  • **
  • Сообщений: 1012
  • Поблагодарили: 1137
  • Уважение: +5
0
ака Учкун
И еще в файле локализации на фиде PLi осталось:
2174 msgid "Filesystem check"
2175 msgstr "Изменение файловой системы"
вместо "Проверка..."

Оффлайн AEPHFF

  • Джедай
  • ***
  • Сообщений: 314
  • Поблагодарили: 338
  • Уважение: +3
0
ака Учкун, подправьте пожалуйста локализацию, а то после последних обновлений кое-где снова повылазил английский.


Оффлайн братела

  • Великий Джедай
  • ****
  • Сообщений: 586
  • Поблагодарили: 460
  • Уважение: +1
OpenPLI 3.0, обновление от 01.01.2013г.
При установке плагина управление вентилятором :
[ Гостям не разрешен просмотр вложений ]
в меню - настройка - система - управление вентилятором :
[ Гостям не разрешен просмотр вложений ]
и при выходе из него:
[ Гостям не разрешен просмотр вложений ]
нет перевода. Если не трудно, поправить локализацию. Заранее спасибо!

Оффлайн a_pkh

  • Младший Джедай
  • **
  • Сообщений: 195
  • Поблагодарили: 100
  • Уважение: 0
0
В английской версии файла локализации enigma2.mo присутствует строка:

msgid "Video output mode(символ EOT - если смотреть в Notepad++ или ромбик FAR)Mode"
msgstr "Mode"

Как правильно переносить такую строку файл локализации русского?
msgid "Video output mode(символ EOT - если смотреть в Notepad++ или ромбик FAR)Mode"
msgstr "Видео режим"

Если со значком - ошибка сохранения и компиляции, если так:
msgid "Video output mode"
msgstr "Видео режим"

то строка не переводится...
P.S. Насколько я понимаю это символ означает End Off Translation.

Онлайн Дмитрий73

  • Джедай Куратор
  • **
  • Сообщений: 4379
  • Поблагодарили: 11619
  • Уважение: +91
0
поедит в помощь

Теги:
 

Похожие темы

  Тема / Автор Ответов Последний ответ
174 Ответов
291168 Просмотров
Последний ответ 30 марта | 2023г. | 18:34:10
от Durimar
18 Ответов
42389 Просмотров
Последний ответ 13 сентября | 2018г. | 23:40:39
от sety
31 Ответов
35357 Просмотров
Последний ответ 12 июня | 2024г. | 16:25:02
от dima_83
11 Ответов
18490 Просмотров
Последний ответ 17 января | 2015г. | 11:43:24
от Ser6
389 Ответов
121470 Просмотров
Последний ответ 08 ноября | 2021г. | 17:57:46
от Shar_Nir



X

Добро пожаловать!

Мы заметили, что у Вас установлено расширение AdBlock или ему подобное. Пожалуйста добавьте наш Клуб в белый список, внесите этим посильную лепту в его развитие. Спасибо!