JFIF$        dd7 

Viewing File: /usr/share/l.v.e-manager/utils/generate_locale_files_for_plesk.py

#!/opt/cloudlinux/venv/bin/python3 -bb
# coding=utf-8
#
# Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2019 All Rights Reserved
#
# Licensed under CLOUD LINUX LICENSE AGREEMENT
# http://cloudlinux.com/docs/LICENSE.TXT

from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
import sys
import os
import cldetectlib as detect
import json

SOURCE_PATH = '/usr/share/l.v.e-manager/'
LOCALES_SOURCE_PATH = SOURCE_PATH + 'commons/spa-resources/i18n/'
PLESK_LOCALES_DIR = SOURCE_PATH + 'plesk/plib/modules/plesk-lvemanager/resources/locales/'
DEFAULT_SOURCE_LANG_JSON = LOCALES_SOURCE_PATH + 'en-en.json'

# Phrases below wee need only to translate of the Custom Buttons
# in other cases SPA will be translated using JSON-s from i18n/
ORIGINAL_PHRASES = ['CloudLinux Manager', 'PHP Selector', 'Resource Usage', 'X-Ray', 'AccelerateWP']


class Locales(object):
    """
    Generate locales for Plesk custom buttons
    """

    @staticmethod
    def add_locale_file(source_lang_json, out_file, template):
        """
        Add single locale file for Plesk
        :param source_lang_json: json file from i18n/
        :param out_file: generated file
        :param template: template used to generate file
        :return: None
        """
        content_array = []
        if not os.path.isfile(source_lang_json):
            source_lang_json = DEFAULT_SOURCE_LANG_JSON  # use english lang if no translation
        with open(source_lang_json, 'r') as f:
            json_content = json.loads(f.read())
        for phrase in ORIGINAL_PHRASES:
            content_array.append('  \'{}\' => \'{}\''
                                 .format(phrase, json_content.get(phrase, phrase)))
        with open(out_file, 'w') as f:
            translations = ',\n'.join(content_array)
            f.write(template.format(translations))

    def generate_locales(self, template):
        """
        Generate required locales for Plesk.
        :param template: string: Template for rendering of new localization files.
        :return: None
        """
        if not os.path.isdir(PLESK_LOCALES_DIR):
            os.makedirs(PLESK_LOCALES_DIR)

        for locale in os.listdir(LOCALES_SOURCE_PATH):
            filename = '{}/{}'.format(LOCALES_SOURCE_PATH, locale)
            if os.path.isfile(filename) and filename.endswith('.json'):
                locale = locale.split('.')[0]
                source_lang_json = LOCALES_SOURCE_PATH + locale + '.json'
                plesk_locale = "{}-{}".format(locale.split('-')[0], locale.split('-')[-1].upper())
                out_file = PLESK_LOCALES_DIR + plesk_locale + '.php'
                self.add_locale_file(source_lang_json, out_file, template)

    def main(self):
        if detect.is_plesk():
            template = '<?php\n  $messages = array(\n{}\n);\n'
            self.generate_locales(template)
        else:
            sys.exit('This script should be run only on Plesk')


if __name__ == '__main__':
    Locales().main()
Back to Directory  nL+D550H?Mx ,D"v]qv;6*Zqn)ZP0!1 A "#a$2Qr D8 a Ri[f\mIykIw0cuFcRı?lO7к_f˓[C$殷WF<_W ԣsKcëIzyQy/_LKℂ;C",pFA:/]=H  ~,ls/9ć:[=/#f;)x{ٛEQ )~ =𘙲r*2~ a _V=' kumFD}KYYC)({ *g&f`툪ry`=^cJ.I](*`wq1dđ#̩͑0;H]u搂@:~וKL Nsh}OIR*8:2 !lDJVo(3=M(zȰ+i*NAr6KnSl)!JJӁ* %݉?|D}d5:eP0R;{$X'xF@.ÊB {,WJuQɲRI;9QE琯62fT.DUJ;*cP A\ILNj!J۱+O\͔]ޒS߼Jȧc%ANolՎprULZԛerE2=XDXgVQeӓk yP7U*omQIs,K`)6\G3t?pgjrmۛجwluGtfh9uyP0D;Uڽ"OXlif$)&|ML0Zrm1[HXPlPR0'G=i2N+0e2]]9VTPO׮7h(F*癈'=QVZDF,d߬~TX G[`le69CR(!S2!P <0x<!1AQ "Raq02Br#SCTb ?Ζ"]mH5WR7k.ۛ!}Q~+yԏz|@T20S~Kek *zFf^2X*(@8r?CIuI|֓>^ExLgNUY+{.RѪ τV׸YTD I62'8Y27'\TP.6d&˦@Vqi|8-OΕ]ʔ U=TL8=;6c| !qfF3aů&~$l}'NWUs$Uk^SV:U# 6w++s&r+nڐ{@29 gL u"TÙM=6(^"7r}=6YݾlCuhquympǦ GjhsǜNlɻ}o7#S6aw4!OSrD57%|?x>L |/nD6?/8w#[)L7+6〼T ATg!%5MmZ/c-{1_Je"|^$'O&ޱմTrb$w)R$& N1EtdU3Uȉ1pM"N*(DNyd96.(jQ)X 5cQɎMyW?Q*!R>6=7)Xj5`J]e8%t!+'!1Q5 !1 AQaqё#2"0BRb?Gt^## .llQT $v,,m㵜5ubV =sY+@d{N! dnO<.-B;_wJt6;QJd.Qc%p{ 1,sNDdFHI0ГoXшe黅XۢF:)[FGXƹ/w_cMeD,ʡcc.WDtA$j@:) -# u c1<@ۗ9F)KJ-hpP]_x[qBlbpʖw q"LFGdƶ*s+ډ_Zc"?%t[IP 6J]#=ɺVvvCGsGh1 >)6|ey?Lӣm,4GWUi`]uJVoVDG< SB6ϏQ@ TiUlyOU0kfV~~}SZ@*WUUi##; s/[=!7}"WN]'(L! ~y5g9T̅JkbM' +s:S +B)v@Mj e Cf jE 0Y\QnzG1д~Wo{T9?`Rmyhsy3!HAD]mc1~2LSu7xT;j$`}4->L#vzŏILS ֭T{rjGKC;bpU=-`BsK.SFw4Mq]ZdHS0)tLg