ฉันจะเปลี่ยนชื่อหน้าต่างอย่างถาวรได้อย่างไร


17

ไฟล์ใดบ้างที่เกี่ยวข้องกับการสร้างชื่อหน้าต่าง ตัวอย่างเช่นถ้าคุณเปิด Rhythmbox คุณจะเห็นชื่อโปรแกรมเป็นชื่อหน้าต่าง แต่มันไม่ได้เกิดจาก.desktopไฟล์ ไฟล์ใดที่ฉันต้องแก้ไขเพื่อเพิ่มข้อความในชื่อแอปพลิเคชัน ฉันต้องการให้การเปลี่ยนแปลงเป็นแบบถาวร

ฉันใช้ Ubuntu GNOME 15.04 กับ GNOME 3.16


สวัสดีม็อด ฉันรักคำถามของคุณและมันนำไปสู่ทางออกที่ดีมาก ฉันไม่สามารถต้านทานได้ แต่จะพูดถึงสิ่งหนึ่งที่ต้องจำไว้สำหรับคำถามในอนาคต: โปรดอย่าเปลี่ยนความหมายของคำถามหลังจากที่โพสต์คำตอบแล้ว มันทำให้คำตอบเดิมโพสต์อย่างเพียงพอในรุ่นแรกของคำถามดูเหมือนว่าวางผิดที่ในรุ่นที่แก้ไข ฉันคิดว่านั่นเป็นสิ่งที่เกิดขึ้นจริงกับคำตอบของฉัน ฉันขอแนะนำให้โพสต์คำถามใหม่แทนโดยเฉพาะเจาะจงกับคำถามจริงของคุณหากคิดถึงคำถามของคุณ
Jacob Vlijm

1
ฉันเข้าใจความคิดเห็นของคุณและแน่นอนฉันจะทำอย่างนั้นกับคำถามในอนาคตที่ฉันสามารถเห็นว่ามันอาจจะทำให้คนสับสน แน่นอนฉันไม่ประมาทการมีส่วนร่วมของคุณไปที่หัวข้อให้มีความชัดเจน ฉันต้องการให้ชื่อเฉพาะเจาะจงมากขึ้นเนื่องจากชื่อต้นฉบับไม่ได้ครอบคลุมคำถามจริงของฉันและทำให้เกิดความไม่แน่นอนเล็กน้อยเกี่ยวกับเป้าหมายของฉันในหัวข้อนี้ ขอบคุณสำหรับความช่วยเหลือของคุณ! :)
ม็อด Kon Kon

คำตอบ:


21

ชื่อเริ่มต้นมักจะถูกตั้งค่าโดย (รหัสภายใน) แอปพลิเคชันเอง อย่างไรก็ตามคุณสามารถเปลี่ยนได้เช่นโดยใช้xdotoolซึ่งคุณจะต้องติดตั้งก่อน:

sudo apt-get install xdotool

จากนั้นเมื่อติดตั้งแล้วคุณสามารถตั้งชื่อหน้าต่างอื่นด้วย (เช่น) คำสั่ง:

xdotool search --name "Unity LauncherSwitcher" set_window --name "Monkey"

สิ่งนี้จะเปลี่ยน:

ป้อนคำอธิบายรูปภาพที่นี่

เป็น:

ป้อนคำอธิบายรูปภาพที่นี่

บันทึก

อย่างที่คุณเห็นคำสั่งนั้นมีอยู่ของ:

xdotool search --name "<current_name>" set_window --name "<new_name>"

<current_name>มีตรงกับ


แก้ไขอีกทางหนึ่ง

จากความคิดเห็นของคุณฉันเข้าใจว่าคำสั่งด้านบนไม่ทำงาน ฉันทดสอบด้วยแอพพลิเคชั่นต่าง ๆ และใช้งานได้ ...

แต่ด้วยเหตุผลที่ฉันไม่เข้าใจไม่ใช่ด้วยRhytmbox(!! อาจเป็นข้อผิดพลาด)

อีกทางเลือกหนึ่งคือการใช้wmctrlซึ่งคุณจะต้องติดตั้ง:

