Letní akce PHP týden
Pouze tento týden sleva až 80 % na kurzy PHP. Lze kombinovat s akcí Letní slevy na prémiový obsah!
Brno? Vypsali jsme pro vás nové termíny školení Základů programování a OOP v Brně!
Avatar
heavyblack1
Člen
Avatar
heavyblack1:19. června 14:17

Ahoj chcu se zeptat na nejlepší způsob jak ukladat nastavení do yaml momentalně je tak když uložím pomocí funkce yaml_saver() a soubor existuje tak mi vyhodí OSError vyjímku a já se chcu zeptat existuje něco elegantějšího než před uložením vymazat .settings.yaml a pak uložit jde to nějak nahradit.

Dotaz číslo 2:
při ukladaní nastavení uloží takto já se chcu zeptat jak udělat aby se to ukladalo normalně čítelně jako division: "dělení" a ne jako division: "d\u011Blen\xED a ano ukladam utf-8:

language:
  cz:
    addition: "s\u010D\xEDt\xE1n\xED"
    angular: "\xDAhlov\xE1 konverze"
    author: 'Autor:'
    cosine: Kosinus
    division: "d\u011Blen\xED"
    exponentiation: "umoc\u0148ov\xE1n\xED"
    first_number: "Zadej prvn\xED \u010D\xEDslo:"
    hyp_f: "Hyperbolick\xE9 funkce"
    is_not: "nen\xED"
    licence_agree: "Souhlas\xEDte s licenc\xED: y/n"
    multiplication: "n\xE1soben\xED"
    num_th: "\u010C\xEDseln\xE9 a teoretick\xE9 funkce"
    p_log: "V\xFDkonov\xE9 a logaritmick\xE9 funkces"
    result: "V\xFDsledek "
    rooting: "odmoc\u0148ov\xE1n\xED"
    s_help: "Program osahuje tyto v\xFDpo\u010Detn\xED oprace \n Napov\u011Bda: Zadajte\
      \ \u010Dislo operace \nDesetin\xE1 \u010D\xEDsla zadavejte s te\u010Dkou jako\
      \ nap\u0159: 4.5\nPro se\u017Eten\xED \u010Disel pomoci sum do prvn\xEDho \u010D\
      isla zadejte ve formatu: 4,5.6,4 \u010D\xEDsla jsou od\u011Blen\xE1 \u010Darkami"
    second_number: "Zadej druh\xE9 \u010D\xEDslo:"
    sine: Sinus
    spec_f: "Speci\xE1ln\xED funkce"
    subtraction: "od\u010D\xEDt\xE1n\xED"
    tan: Tangens
    trigo_f: "Goniometrick\xE1 funkce"
    zero_division_error: "D\u011Blen\xED nulou"
  en:
    addition: "s\u010D\xEDt\xE1n\xED"
    angular: Angular conversion
    author: 'Author:'
    cosine: Cosine
    division: "d\u011Blen\xED"
    exponentiation: "umoc\u0148ov\xE1n\xED"
    first_number: 'Enter first number:'
    hyp_f: Hyperbolic functions
    is_not: is not
    licence_agree: 'Licence agreement: y/n'
    multiplication: "n\xE1soben\xED"
    num_th: Number-theoretic and representation functions
    p_log: Power and logarithmic functions
    result: Result
    rooting: "odmoc\u0148ov\xE1n\xED"
    s_help: "Program osahuje tyto v\xFDpo\u010Detn\xED oprace \n Napov\u011Bda: Zadajte\
      \ \u010Dislo operace \nDesetin\xE1 \u010D\xEDsla zadavejte s te\u010Dkou jako\
      \ nap\u0159: 4.5\nPro se\u017Eten\xED \u010Disel pomoci sum do prvn\xEDho \u010D\
      isla zadejte ve formatu: 4,5.6,4 \u010D\xEDsla jsou od\u011Blen\xE1 \u010Darkami"
    second_number: 'Enter second number:'
    sine: Sine
    spec_f: Special functions
    subtraction: "od\u010D\xEDt\xE1n\xED"
    tan: Tan
    trigo_f: Trigonometric functions
    zero_division_error: Zero Division Error
