mirror of
https://github.com/sezanzeb/input-remapper
synced 2024-11-18 03:25:52 +00:00
Improve i18n (#288)
* Add Slovak translation for polkit message. * More strings can be translated now.
This commit is contained in:
parent
ee6b48ac32
commit
79e432e031
@ -24,11 +24,8 @@
|
||||
|
||||
import sys
|
||||
import atexit
|
||||
import gettext
|
||||
import locale
|
||||
from inputremapper.configs.data import get_data_path
|
||||
import os.path
|
||||
from argparse import ArgumentParser
|
||||
from inputremapper.gui.gettext import _, LOCALE_DIR
|
||||
|
||||
import gi
|
||||
gi.require_version('Gtk', '3.0')
|
||||
@ -36,15 +33,6 @@ gi.require_version('GLib', '2.0')
|
||||
gi.require_version('GtkSource', '4')
|
||||
from gi.repository import Gtk
|
||||
|
||||
APP_NAME = 'input-remapper'
|
||||
LOCALE_DIR = os.path.join(get_data_path(), 'lang')
|
||||
|
||||
locale.bindtextdomain(APP_NAME, LOCALE_DIR)
|
||||
locale.textdomain(APP_NAME)
|
||||
|
||||
translate = gettext.translation(APP_NAME, LOCALE_DIR, fallback=True)
|
||||
_ = translate.gettext
|
||||
|
||||
|
||||
# https://github.com/Nuitka/Nuitka/issues/607#issuecomment-650217096
|
||||
Gtk.init()
|
||||
|
@ -23,6 +23,11 @@
|
||||
|
||||
|
||||
import re
|
||||
import locale
|
||||
import gettext
|
||||
import os
|
||||
from inputremapper.configs.data import get_data_path
|
||||
from inputremapper.gui.gettext import _
|
||||
|
||||
from gi.repository import Gtk, GLib, Gdk
|
||||
|
||||
@ -73,7 +78,7 @@ class SelectionLabel(Gtk.ListBoxRow):
|
||||
if combination:
|
||||
self.label.set_label(combination.beautify())
|
||||
else:
|
||||
self.label.set_label("new entry")
|
||||
self.label.set_label(_("new entry"))
|
||||
|
||||
def get_combination(self) -> EventCombination:
|
||||
return self.combination
|
||||
@ -103,7 +108,7 @@ def ensure_everything_saved(func):
|
||||
return wrapped
|
||||
|
||||
|
||||
SET_KEY_FIRST = "Set the key first"
|
||||
SET_KEY_FIRST = _("Set the key first")
|
||||
|
||||
|
||||
class Editor:
|
||||
@ -374,7 +379,7 @@ class Editor:
|
||||
"""Add one empty row for a single mapped key."""
|
||||
selection_label_listbox = self.get("selection_label_listbox")
|
||||
mapping_selection = SelectionLabel()
|
||||
mapping_selection.set_label("new entry")
|
||||
mapping_selection.set_label(_("new entry"))
|
||||
mapping_selection.show_all()
|
||||
selection_label_listbox.insert(mapping_selection, -1)
|
||||
|
||||
@ -463,10 +468,11 @@ class Editor:
|
||||
"""Get a widget from the window"""
|
||||
return self.user_interface.builder.get_object(name)
|
||||
|
||||
def _on_recording_toggle_toggle(self, *_):
|
||||
def _on_recording_toggle_toggle(self, *args):
|
||||
"""Refresh useful usage information."""
|
||||
if not self.get_recording_toggle().get_active():
|
||||
return
|
||||
|
||||
self._reset_keycode_consumption()
|
||||
reader.clear()
|
||||
if not self.user_interface.can_modify_preset():
|
||||
@ -474,7 +480,7 @@ class Editor:
|
||||
# therefore the original keycode inaccessible
|
||||
logger.info("Cannot change keycodes while injecting")
|
||||
self.user_interface.show_status(
|
||||
CTX_ERROR, 'Use "Stop Injection" to stop before editing'
|
||||
CTX_ERROR, _('Use "Stop Injection" to stop before editing')
|
||||
)
|
||||
self.get_recording_toggle().set_active(False)
|
||||
|
||||
@ -500,7 +506,7 @@ class Editor:
|
||||
"""Blocks until the user decided about an action."""
|
||||
confirm_delete = self.get("confirm-delete")
|
||||
|
||||
text = f"Are you sure to delete this mapping?"
|
||||
text = _("Are you sure to delete this mapping?")
|
||||
self.get("confirm-delete-label").set_text(text)
|
||||
|
||||
confirm_delete.show()
|
||||
@ -557,7 +563,10 @@ class Editor:
|
||||
if existing is not None:
|
||||
existing = list(existing)
|
||||
existing[0] = re.sub(r"\s", "", existing[0])
|
||||
msg = f'"{combination.beautify()}" already mapped to "{tuple(existing)}"'
|
||||
msg = _('"%s" already mapped to "%s"') % (
|
||||
combination.beautify(),
|
||||
tuple(existing),
|
||||
)
|
||||
logger.info("%s %s", combination, msg)
|
||||
self.user_interface.show_status(CTX_KEYCODE, msg)
|
||||
return True
|
||||
@ -565,10 +574,10 @@ class Editor:
|
||||
if combination.is_problematic():
|
||||
self.user_interface.show_status(
|
||||
CTX_WARNING,
|
||||
"ctrl, alt and shift may not combine properly",
|
||||
"Your system might reinterpret combinations "
|
||||
+ "with those after they are injected, and by doing so "
|
||||
+ "break them.",
|
||||
_("ctrl, alt and shift may not combine properly"),
|
||||
_("Your system might reinterpret combinations ")
|
||||
+ _("with those after they are injected, and by doing so ")
|
||||
+ _("break them."),
|
||||
)
|
||||
|
||||
# the newest_keycode is populated since the ui regularly polls it
|
||||
|
34
inputremapper/gui/gettext.py
Normal file
34
inputremapper/gui/gettext.py
Normal file
@ -0,0 +1,34 @@
|
||||
#!/usr/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# input-remapper - GUI for device specific keyboard mappings
|
||||
# Copyright (C) 2022 sezanzeb <proxima@sezanzeb.de>
|
||||
#
|
||||
# This file is part of input-remapper.
|
||||
#
|
||||
# input-remapper is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# input-remapper is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with input-remapper. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
import os.path
|
||||
import gettext
|
||||
import locale
|
||||
from inputremapper.configs.data import get_data_path
|
||||
from argparse import ArgumentParser
|
||||
|
||||
APP_NAME = "input-remapper"
|
||||
LOCALE_DIR = os.path.join(get_data_path(), "lang")
|
||||
|
||||
locale.bindtextdomain(APP_NAME, LOCALE_DIR)
|
||||
locale.textdomain(APP_NAME)
|
||||
|
||||
translate = gettext.translation(APP_NAME, LOCALE_DIR, fallback=True)
|
||||
_ = translate.gettext
|
@ -26,6 +26,10 @@ import math
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
import locale
|
||||
import gettext
|
||||
from inputremapper.configs.data import get_data_path
|
||||
from inputremapper.gui.gettext import _
|
||||
|
||||
from evdev._ecodes import EV_KEY
|
||||
from gi.repository import Gtk, GtkSource, Gdk, GLib, GObject
|
||||
@ -118,7 +122,7 @@ def if_preset_selected(func):
|
||||
return wrapped
|
||||
|
||||
|
||||
def on_close_about(about, _):
|
||||
def on_close_about(about, arg):
|
||||
"""Hide the about dialog without destroying it."""
|
||||
about.hide()
|
||||
return True
|
||||
@ -222,7 +226,7 @@ class UserInterface:
|
||||
self.button_left_warn = False
|
||||
|
||||
if not is_helper_running():
|
||||
self.show_status(CTX_ERROR, "The helper did not start")
|
||||
self.show_status(CTX_ERROR, _("The helper did not start"))
|
||||
|
||||
def setup_timeouts(self):
|
||||
"""Setup all GLib timeouts."""
|
||||
@ -247,7 +251,7 @@ class UserInterface:
|
||||
|
||||
def show_confirm_delete(self):
|
||||
"""Blocks until the user decided about an action."""
|
||||
text = f'Are you sure to delete preset "{self.preset_name}"?'
|
||||
text = _("Are you sure to delete preset %s?") % self.preset_name
|
||||
self.get("confirm-delete-label").set_text(text)
|
||||
|
||||
self.confirm_delete.show()
|
||||
@ -255,7 +259,7 @@ class UserInterface:
|
||||
self.confirm_delete.hide()
|
||||
return response
|
||||
|
||||
def on_key_press(self, _, event):
|
||||
def on_key_press(self, arg, event):
|
||||
"""To execute shortcuts.
|
||||
|
||||
This has nothing to do with the keycode reader.
|
||||
@ -280,7 +284,7 @@ class UserInterface:
|
||||
if gdk_keycode == Gdk.KEY_Delete:
|
||||
self.on_restore_defaults_clicked()
|
||||
|
||||
def on_key_release(self, _, event):
|
||||
def on_key_release(self, arg, event):
|
||||
"""To execute shortcuts.
|
||||
|
||||
This has nothing to do with the keycode reader.
|
||||
@ -322,7 +326,7 @@ class UserInterface:
|
||||
return self.builder.get_object(name)
|
||||
|
||||
@ensure_everything_saved
|
||||
def on_close(self, *_):
|
||||
def on_close(self, *args):
|
||||
"""Safely close the application."""
|
||||
logger.debug("Closing window")
|
||||
self.window.hide()
|
||||
@ -390,7 +394,7 @@ class UserInterface:
|
||||
# and select the newest one (on the top). triggers on_select_preset
|
||||
preset_selection.set_active(0)
|
||||
|
||||
def can_modify_preset(self, *_) -> bool:
|
||||
def can_modify_preset(self, *args) -> bool:
|
||||
"""if changing the preset is possible."""
|
||||
return self.dbus.get_state(self.group.key) != RUNNING
|
||||
|
||||
@ -413,10 +417,10 @@ class UserInterface:
|
||||
return True
|
||||
|
||||
@if_group_selected
|
||||
def on_restore_defaults_clicked(self, *_):
|
||||
def on_restore_defaults_clicked(self, *args):
|
||||
"""Stop injecting the preset."""
|
||||
self.dbus.stop_injecting(self.group.key)
|
||||
self.show_status(CTX_APPLY, "Applied the system default")
|
||||
self.show_status(CTX_APPLY, _("Applied the system default"))
|
||||
GLib.timeout_add(100, self.show_device_mapping_status)
|
||||
|
||||
def show_status(self, context_id, message, tooltip=None):
|
||||
@ -470,11 +474,11 @@ class UserInterface:
|
||||
continue
|
||||
|
||||
position = key.beautify()
|
||||
msg = f"Syntax error at {position}, hover for info"
|
||||
msg = _("Syntax error at %s, hover for info") % position
|
||||
self.show_status(CTX_MAPPING, msg, error)
|
||||
|
||||
@ensure_everything_saved
|
||||
def on_rename_button_clicked(self, _):
|
||||
def on_rename_button_clicked(self, arg):
|
||||
"""Rename the preset based on the contents of the name input."""
|
||||
new_name = self.get("preset_name_input").get_text()
|
||||
|
||||
@ -493,7 +497,7 @@ class UserInterface:
|
||||
self.populate_presets()
|
||||
|
||||
@if_preset_selected
|
||||
def on_delete_preset_clicked(self, *_):
|
||||
def on_delete_preset_clicked(self, *args):
|
||||
"""Delete a preset from the file system."""
|
||||
accept = Gtk.ResponseType.ACCEPT
|
||||
if len(active_preset) > 0 and self.show_confirm_delete() != accept:
|
||||
@ -508,14 +512,14 @@ class UserInterface:
|
||||
self.populate_presets()
|
||||
|
||||
@if_preset_selected
|
||||
def on_apply_preset_clicked(self, _):
|
||||
def on_apply_preset_clicked(self, arg):
|
||||
"""Apply a preset without saving changes."""
|
||||
self.save_preset()
|
||||
|
||||
if active_preset.num_saved_keys == 0:
|
||||
logger.error("Cannot apply empty preset file")
|
||||
logger.error(_("Cannot apply empty preset file"))
|
||||
# also helpful for first time use
|
||||
self.show_status(CTX_ERROR, "You need to add keys and save first")
|
||||
self.show_status(CTX_ERROR, _("You need to add keys and save first"))
|
||||
return
|
||||
|
||||
preset = self.preset_name
|
||||
@ -556,11 +560,11 @@ class UserInterface:
|
||||
self.dbus.set_config_dir(get_config_path())
|
||||
self.dbus.start_injecting(self.group.key, preset)
|
||||
|
||||
self.show_status(CTX_APPLY, "Starting injection...")
|
||||
self.show_status(CTX_APPLY, _("Starting injection..."))
|
||||
|
||||
GLib.timeout_add(100, self.show_injection_result)
|
||||
|
||||
def on_autoload_switch(self, _, active):
|
||||
def on_autoload_switch(self, arg, active):
|
||||
"""Load the preset automatically next time the user logs in."""
|
||||
key = self.group.key
|
||||
preset = self.preset_name
|
||||
@ -595,10 +599,10 @@ class UserInterface:
|
||||
state = self.dbus.get_state(self.group.key)
|
||||
|
||||
if state == RUNNING:
|
||||
msg = f'Applied preset "{self.preset_name}"'
|
||||
msg = _("Applied preset %s") % self.preset_name
|
||||
|
||||
if active_preset.get_mapping(EventCombination(InputEvent.btn_left())):
|
||||
msg += ", CTRL + DEL to stop"
|
||||
msg += _(", CTRL + DEL to stop")
|
||||
|
||||
self.show_status(CTX_APPLY, msg)
|
||||
|
||||
@ -606,7 +610,9 @@ class UserInterface:
|
||||
return False
|
||||
|
||||
if state == FAILED:
|
||||
self.show_status(CTX_ERROR, f'Failed to apply preset "{self.preset_name}"')
|
||||
self.show_status(
|
||||
CTX_ERROR, _("Failed to apply preset %s") % self.preset_name
|
||||
)
|
||||
return False
|
||||
|
||||
if state == NO_GRAB:
|
||||
@ -633,12 +639,12 @@ class UserInterface:
|
||||
self.get("apply_system_layout").set_opacity(0.4)
|
||||
|
||||
@if_preset_selected
|
||||
def on_copy_preset_clicked(self, *_):
|
||||
def on_copy_preset_clicked(self, *args):
|
||||
"""Copy the current preset and select it."""
|
||||
self.create_preset(copy=True)
|
||||
|
||||
@if_group_selected
|
||||
def on_create_preset_clicked(self, *_):
|
||||
def on_create_preset_clicked(self, *args):
|
||||
"""Create a new empty preset and select it."""
|
||||
self.create_preset()
|
||||
|
||||
@ -667,7 +673,7 @@ class UserInterface:
|
||||
self.get("preset_selection").set_active_id(new_preset)
|
||||
except PermissionError as error:
|
||||
error = str(error)
|
||||
self.show_status(CTX_ERROR, "Permission denied!", error)
|
||||
self.show_status(CTX_ERROR, _("Permission denied!"), error)
|
||||
logger.error(error)
|
||||
|
||||
@ensure_everything_saved
|
||||
@ -721,7 +727,7 @@ class UserInterface:
|
||||
speed = 2 ** gtk_range.get_value()
|
||||
active_preset.set("gamepad.joystick.pointer_speed", speed)
|
||||
|
||||
def save_preset(self, *_):
|
||||
def save_preset(self, *args):
|
||||
"""Write changes in the active_preset to disk."""
|
||||
if not active_preset.has_unsaved_changes():
|
||||
# optimization, and also avoids tons of redundant logs
|
||||
@ -739,10 +745,10 @@ class UserInterface:
|
||||
self.populate_presets()
|
||||
except PermissionError as error:
|
||||
error = str(error)
|
||||
self.show_status(CTX_ERROR, "Permission denied!", error)
|
||||
self.show_status(CTX_ERROR, _("Permission denied!"), error)
|
||||
logger.error(error)
|
||||
|
||||
for _, mapping in active_preset:
|
||||
for _x, mapping in active_preset:
|
||||
if not mapping:
|
||||
continue
|
||||
|
||||
@ -757,7 +763,7 @@ class UserInterface:
|
||||
or code not in global_uinputs.get_uinput(target).capabilities()[EV_KEY]
|
||||
):
|
||||
trimmed = re.sub(r"\s+", " ", symbol).strip()
|
||||
self.show_status(CTX_MAPPING, f'Unknown mapping "{trimmed}"')
|
||||
self.show_status(CTX_MAPPING, _("Unknown mapping %s") % trimmed)
|
||||
break
|
||||
else:
|
||||
# no broken mappings found
|
||||
@ -767,11 +773,11 @@ class UserInterface:
|
||||
# the regular mappings are allright
|
||||
self.check_macro_syntax()
|
||||
|
||||
def on_about_clicked(self, _):
|
||||
def on_about_clicked(self, arg):
|
||||
"""Show the about/help dialog."""
|
||||
self.about.show()
|
||||
|
||||
def on_about_key_press(self, _, event):
|
||||
def on_about_key_press(self, arg, event):
|
||||
"""Hide the about/help dialog."""
|
||||
gdk_keycode = event.get_keyval()[1]
|
||||
if gdk_keycode == Gdk.KEY_Escape:
|
||||
|
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-07-03 22:39+0200\n"
|
||||
"POT-Creation-Date: 2022-02-08 08:52+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@ -17,323 +17,290 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: data/input-remapper.glade:1128
|
||||
msgid "."
|
||||
#: inputremapper/gui/editor/editor.py:565
|
||||
#, python-format
|
||||
msgid "\"%s\" already mapped to \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1348
|
||||
msgid "1, 2"
|
||||
#: inputremapper/gui/user_interface.py:605
|
||||
msgid ", CTRL + DEL to stop"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:926
|
||||
msgid ""
|
||||
"A \"key + key + ... + key\" syntax can be used to trigger key combinations. "
|
||||
"For example \"control_l + a\".\n"
|
||||
"\n"
|
||||
"\"disable\" disables a key."
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:898
|
||||
#: data/input-remapper.glade:1070
|
||||
msgid "About"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:209
|
||||
#: inputremapper/gui/user_interface.py:602
|
||||
#, python-format
|
||||
msgid "Applied preset %s"
|
||||
msgstr ""
|
||||
|
||||
#: inputremapper/gui/user_interface.py:423
|
||||
msgid "Applied the system default"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:307
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:403
|
||||
#: inputremapper/gui/user_interface.py:254
|
||||
#, python-format
|
||||
msgid "Are you sure to delete preset %s?"
|
||||
msgstr ""
|
||||
|
||||
#: inputremapper/gui/editor/editor.py:508
|
||||
msgid "Are you sure to delete this mapping?"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:504
|
||||
msgid "Autoload"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1420
|
||||
msgid ""
|
||||
"Between calls to k, key down and key up events, macros will sleep for 10ms "
|
||||
"by default, which can be configured in ~/.config/input-remapper/config"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:482 data/input-remapper.glade:526
|
||||
#: data/input-remapper.glade:583 data/input-remapper.glade:627
|
||||
msgid "Buttons"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1286
|
||||
msgid "CTRL + a, CTRL + x"
|
||||
#: data/input-remapper.glade:65
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:706
|
||||
msgid ""
|
||||
"Click on a cell below and hit a key on your device. Click the \"Restore "
|
||||
"Defaults\" button beforehand."
|
||||
#: inputremapper/gui/user_interface.py:520
|
||||
msgid "Cannot apply empty preset file"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:228
|
||||
#: data/input-remapper.glade:860
|
||||
msgid "Change Key"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:326
|
||||
msgid "Copy"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:265
|
||||
#: data/input-remapper.glade:350
|
||||
msgid "Create a new preset"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:365 data/input-remapper.glade:889
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:96
|
||||
#: data/input-remapper.glade:894
|
||||
msgid "Delete this entry"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:370
|
||||
msgid "Delete this preset"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:193
|
||||
msgid "Device"
|
||||
msgstr ""
|
||||
|
||||
#: bin/input-remapper-gtk:58
|
||||
msgid "Displays additional debug information"
|
||||
#: data/input-remapper.glade:331
|
||||
msgid "Duplicate this preset"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:214
|
||||
msgid "Don't hold down any keys while the injection starts."
|
||||
#: inputremapper/gui/user_interface.py:614
|
||||
#, python-format
|
||||
msgid "Failed to apply preset %s"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1213
|
||||
msgid "Examples"
|
||||
#: data/input-remapper.glade:239
|
||||
msgid "Help"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1604
|
||||
msgid "Go Back"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:483 data/input-remapper.glade:527
|
||||
msgid "Joystick"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:709
|
||||
msgid "Key"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:54 data/input-remapper.glade:1583
|
||||
#: data/input-remapper.glade:1695
|
||||
#: data/input-remapper.glade:149
|
||||
msgid "Input Remapper"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:465
|
||||
#: data/input-remapper.glade:584 data/input-remapper.glade:628
|
||||
msgid "Joystick"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:566
|
||||
msgid "Left joystick"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:948
|
||||
msgid "Macros"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:964
|
||||
msgid "Macros allow multiple characters to be written with a single key-press."
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:723
|
||||
msgid "Mapping"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:480 data/input-remapper.glade:524
|
||||
#: data/input-remapper.glade:581 data/input-remapper.glade:625
|
||||
msgid "Mouse"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:553
|
||||
#: data/input-remapper.glade:654
|
||||
msgid "Mouse speed"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:246
|
||||
#: data/input-remapper.glade:345
|
||||
msgid "New"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:298
|
||||
#: inputremapper/gui/user_interface.py:676
|
||||
#: inputremapper/gui/user_interface.py:748
|
||||
msgid "Permission denied!"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:399
|
||||
msgid "Preset"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:337
|
||||
#: data/input-remapper.glade:864
|
||||
msgid "Record a button of your device that should be remapped"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:438
|
||||
msgid "Rename"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:120
|
||||
msgid "Stop Injection"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:509
|
||||
#: data/input-remapper.glade:610
|
||||
msgid "Right joystick"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:368
|
||||
#: data/input-remapper.glade:469
|
||||
msgid "Save the entered name"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:124
|
||||
#: data/input-remapper.glade:1098
|
||||
msgid ""
|
||||
"Shortcut: ctrl + del\n"
|
||||
"To give your keys back their original mapping."
|
||||
"See <a href=\"https://github.com/sezanzeb/input-remapper/blob/HEAD/readme/"
|
||||
"usage.md\">usage.md</a> online on github for comprehensive information.\n"
|
||||
"\n"
|
||||
"A \"key + key + ... + key\" syntax can be used to trigger key combinations. "
|
||||
"For example \"Control_L + a\".\n"
|
||||
"\n"
|
||||
"Writing \"disable\" as a mapping disables a key.\n"
|
||||
"\n"
|
||||
"Macros allow multiple characters to be written with a single key-press. "
|
||||
"Information about programming them is available online on github. See <a "
|
||||
"href=\"https://github.com/sezanzeb/input-remapper/blob/HEAD/readme/macros.md"
|
||||
"\">macros.md</a> and <a href=\"https://github.com/sezanzeb/input-remapper/"
|
||||
"blob/HEAD/readme/examples.md\">examples.md</a>"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1556
|
||||
#: inputremapper/gui/editor/editor.py:111
|
||||
msgid "Set the key first"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:221
|
||||
msgid ""
|
||||
"Shortcut: ctrl + del\n"
|
||||
"Gives your keys back their original function"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1239
|
||||
msgid "Shortcuts"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1458
|
||||
#: data/input-remapper.glade:1141
|
||||
msgid ""
|
||||
"Shortcuts only work while keys are not being recorded and the gui is in "
|
||||
"focus."
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:402
|
||||
#: data/input-remapper.glade:312
|
||||
msgid "Start injecting. Don't hold down any keys while the injection starts"
|
||||
msgstr ""
|
||||
|
||||
#: inputremapper/gui/user_interface.py:563
|
||||
msgid "Starting injection..."
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:217
|
||||
msgid "Stop Injection"
|
||||
msgstr ""
|
||||
|
||||
#: inputremapper/gui/user_interface.py:477
|
||||
#, python-format
|
||||
msgid "Syntax error at %s, hover for info"
|
||||
msgstr ""
|
||||
|
||||
#: inputremapper/gui/user_interface.py:229
|
||||
msgid "The helper did not start"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:879
|
||||
msgid "The type of device this mapping is emulating."
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:499
|
||||
msgid "To automatically apply the preset after your login or when it connects."
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1439
|
||||
#: inputremapper/gui/user_interface.py:766
|
||||
#, python-format
|
||||
msgid "Unknown mapping %s"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1122
|
||||
msgid "Usage"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:843
|
||||
#: inputremapper/gui/editor/editor.py:482
|
||||
msgid "Use \"Stop Injection\" to stop before editing"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1015
|
||||
msgid "Version unknown"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:481 data/input-remapper.glade:525
|
||||
#: data/input-remapper.glade:582 data/input-remapper.glade:626
|
||||
msgid "Wheel"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:860
|
||||
#: data/input-remapper.glade:1032
|
||||
msgid ""
|
||||
"You can find more information and report bugs at\n"
|
||||
"<a href=\"https://github.com/sezanzeb/input-remapper\">https://github.com/"
|
||||
"sezanzeb/input-remapper</a>"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1248
|
||||
msgid "a, a, a with 500ms pause"
|
||||
#: inputremapper/gui/user_interface.py:522
|
||||
msgid "You need to add keys and save first"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1490
|
||||
#: inputremapper/gui/editor/editor.py:574
|
||||
msgid "Your system might reinterpret combinations "
|
||||
msgstr ""
|
||||
|
||||
#: inputremapper/gui/editor/editor.py:576
|
||||
msgid "break them."
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1173
|
||||
msgid "closes the application"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1478
|
||||
#: data/input-remapper.glade:1161
|
||||
msgid "ctrl + del"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1502
|
||||
#: data/input-remapper.glade:1185
|
||||
msgid "ctrl + q"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1514
|
||||
#: data/input-remapper.glade:1197
|
||||
msgid "ctrl + r"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1044
|
||||
msgid "e"
|
||||
#: inputremapper/gui/editor/editor.py:573
|
||||
msgid "ctrl, alt and shift may not combine properly"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1335
|
||||
msgid "e(EV_REL, REL_X, 10)"
|
||||
#: inputremapper/gui/editor/editor.py:81 inputremapper/gui/editor/editor.py:382
|
||||
msgid "new entry"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1104
|
||||
msgid "executes the parameter as long as the key is pressed down"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1140
|
||||
msgid "executes two actions behind each other"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1116
|
||||
msgid "h"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1056
|
||||
msgid "holds a modifier while executing the second parameter"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1020
|
||||
msgid "k"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1298
|
||||
msgid "k(1).h(k(2)).k(3)"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1235
|
||||
msgid "k(1).k(2)"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1398
|
||||
msgid "keeps scrolling down while held"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1080
|
||||
msgid "m"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1273
|
||||
msgid "m(Control_L, k(a).k(x))"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1152
|
||||
msgid "mouse"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1372
|
||||
msgid "mouse(right, 4)"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1311
|
||||
msgid "moves the mouse cursor 10px to the right"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:984
|
||||
msgid "r"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1260
|
||||
msgid "r(3, k(a).w(500))"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1526
|
||||
#: data/input-remapper.glade:1209
|
||||
msgid "refreshes the device list"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1092
|
||||
msgid "repeats the execution of the second parameter"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1188
|
||||
msgid "same as mouse"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1538
|
||||
#: data/input-remapper.glade:1221
|
||||
msgid "stops the injection"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1176
|
||||
msgid "takes direction (up, left, ...) and speed as parameters"
|
||||
#: inputremapper/gui/editor/editor.py:575
|
||||
msgid "with those after they are injected, and by doing so "
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1008
|
||||
msgid "w"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:996
|
||||
msgid "waits in milliseconds"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1164
|
||||
msgid "wheel"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1385
|
||||
msgid "wheel(down, 1)"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1360
|
||||
msgid "which keeps moving the mouse while pressed"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1323
|
||||
msgid "writes 1 2 2 ... 2 2 3 while the key is pressed"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1032
|
||||
msgid "writes a single keystroke"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:1068
|
||||
msgid "writes an event"
|
||||
msgstr ""
|
||||
|
||||
#: data/input-remapper.glade:880
|
||||
#: data/input-remapper.glade:1052
|
||||
msgid ""
|
||||
"© 2021 Sezanzeb proxima@sezanzeb.de\n"
|
||||
"This program comes with absolutely no warranty.\n"
|
||||
|
Loading…
Reference in New Issue
Block a user