sudo apt-get install wmctrl

จากนั้นใช้คำสั่ง:

xprop -id "$(wmctrl -l | grep 'Rhythmbox' | awk '{ print $1 }')" -set WM_NAME "Music"

ฉันทดสอบมันสำเร็จแล้วRhythmbox:

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

ทำการเปลี่ยนแปลงอย่างถาวรหรือไม่

ตามที่ระบุไว้ชื่อหน้าต่างเริ่มต้นจะถูกกำหนดไว้ในรหัสของแอปพลิเคชัน

การเปลี่ยนชื่อหน้าต่างเริ่มต้นจะต้องเปลี่ยนรหัส ที่สามารถทำได้หากรหัสมีอยู่จะต้องรวบรวมใหม่ในหลายกรณีและขึ้นอยู่กับภาษาที่ใช้เหนือสิ่งอื่นใด การเรียนการสอนทั่วไปจะเป็นไปไม่ได้และเกินขอบเขตของ AU ในความคิดของฉัน


แก้ไข 2

จัดการ / ตั้งชื่อหน้าต่างที่กำหนดเองได้อย่างยืดหยุ่นต่อแอพพลิเคชั่นจากไฟล์เดียว

ในคำถามเดิมของคุณคุณสงสัยว่ามีไฟล์บางประเภทที่จะตั้งชื่อหน้าต่างใหม่ของแอพพลิเคชั่นที่เฉพาะเจาะจงหรือไม่ ตามที่อธิบายไว้ไม่ได้เป็นอย่างนั้น แต่ก็สามารถสร้างได้

ในการตั้งค่าด้านล่างคุณสามารถกำหนดได้อย่างง่ายดายในแต่ละแอปพลิเคชันพื้นฐานว่ามีการตั้งชื่อหน้าต่างใหม่อย่างไร เพียงแค่สร้างไฟล์ใน~(ไดเรกทอรีบ้านของคุณ) window_names.txtชื่อ สำหรับแต่ละแอปพลิเคชันที่คุณต้องการตั้งค่าชื่อเฉพาะให้เพิ่มบรรทัด, เรียงลำดับ, แอปพลิเคชันและชื่อหน้าต่างที่ต้องการ:

ไฟล์ข้อความซึ่งกำหนดชื่อหน้าต่างต่อแอปพลิเคชัน

gnome-terminal Monkey eats
gedit Banana
rhythmbox if he runs out of peanuts

ป้อนคำอธิบายรูปภาพที่นี่

คำอธิบาย

มีการตั้งค่าของสคริปต์พื้นหลังอย่างง่าย สคริปต์มีน้ำหนักเบามากดังนั้นจึงไม่มีผลกระทบใด ๆ ต่อประสิทธิภาพการทำงาน แต่อย่างใด

เมื่อสคริปต์เริ่มทำงานมันจะอ่านไฟล์~/window_names.txtและโหลดการตั้งค่าต่อแอปพลิเคชัน จากนั้นจะจับตาดูหน้าต่างที่สร้างขึ้นใหม่ หากหน้าต่างปรากฏขึ้นซึ่งเป็นของหนึ่งในแอปพลิเคชันที่ระบุในไฟล์มันจะตั้งชื่อหน้าต่างตามลำดับ

วิธีการตั้งค่า

  1. สคริปต์ใช้ทั้งwmctrlและxdotool:

    sudo apt-get install wmctrl
    sudo apt-get install xdotool
    
  2. คัดลอกสคริปต์ลงในไฟล์เปล่าบันทึกเป็น setwindowname.py

  3. สร้างไฟล์~/window_names.txt(ชื่อตรงwindow_names.txt) เพิ่มแอปพลิเคชันของคุณในรูปแบบ:

    <application> <window_name>
    

    เช่น

    gedit Text editor
    

    ชื่อหน้าต่างอาจมีช่องว่าง

  4. ทดสอบสคริปต์จากเทอร์มินัลด้วยคำสั่ง:

    python3 /path/to/setwindowname.py
    
  5. หากทำงานได้ตามที่คาดไว้ให้เพิ่มลงในแอปพลิเคชันเริ่มต้น: Dash> แอปพลิเคชันเริ่มต้น> เพิ่ม

    โปรดทราบว่าในบางกรณีสคริปต์อาจหยุดทำงานหากสคริปต์เริ่มทำงานเมื่อเดสก์ท็อปยังไม่โหลดเต็มที่ หากไม่เป็นเช่นนั้นคำสั่งเพื่อเพิ่มไปยังแอปพลิเคชันเริ่มต้นจะเป็น:

    /bin/bash -c "sleep 15&&python3 /path/to/setwindowname.py"
    