settings:
  first_run: false
  language: cz
  printlog: true

Dotaz číslo 3:
Existuje nějaké lepší načítaní hlašek
než do globalní proměné uložit hlašky
jinak do yamlu ukladam hla3ky v češtině angličnoně a ostatní jazyky

def lang_loader():
    """
    lang loader
    """

    global author
    global licence_agree
    global first_number
    global second_number
    global is_not
    global result
    global s_help
    global num_th
    global p_log
    global trigo_f
    global angular
    global hyp_f
    global spec_f
    global addition
    global subtraction
    global multiplication
    global division
    global exponentiation
    global rooting
    global sine
    global cosine
    global tan
    global zero_division_error
    # loading mesages cz or en or other
    if setti["settings"]["language"] == "cz":
        lang = setti["language"]["cz"]
        author = lang["author"]
        licence_agree = lang["licence_agree"]
        first_number = lang["first_number"]
        second_number = lang["second_number"]
        is_not = lang["is_not"]
        result = lang["result"]
        s_help = lang["s_help"]
        num_th = lang["num_th"]
        p_log = lang["p_log"]
        trigo_f = lang["trigo_f"]
        angular = lang["angular"]
        hyp_f = lang["hyp_f"]
        spec_f = lang["spec_f"]
        addition = lang["addition"]
        subtraction = lang["subtraction"]
        multiplication = lang["multiplication"]
        division = lang["division"]
        exponentiation = lang["exponentiation"]
        rooting = lang["rooting"]
        sine = lang["sine"]
        cosine = lang["cosine"]
        tan = lang["tan"]
        zero_division_error = lang["zero_division_error"]
    elif setti["settings"]["language"] == "en":
        lang = setti["language"]["en"]
        author = lang["author"]
        licence_agree = lang["licence_agree"]
        first_number = lang["first_number"]
        second_number = lang["second_number"]
        is_not = lang["is_not"]
        result = lang["result"]
        s_help = lang["s_help"]
        num_th = lang["num_th"]
        p_log = lang["p_log"]
        trigo_f = lang["trigo_f"]
        angular = lang["angular"]
        hyp_f = lang["hyp_f"]
        spec_f = lang["spec_f"]
        addition = lang["addition"]
        subtraction = lang["subtraction"]
        multiplication = lang["multiplication"]
        division = lang["division"]
        exponentiation = lang["exponentiation"]
        rooting = lang["rooting"]
        sine = lang["sine"]
        cosine = lang["cosine"]
        tan = lang["tan"]
        zero_division_error = lang["zero_division_error"]
    else:
        print("lang error")

Zkusil jsem:
moje funkce na načítaní ukladaní

import pyaml
def yaml_loader(yaml_to_load):
    """
    nacita yaml soubory
    save yaml file
    """
    try:
        with open(yaml_to_load, "r", encoding="utf-8") as yaml_conf:
            yaml_file = yaml.safe_load(yaml_conf)
            yaml_conf.close
            return yaml_file
    except OSError:
        print("Can't load setting")
        setti = {"settings": {"first_run": "error"}}
        return setti


def yaml_saver(yaml_to_save, data_to_save):
    """
    uklada data do yaml
    load yaml file
    """
    try:
        with open(yaml_to_save, "w", encoding="utf-8") as yaml_conf:
            yaml.safe_dump(data_to_save, yaml_conf)
    except OSError:
        print("Can't safe setting")

Chci docílit: Jinak plný zdroj je na https://gitlab.com/…atematikator

Chtěl bych aby mohl aktualizovat soubor .settings.yaml bez vymazaní.
2.Chtěl abych se nastavení ukladalo do yamlu v čitelnem formatu
3.nejaké lepší řešení pro multijazyčné programy

 
Odpovědět 19. června 14:17
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.