บท

#!/usr/bin/env python3
import subprocess
import time
import os

f = os.environ["HOME"]+"/"+"window_names.txt"

change = []
lines = open(f).read().splitlines()
for l in lines:
    try:
        change.append([l.split()[0], (" ").join(l.split()[1:])])
    except IndexError:
        pass

get = lambda cmd: subprocess.check_output(cmd).decode("utf-8").strip()
curr_1 = []

while True:
    try:
        curr_2 = get(["wmctrl", "-lp"]).splitlines()
        new = [w for w in curr_2 if not w in curr_1]
        for item in new:
            line = item.split(); pid = line[2]
            procs = get(["ps", "-e"]).splitlines()
            match = [l for l in procs if pid in l][0]
            for app in [app for app in change if app[0] in match]:
                subprocess.Popen(["xdotool", "set_window", "--name", app[1], line[0]])
        curr_1 = curr_2
        time.sleep(0.3)
    except:
        pass

หมายเหตุ

  • หากไฟล์~/window_names.txtถูกแก้ไขสคริปต์จะต้องเริ่มต้นใหม่
  • มันทำงานได้ไม่ว่าจะเริ่มแอปพลิเคชั่นอย่างไร ก็ยังทำงานเมื่อโปรแกรมจะวิ่งออกจากสถานีและ / sudoหรือ
  • มันไม่รบกวนกับตัวเลือกคลิกขวาของแอปพลิเคชันใด ๆ
  • สคริปต์ยัง "รักษา" ชื่อหน้าต่าง; หากกระบวนการอื่นเปลี่ยนชื่อหน้าต่างหลังจากนั้น (การเปิดแท็บเปลี่ยนไดเรกทอรีเช่น) สคริปต์จะเห็นหน้าต่างเป็น "หน้าต่างใหม่" และรักษาชื่อหน้าต่างที่คุณเลือก

ฉันขอโทษสิ่งนี้ไม่ได้ผลสำหรับฉัน
ม็อด Kon

xdotool search --name "Rhythmbox" set_window --name "Music" ฉันสั่งให้เปิดแอปพลิเคชั่นแล้วปิดและทำการรีสตาร์ท (alt + f2 + r) เพื่อตรวจสอบว่ามันใช้งานได้หรือไม่ แต่มันยังคงแสดงชื่อหน้าต่างเดียวกัน
ม็อด Kon

ว้าว! ครั้งนี้ฉันประทับใจจริงๆ! ฉันจะลองทำสิ่งแรกในตอนเช้า ฉันต้องบอกว่ามันดูดีมาก :) ขอบคุณสำหรับการทำงานหนักของคุณและโพสต์สิ่งนี้ยาโคบ!
ม็อด Kon

ฉันลองใช้สคริปต์ตรงตามที่คุณพูด แต่มันไม่ทำงาน เป็นไปได้หรือไม่ว่าสิ่งนี้จะไม่ทำงานกับ GNOME 3.16 หรือเป็นสิ่งที่ฉันติดตั้ง ฉันงงกับมันตอนนี้และหวังว่าจะทำให้มันทำงานบนระบบของฉัน ถ้าฉันพบเหตุผลที่มันยังใช้งานไม่ได้ฉันจะกลับไปหาคุณโดยเร็ว
ม็อด Kon

1
@MaudKon คุณต้องแก้ไขไฟล์การตั้งค่าและเพิ่มรายการขาวอย่างน้อยหนึ่งรายการอาจสิ้นสุดในตอนท้าย ฉัน "สร้างภูมิคุ้มกัน" สคริปต์สำหรับสิ่งนั้น คุณสามารถใช้เป็น whitelines มากเท่าที่คุณต้องการในขณะนี้ :)
จาค็อบ Vlijm

9

ชื่อนี้สร้างขึ้นโดยโปรแกรมประยุกต์ที่เรียกใช้งานได้และไม่มีวิธีที่ง่ายในการแก้ไข


การเปลี่ยนชื่อของแอปพลิเคชันเมื่อเปิด:

  • ติดตั้งxdotoolด้วยsudo apt-get install xdotool
  • รับ pid ของแอปพลิเคชันด้วยpgrep myapp(เช่นpgrep rythmbox)
  • เปลี่ยนชื่อหน้าต่าง (แทนที่HERE_THE_PIDด้วย ID กระบวนการของแอปพลิเคชัน):

    xdotool search --onlyvisible --pid HERE_THE_PID --name "\a\b\c" set_window --name "$new_name"
    

การสร้างสคริปต์เพื่อเรียกใช้แอปพลิเคชันใด ๆ ที่มีหัวเรื่องที่กำหนดเอง:

  • สร้างสคริปต์ทุบตีที่เรียกว่าchange-titleมีเนื้อหาเหล่านี้:

    #!/bin/bash
    
    ## The new name of the window is the first argument passed to the script:
    new_name="${1}"
    
    ## application is all arguments but the first (the title)
    application=${@:2}
    
    ## Run the app in background and in quiet mode:
    $application &> /dev/null &
    
    ## Get the pid of the app:
    app_pid=$!
    
    ## Wait until the window appears:
    until xdotool search --onlyvisible --pid $app_pid &> /dev/null; do sleep 0.01; done
    
    ## Change the window name:
    xdotool \
             search \
                    --onlyvisible \
                    --pid $app_pid \
                    --name "\a\b\c" \
             set_window \
                    --name "$new_name"
    
    ## Comment this line to run the app in background:
    wait $app_pid
    
  • ทำให้สามารถเรียกใช้งานได้ด้วย chmod a+x change-title

  • เรียกใช้ด้วย ./change-title "NewTitle" theapp --its-arguments

หากต้องการทำการเปลี่ยนแปลงอย่างถาวร:

  • เรียกใช้gksudo gedit /usr/local/bin/custom-title(fx. user / local / bin / music)
  • ในตัวแก้ไขข้อความวางสคริปต์ด้านบนและบันทึก
  • วิ่ง sudo chmod a+x /usr/local/bin/custom-title
  • วิ่ง gksudo gedit /usr/share/applications/rhythmbox.desktop
  • ในไฟล์นี้มีบรรทัด (หมายเลขบรรทัดคือ 35 บนของฉัน) ที่ระบุว่า:

    Exec=rhythmbox %U
    
  • แทนที่ด้วยสิ่งนี้ด้วยชื่อของไฟล์ที่สร้างขึ้น:

    Exec=custom title (fx. Exec=music)
    
  • บันทึกไฟล์เป็น custom-name.desktop fx ใหม่ music.desktop ระวังอย่าเขียนทับไฟล์ต้นฉบับ!

เพื่อให้การเปลี่ยนแปลงมีประสิทธิภาพสำหรับฟังก์ชั่น "open with"

  • วิ่ง gksudo gedit /usr/share/applications/rhythmbox-device.desktop
  • เปลี่ยนrhythmboxเป็นชื่อที่ใช้ในไฟล์ .desktop ก่อนหน้า
  • บันทึกไฟล์
  • ฆ่ากระบวนการที่ใช้งานของ rhythmbox ด้วยการตรวจสอบระบบหรือด้วย sudo kill rhythmbox
  • ปลั๊กอินโทรศัพท์ / เครื่องเล่นเพลงของคุณและกด "เปิดด้วย (แอปพลิเคชันเพลง)" เพื่อดูว่าใช้งานได้หรือไม่

(สรุป) ภาพรวมของไฟล์ที่คุณควรมี

เพื่อให้แอปพลิเคชันทำงานได้อย่างสมบูรณ์คุณควรมีไฟล์ 3 ไฟล์. ktop /usr/share/applicationsเมื่อเสร็จสิ้น:

  1. music.desktop หรือชื่อที่คุณให้กับแอปพลิเคชัน

    ด้วยExec=musicและHidden=true(เพิ่มอันสุดท้ายหากไม่มี)

  2. rhythmbox.desktop

    ด้วยExec=rhythmbox %UและHidden=true

  3. Rhythmbox-device.desktop

    ด้วยExec=music --select-source %Uและไม่มีรายการที่ซ่อนอยู่

ซึ่งหมายความว่าคุณจะเปิดไฟล์สุดท้ายเสมอและชื่อนั้นจะเป็นตามที่ควรจะเป็นเสมอ วิธีเดียวคือรีเซ็ตตัวเองเมื่อคุณรีเฟรชเซสชันด้วย ALT + F2 + R

  1. และคุณควรมีสคริปต์ทุบตีใน/usr/local/binหลักสูตร

หมายเหตุสุดท้าย:

  • เมื่อฉันใช้--name "\a\b\c"คือการแก้ไขข้อบกพร่องอย่าแทนที่ด้วยชื่อแอปพลิเคชัน!
  • หากคุณไม่แสดงข้อคิดเห็นบรรทัดสุดท้ายของสคริปต์สคริปต์จะไม่สิ้นสุดจนกว่าแอปจะปิด
  • การ${@:2}อธิบายรหัสที่ร้องขอโดย@Maud Kon :

    1. $@ เป็นอาร์เรย์ที่เก็บพารามิเตอร์ตำแหน่งทั้งหมด
    2. ${@:2}หมายถึง: พารามิเตอร์ตำแหน่งทั้งหมดยกเว้นพารามิเตอร์แรก
    3. สมมติว่าฉันเรียกโปรแกรมด้วยวิธีนี้:

      awesome-program foo bar baz fooz
      
      • ${@:1} อยากจะเป็น foo bar baz fooz
      • ${@:2} อยากจะเป็น bar baz fooz
      • ${@:3} อยากจะเป็น baz fooz
      • ${@:4} อยากจะเป็น fooz
      • ${@:5} ว่างเปล่าเนื่องจากไม่มีพารามิเตอร์ตำแหน่งเพิ่มเติม
    4. $@, ${@}และ${@:1}เป็นสิ่งเดียวกัน: ทุกพารามิเตอร์ตำแหน่ง

    5. เรียนรู้เพิ่มเติมเกี่ยวกับหัวข้อนี้ได้ที่นี่: http://wiki.bash-hackers.org/scripting/posparams

ฉันได้ลองทั้งมารยาท (เช่นเดียวกับที่นี่) และสคริปต์ทุบตีของคุณทำงานได้บางส่วน มันเปิดหน้าต่างใหม่พร้อมชื่อใหม่ แต่ถ้าฉันเปิดอีกครั้งจากภาพรวมก็ยังมีรายการเก่า ... ฉันทำอะไรผิดหรือเปล่า?
ม็อด Kon

@audkon: ภาพรวมคืออะไร? ลองใช้สคริปต์ตอนนี้ หากคุณเรียกว่า "ภาพรวม" ไปที่เส้นประ (แผงขนาดใหญ่ที่มีแอพจำนวนมาก) ฉันจะบอกคุณว่าสคริปต์ของฉันไม่ได้ทำการเปลี่ยนแปลงแบบถาวร
Helio

ฉันหมายถึงภาพรวมแอปพลิเคชันฉันได้ซ่อนเส้นประไว้แล้วฮ่าฮ่า อืมใช่กว่าสคริปต์ของคุณ อย่างไรก็ตามมีการเปลี่ยนแปลงอย่างถาวรหรือไม่ เช่นเดียวกับการแก้ไขไฟล์ปฏิบัติการด้วย fx GHex? หรือเปลี่ยนการปฏิบัติการในไฟล์ .desktop?
ม็อด Kon

ลองตอนนี้. ใช้สคริปต์ใหม่และทำตามวิธีการในส่วนที่จะทำให้การเปลี่ยนแปลงแบบถาวร ตอนนี้ฉันเข้าใจแล้วว่าคุณกำลังอำพราง Ubuntu ของคุณ;-)
Helio

1
@Helio ฉันอัปเดตโพสต์ของคุณด้วยขั้นตอนที่เหมาะกับฉัน ฉันยังเพิ่มกระบวนการเพื่อให้ฟังก์ชัน "เปิดด้วย" ทำงานได้
ม็อด Kon

2

เพียงใช้ไฟล์แปล!

ฉันพบปัญหาท้าทายอย่างมากกับ Thunar: มันน่ารำคาญเมื่อ Compiz Scale แสดงชื่อหน้าต่าง Thunar เป็น "AnyFolder - File Manager" และพื้นที่ว่างพร้อมข้อมูลที่ไม่จำเป็น

ฉันลองใช้วิธีดังกล่าวข้างต้นด้วยxdotoolและwmctrlพวกเขาไม่ได้ถาวรเนื่องจาก Thunar เปลี่ยนชื่อหน้าต่างทุกครั้งที่ฉันไปที่โฟลเดอร์อื่น และรู้สึกว่าเกินจริงที่จะให้สคริปต์นั่งอยู่ข้างหลังเพื่อเปลี่ยนชื่อกลับมาทุกครั้งที่ Thunar เปลี่ยนแปลง

ทางออกที่ง่ายกว่าคือการใช้ไฟล์แปลที่มาพร้อมกับทุกแอปพลิเคชัน คุณต้องรวบรวมไฟล์ต้นฉบับการแปลอีกครั้งด้วยเครื่องมือที่เรียกว่าmsgfmtรวมอยู่ในgettextแพ็คเกจ ฉันเพิ่งทำเพื่อ gThumb - เพียงเพื่อความสนุกสนาน - และที่นั่นก็ใช้งานได้เช่นกัน

1. รับซอร์สโค้ดสำหรับแอปพลิเคชันที่เกี่ยวข้อง
พิมพ์ หรือตรงไปที่http://packages.ubuntu.comได้รับแหล่งที่มาและมองหาโฟลเดอร์ที่เรียกว่า$ sudo apt-get source APPLICATIONpo : มันมีไฟล์ภาษาข้อความธรรมดา มองหาภาษาของคุณ สมมติว่าคุณมาจากบราซิลไฟล์นั้นจะเป็นpt_BR.po

2. แก้ไขไฟล์ตามความต้องการของคุณ
มองหาที่แน่นอน! ชื่อหน้าต่างที่คุณต้องการกำจัดหรือเปลี่ยนแปลง ในกรณีของ Thunar เป็น"ตัวจัดการไฟล์"และpt_BR.poฉันพบ

:. set window title
: ../thunar/thunar-window.c:3154 ../Thunar.desktop.in.in.h:3
: ../thunar/thunar-settings.desktop.in.h:1
msgid "File Manager"
msgstr "Gerenciador de arquivos"

ที่msgidเป็นสัญญาณแอพลิเคชันส่งและmsgstrสิ่ง langpack แปลมัน
เปลี่ยนเพื่อสิ่งที่คุณต้องการคือmsgstr ฉันได้เรียนรู้ว่าถ้าคุณปล่อยให้การแปลว่างเปล่าเช่นนี้แอปพลิเคชันจะถอยกลับไปmsgstr "o_-"
msgstr ""msgidโปรแกรมจะถอยกลับไปหากคุณต้องการให้ "ว่าง" ใช้ช่องว่าง หรือจุด หรือสัญลักษณ์ ASCII ที่ขี้ขลาด

3. รับคอมไพเลอร์
ตามที่คุณต้องการmsgfmtจากgettextแพ็คเกจดังนั้นคุณต้องพิมพ์
$ sudo apt-get install gettext

4. คอมไพล์
เปิดเทอร์มินัลไปที่โฟลเดอร์ที่มีการเปลี่ยนแปลงของคุณpt_BR.poแล้วปล่อยให้ msgfmt ตรวจสอบไฟล์เพื่อหาข้อผิดพลาด:
$ msgfmt --check --check-accelerators=_ -o /dev/null pt_BR.po
ถ้าไม่เป็นไรให้ไปข้างหน้าแล้วคอมไพล์มัน:
$ msgfmt -c -o pt_BR.mo pt_BR.po

5. วางไฟล์
ดูที่การแปลต้นฉบับใน/ usr / share / locale / YOUR_LANGUAGE / LC_MESSAGES / หรือ/ usr / share / locale-langpack / YOUR_LANGUAGE / LC_MESSAGES /มีชื่อและวางไฟล์ของคุณที่นั่น ถ้ามันไม่ได้อยู่ในสถานที่ทั้งสองใส่ไว้ในหนึ่งของพวกเขาและการทดสอบเล็ก ๆ น้อย ๆ ที่มีชื่อไฟล์: พิมพ์เล็ก CamelCase หรือสิ่งที่ต้องการคือหรือgthumb.mo สำรองข้อมูลต้นฉบับก่อน: จากนั้นคัดลอกคำแปลใหม่ของคุณที่นั่นYOUR-APP.mo

$ sudo cp /usr/share/locale/YOUR_LANGUAGE/LC_MESSAGES/YOUR-APP.mo /usr/share/locale/YOUR_LANGUAGE/LC_MESSAGES/YOUR-APP.mo.BAK

$ sudo cp pt_BR.mo /usr/share/locale/YOUR_LANGUAGE/LC_MESSAGES/YOUR-APP.mo

หาก YOUR_APP กำลังทำงานอยู่ให้ปิดอินสแตนซ์ทั้งหมดของมัน
ทดสอบ!

คำแนะนำ หากคุณใช้งาน Ubuntu พร้อมการแปลแบบ EN เช่นฉันเพียงใช้ * .po ลบหรือแสดงความคิดเห็น msgid / msgstr ทุกคู่ที่ไม่มีการเปลี่ยนแปลงจากนั้นและใส่ไว้ใน / usr / share / สถานที่ / th / LC_MESSAGES /

แหล่งที่มา:
http://wiki.xfce.org/translations/translation_guidance_in_xfce


เพียงเพื่อบันทึก; ฉันสงสัยว่าคุณลองใช้สคริปต์จริง ๆ แล้วเนื่องจากมันยังคงชื่อตามที่ระบุไว้ในคำตอบ
Jacob Vlijm

คุณพูดถูกฉันไม่ได้ลองสคริปต์นี้แต่เป็นสคริปต์ที่คุ้นเคย (ง่ายกว่า) จากที่อื่นและกลอุบายของ xdotool และ wmctrl ดังที่กล่าวไว้สำหรับฉันมันรู้สึกเหมือนการยิงนกกระจอกด้วยปืนใหญ่เมื่อเทียบกับการเปลี่ยนหนึ่งบรรทัดในไฟล์ต้นฉบับ อย่างไรก็ตามหนึ่งสามารถเรียนรู้มากมายจากสคริปต์
ronso0

ฉันสงสัยว่าจะเกิดอะไรขึ้นหากแอปพลิเคชันได้รับการอัปเกรด ไฟล์ * .desktop และไฟล์การแปลถูกเขียนทับหรือไม่
ronso0

ตามที่อธิบายไว้ที่นี่askubuntu.com/a/703942/72216ผมไม่แบ่งปัน fobia สำหรับสคริปต์พื้นหลังถ้ามันจะเขียนได้ดีและไม่เพิ่มฟังก์ชันการทำงานที่สำคัญ เกี่ยวกับ.desktopไฟล์: อีกครั้งคุณต้องสับสนคำตอบของฉันกับคนอื่นที่คุณอาจอ่าน คำตอบไม่ได้แก้ไข.desktopไฟล์และไม่จำเป็นต้องดำเนินการใด ๆ เมื่อติดตั้งแอปพลิเคชันใหม่
Jacob Vlijm

นี่เป็นคำถามทั่วไปเนื่องจากคำตอบ # 2 แก้ไข.desktopไฟล์และฉันก็แปลไฟล์ด้วย คุณรู้หรือไม่ และฉันอาจจะทำให้การแก้ปัญหาสคริปต์ใด ๆ โอกาสครั้งที่สองนับตั้งแต่ตอนนี้ผมอ่านคือ"mu__Incoming -"ที่ผมมี"mu__Incoming - จัดการไฟล์" สำหรับแอปพลิเคชันที่มีชื่อหน้าต่างแบบสแตติกโดยไม่มี "เส้นทาง / ไปยัง / โฟลเดอร์" โซลูชันของฉันทำงานได้ดี
ronso0

1

แทนที่ (ส่วนของ) ชื่อหน้าต่างด้วย wmctrl

เนื่องจากคำตอบของฉันเองที่ใช้ไฟล์แปลของแอปพลิเคชันนั้นไม่เพียงพอสำหรับฉันหลายกรณีฉันจึงสร้างโซลูชันของ Jacob Vlijmและแก้ไขสคริปต์ของเขาเพื่อแทนที่สตริงบางตัวในชื่อหน้าต่าง ฉันหวังว่ามันโอเคที่จะโพสต์คำตอบแยกต่างหาก เครดิตไปที่Jacob Vlijmสำหรับความคิดและการตั้งค่าสคริปต์!

ตัวอย่างเช่นผมชอบที่จะอ่านแทนSome fancy website Some fancy website - Mozilla Firefoxปลั๊กอินสเกล Compiz มีความชัดเจนมากขึ้นในขณะที่ฉันลบออกเช่นกัน- File managerสตริงและอื่น ๆ

การเปลี่ยนแปลงที่ฉันทำ:

  1. ใช้//เป็นตัวคั่นในwindow_names.txtเพื่ออนุญาตให้มีช่องว่างสีขาว
  2. ใช้wmctrlแทนxdotoolการแก้ไขชื่อหน้าต่าง (เนื่องจาก xdotool ไม่จัดการอักขระที่ไม่ใช่ ASCII ได้ดี):wmctrl -i -r [WindowIdentifier] -N 'new Title'
  3. บรรทัดพิเศษบางอย่างในสคริปต์เพื่อทำการเปลี่ยนสตริงเป็นต้น

การแก้ไขwindow_names.txtมีโครงสร้างเช่นนี้:
[process name]//[exact text to replace]//[replacement text]

firefox// - Mozilla Firefox// (whitespace!)
thunar// - File Manager// ° xyz
gedit// - gedit// - 123

สคริปต์ pimped:

#!/usr/bin/env python3
import subprocess
import time
import os

f = os.environ["HOME"]+"window_names.txt"

change = []
lines = open(f).read().splitlines()
for l in lines:
    try:
        change.append(l.split("//"))
    except IndexError:
        pass

get = lambda cmd: subprocess.check_output(cmd).decode("utf-8").strip()
curr_1 = []

while True:
    try:
        curr_2 = get(["wmctrl", "-lp"]).splitlines()
        new = [w for w in curr_2 if not w in curr_1]

        for item in new:
            line = item.split(None, 4)
            winID = line[0] ; pid = line[2] ; currentTitle = line[4]
            procs = get(["ps", "-e"]).splitlines()
            match = [l for l in procs if pid in l][0]
            for app in [app for app in change if app[0] in match]:
                newTitle = str.replace(currentTitle, app[1], app[2])
                subprocess.Popen(["wmctrl", "-i", "-r", winID, "-N", newTitle])
        curr_1 = curr_2
        time.sleep(0.3)
    except:
        pass

อีกครั้ง: เครดิตไปที่ Jacob Vlijm สำหรับความคิดและการตั้งค่าสคริปต์!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.