[feature] ignore updates: Arch/AUR packages

This commit is contained in:
Vinicius Moreira
2020-05-17 14:36:22 -03:00
parent 86ba1aeda7
commit a320f30911
25 changed files with 566 additions and 12 deletions

View File

@@ -5,6 +5,21 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [0.9.4] 2020
### Features
- Ignore updates: now it is possible to ignore updates from software packages through their actions button (**+**). Supported types: Arch packages
<p align="center">
<img src="https://raw.githubusercontent.com/vinifmor/bauh/staging/pictures/releases/0.9.4/ignore_updates.png">
</p>
<p align="center">
<img src="https://raw.githubusercontent.com/vinifmor/bauh/staging/pictures/releases/0.9.4/revert_ignored_updates.png">
</p>
- Packages with ignored updates have their versions displayed with a brown shade
<p align="center">
<img src="https://raw.githubusercontent.com/vinifmor/bauh/staging/pictures/releases/0.9.4/version_ignored_updates.png">
</p>
### Improvements
- Arch
- faster caching data process during initialization

View File

@@ -3,11 +3,11 @@
</p>
**bauh** ( ba-oo ), formerly known as **fpakman**, is a graphical interface for managing your Linux applications / packages. It currently supports
the following types: AppImage, Arch ( repositories / AUR ), Flatpak, Snap and native Web applications.
**bauh** ( ba-oo ), formerly known as **fpakman**, is a graphical interface for managing your Linux applications/packages. It currently supports
the following formats: AppImage, Arch ( repositories / AUR ), Flatpak, Snap and native Web applications.
Key features:
- A management panel where you can: search, install, uninstall, launch, downgrade and retrieve the release history from software packages.
- A management panel where you can: search, install, uninstall, upgrade, downgrade, launch, ignore updates and retrieve releases history from software packages./
- Tray mode: launches attached to the system tray and publishes notifications when there are software updates available
- System backup: it integrates with **Timeshift** to provide a simple and safe backup process before applying any change to your system.
@@ -169,6 +169,7 @@ db_updater:
- **refresh mirrors**: allows the user to define multiple mirrors locations and sort by the fastest ( `sudo pacman-mirrors -c country1,country2 && sudo pacman-mirrors --fasttrack 5 && sudo pacman -Syy` )
- **quick system upgrade**: it executes a default pacman upgrade ( `pacman -Syyu --noconfirm` )
- **clean cache**: it cleans the pacman cache diretory ( default: `/var/cache/pacman/pkg` )
- Packages with ignored updates are defined at **~/.config/bauh/arch/updates_ignored.txt**
- The configuration file is located at **~/.config/bauh/arch.yml** and it allows the following customizations:
```
optimize: true # if 'false': disables the auto-compilation improvements

View File

@@ -340,3 +340,9 @@ class SoftwareManager(ABC):
def fill_sizes(self, pkgs: List[SoftwarePackage]):
pass
def ignore_update(self, pkg: SoftwarePackage):
pass
def revert_ignored_update(self, pkg: SoftwarePackage):
pass

View File

@@ -95,6 +95,12 @@ class SoftwarePackage(ABC):
def can_be_installed(self):
return not self.installed
def is_update_ignored(self) -> bool:
return False
def supports_ignored_updates(self) -> bool:
return False
@abstractmethod
def get_type(self):
"""

View File

@@ -9,11 +9,12 @@ BUILD_DIR = '{}/arch'.format(TEMP_DIR)
ARCH_CACHE_PATH = CACHE_PATH + '/arch'
CATEGORIES_FILE_PATH = ARCH_CACHE_PATH + '/categories.txt'
URL_CATEGORIES_FILE = 'https://raw.githubusercontent.com/vinifmor/bauh-files/master/arch/categories.txt'
CONFIG_DIR = '{}/.config/bauh/arch'.format(Path.home())
CONFIG_DIR = '{}/.config/bauh/arch'.format(str(Path.home()))
CUSTOM_MAKEPKG_FILE = '{}/makepkg.conf'.format(CONFIG_DIR)
AUR_INDEX_FILE = '{}/arch.txt'.format(BUILD_DIR)
CONFIG_FILE = '{}/arch.yml'.format(CONFIG_PATH)
SUGGESTIONS_FILE = 'https://raw.githubusercontent.com/vinifmor/bauh-files/master/arch/aur_suggestions.txt'
UPDATES_IGNORED_FILE = '{}/updates_ignored.txt'.format(CONFIG_DIR)
def get_icon_path() -> str:

View File

@@ -30,7 +30,8 @@ from bauh.commons.html import bold
from bauh.commons.system import SystemProcess, ProcessHandler, new_subprocess, run_cmd, SimpleProcess
from bauh.gems.arch import BUILD_DIR, aur, pacman, makepkg, message, confirmation, disk, git, \
gpg, URL_CATEGORIES_FILE, CATEGORIES_FILE_PATH, CUSTOM_MAKEPKG_FILE, SUGGESTIONS_FILE, \
CONFIG_FILE, get_icon_path, database, mirrors, sorting, cpu_manager, ARCH_CACHE_PATH
CONFIG_FILE, get_icon_path, database, mirrors, sorting, cpu_manager, ARCH_CACHE_PATH, UPDATES_IGNORED_FILE, \
CONFIG_DIR
from bauh.gems.arch.aur import AURClient
from bauh.gems.arch.config import read_config
from bauh.gems.arch.dependencies import DependenciesAnalyser
@@ -529,6 +530,14 @@ class ArchManager(SoftwareManager):
for t in map_threads:
t.join()
if pkgs:
ignored = self._list_ignored_updates()
if ignored:
for p in pkgs:
if p.name in ignored:
p.update_ignored = True
return SearchResult(pkgs, None, len(pkgs))
def _downgrade_aur_pkg(self, context: TransactionContext):
@@ -1016,6 +1025,8 @@ class ArchManager(SoftwareManager):
body=self.i18n['arch.uninstall.clean_cached.error'].format(bold(p)),
type_=MessageType.WARNING)
self._revert_ignored_updates(to_uninstall)
self._update_progress(context, 100)
return uninstalled
@@ -1932,7 +1943,7 @@ class ArchManager(SoftwareManager):
aur_type, repo_type = self.i18n['gem.arch.type.aur.label'], self.i18n['gem.arch.type.arch_repo.label']
return [PackageUpdate(p.name, p.latest_version, aur_type if p.repository == 'aur' else repo_type, p.name) for p in installed if p.update]
return [PackageUpdate(p.name, p.latest_version, aur_type if p.repository == 'aur' else repo_type, p.name) for p in installed if p.update and not p.is_update_ignored()]
def list_warnings(self, internet_available: bool) -> List[str]:
warnings = []
@@ -2246,3 +2257,37 @@ class ArchManager(SoftwareManager):
return False
return True
def _list_ignored_updates(self) -> Set[str]:
if os.path.exists(UPDATES_IGNORED_FILE):
with open(UPDATES_IGNORED_FILE) as f:
return {line.strip() for line in f.read().split('\n') if line}
def ignore_update(self, pkg: ArchPackage):
ignored = self._list_ignored_updates()
if not ignored or pkg.name not in ignored:
Path(CONFIG_DIR).mkdir(parents=True, exist_ok=True)
with open(UPDATES_IGNORED_FILE, 'a+') as f:
f.write('{}\n'.format(pkg.name))
pkg.update_ignored = True
def _revert_ignored_updates(self, pkgs: Iterable[str]):
if os.path.exists(UPDATES_IGNORED_FILE):
ignored = []
with open(UPDATES_IGNORED_FILE) as f:
for line in f.read().split('\n'):
if line:
clean_line = line.strip()
if clean_line and clean_line not in pkgs:
ignored.append(clean_line)
with open(UPDATES_IGNORED_FILE, 'w+') as f:
f.writelines(ignored)
def revert_ignored_update(self, pkg: ArchPackage):
self._revert_ignored_updates({pkg.name})
pkg.update_ignored = False

View File

@@ -16,7 +16,7 @@ class ArchPackage(SoftwarePackage):
first_submitted: datetime.datetime = None, last_modified: datetime.datetime = None,
maintainer: str = None, url_download: str = None, pkgbuild: str = None, repository: str = None,
desktop_entry: str = None, installed: bool = False, srcinfo: dict = None, dependencies: Set[str] = None,
categories: List[str] = None, i18n: I18n = None):
categories: List[str] = None, i18n: I18n = None, update_ignored: bool = False):
super(ArchPackage, self).__init__(name=name, version=version, latest_version=latest_version, description=description,
installed=installed, categories=categories)
@@ -36,6 +36,7 @@ class ArchPackage(SoftwarePackage):
self.src_info = srcinfo
self.dependencies = dependencies
self.i18n = i18n
self.update_ignored = update_ignored
@staticmethod
def disk_cache_path(pkgname: str):
@@ -132,6 +133,12 @@ class ArchPackage(SoftwarePackage):
def supports_backup(self) -> bool:
return True
def is_update_ignored(self) -> bool:
return self.update_ignored
def supports_ignored_updates(self) -> bool:
return self.installed
def __str__(self):
return self.__repr__()

View File

@@ -539,3 +539,15 @@ class GenericSoftwareManager(SoftwareManager):
for t in threads:
t.join()
def ignore_update(self, pkg: SoftwarePackage):
manager = self._get_manager_for(pkg)
if manager:
manager.ignore_update(pkg)
def revert_ignored_update(self, pkg: SoftwarePackage):
manager = self._get_manager_for(pkg)
if manager:
manager.revert_ignored_update(pkg)

View File

@@ -121,6 +121,7 @@ class AppsTable(QTableWidget):
menu_row.setCursor(QCursor(Qt.PointingHandCursor))
if pkg.model.installed:
if pkg.model.has_history():
action_history = QAction(self.i18n["manage_window.apps_table.row.actions.history"])
action_history.setIcon(QIcon(resource.get_path('img/history.svg')))
@@ -145,6 +146,21 @@ class AppsTable(QTableWidget):
action_downgrade.setIcon(QIcon(resource.get_path('img/downgrade.svg')))
menu_row.addAction(action_downgrade)
if pkg.model.supports_ignored_updates():
if pkg.model.is_update_ignored():
action_ignore_updates = QAction(
self.i18n["manage_window.apps_table.row.actions.ignore_updates_reverse"])
action_ignore_updates.setIcon(QIcon(resource.get_path('img/revert_update_ignored.svg')))
else:
action_ignore_updates = QAction(self.i18n["manage_window.apps_table.row.actions.ignore_updates"])
action_ignore_updates.setIcon(QIcon(resource.get_path('img/ignore_update.svg')))
def ignore_updates():
self.window.ignore_updates(pkg)
action_ignore_updates.triggered.connect(ignore_updates)
menu_row.addAction(action_ignore_updates)
if bool(pkg.model.get_custom_supported_actions()):
for action in pkg.model.get_custom_supported_actions():
item = QAction(self.i18n[action.i18_label_key])
@@ -263,7 +279,7 @@ class AppsTable(QTableWidget):
if change_update_col:
col_update = None
if update_check_enabled and pkg.model.update:
if update_check_enabled and not pkg.model.is_update_ignored() and pkg.model.update:
col_update = QToolBar()
col_update.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred)
col_update.addWidget(UpdateToggleButton(pkg=pkg,
@@ -351,11 +367,15 @@ class AppsTable(QTableWidget):
else:
tooltip = self.i18n['version.unknown']
if pkg.model.update:
if pkg.model.update and not pkg.model.is_update_ignored():
label_version.setStyleSheet("color: {}; font-weight: bold".format(GREEN))
tooltip = self.i18n['version.installed_outdated']
if pkg.model.installed and pkg.model.update and pkg.model.version and pkg.model.latest_version and pkg.model.version != pkg.model.latest_version:
if pkg.model.is_update_ignored():
label_version.setStyleSheet("color: {}; font-weight: bold".format(BROWN))
tooltip = self.i18n['version.updates_ignored']
if pkg.model.installed and pkg.model.update and not pkg.model.is_update_ignored() and pkg.model.version and pkg.model.latest_version and pkg.model.version != pkg.model.latest_version:
tooltip = '{}. {}: {}'.format(tooltip, self.i18n['version.latest'], pkg.model.latest_version)
label_version.setText(label_version.text() + ' > {}'.format(pkg.model.latest_version))

View File

@@ -22,7 +22,7 @@ def update_info(pkgv: PackageView, pkgs_info: dict):
else:
pkgs_info['napps_count'] += 1
if pkgv.model.update:
if pkgv.model.update and not pkgv.model.is_update_ignored():
if pkgv.model.is_application():
pkgs_info['app_updates'] += 1
else:

View File

@@ -907,3 +907,26 @@ class GetScreenshots(AsyncAction):
self.notify_finished({'pkg': self.pkg, 'screenshots': self.manager.get_screenshots(self.pkg.model)})
self.pkg = None
class IgnorePackageUpdates(AsyncAction):
def __init__(self, manager: SoftwareManager, pkg: PackageView = None):
super(IgnorePackageUpdates, self).__init__()
self.pkg = pkg
self.manager = manager
def run(self):
if self.pkg:
try:
if self.pkg.model.is_update_ignored():
self.manager.revert_ignored_update(self.pkg.model)
res = {'action': 'ignore_updates_reverse', 'success': not self.pkg.model.is_update_ignored(), 'pkg': self.pkg}
else:
self.manager.ignore_update(self.pkg.model)
res = {'action': 'ignore_updates', 'success': self.pkg.model.is_update_ignored(), 'pkg': self.pkg}
self.notify_finished(res)
finally:
self.pkg = None

View File

@@ -34,7 +34,8 @@ from bauh.view.qt.settings import SettingsWindow
from bauh.view.qt.thread import UpgradeSelected, RefreshApps, UninstallApp, DowngradeApp, GetAppInfo, \
GetAppHistory, SearchPackages, InstallPackage, AnimateProgress, NotifyPackagesReady, FindSuggestions, \
ListWarnings, \
AsyncAction, LaunchApp, ApplyFilters, CustomSoftwareAction, GetScreenshots, CustomAction, NotifyInstalledLoaded
AsyncAction, LaunchApp, ApplyFilters, CustomSoftwareAction, GetScreenshots, CustomAction, NotifyInstalledLoaded, \
IgnorePackageUpdates
from bauh.view.qt.view_model import PackageView, PackageViewStatus
from bauh.view.util import util, resource
from bauh.view.util.translation import I18n
@@ -322,6 +323,9 @@ class ManageWindow(QWidget):
self.thread_notify_pkgs_ready.signal_changed.connect(self._update_package_data)
self.thread_notify_pkgs_ready.signal_finished.connect(self._update_state_when_pkgs_ready)
self.thread_ignore_updates = IgnorePackageUpdates(manager=self.manager)
self._bind_async_action(self.thread_ignore_updates, finished_call=self.finish_ignore_updates)
self.toolbar_bottom = QToolBar()
self.toolbar_bottom.setIconSize(QSize(16, 16))
self.toolbar_bottom.setStyleSheet('QToolBar { spacing: 3px }')
@@ -1256,3 +1260,22 @@ class ManageWindow(QWidget):
menu_row.adjustSize()
menu_row.popup(QCursor.pos())
menu_row.exec_()
def ignore_updates(self, pkg: PackageView):
status_key = 'ignore_updates' if not pkg.model.is_update_ignored() else 'ignore_updates_reverse'
self._begin_action(self.i18n['manage_window.status.{}'.format(status_key)].format(pkg.model.name))
self.thread_ignore_updates.pkg = pkg
self.thread_ignore_updates.start()
def finish_ignore_updates(self, res: dict):
self.finish_action()
if res['success']:
self.table_apps.update_package(res['pkg'])
dialog.show_message(title=self.i18n['success'].capitalize(),
body=self.i18n['action.{}.success'.format(res['action'])].format(bold(res['pkg'].model.name)),
type_=MessageType.INFO)
else:
dialog.show_message(title=self.i18n['fail'].capitalize(),
body=self.i18n['action.{}.fail'.format(res['action'])].format(bold(res['pkg'].model.name)),
type_=MessageType.ERROR)

View File

@@ -0,0 +1,134 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
height="24"
width="23.515306"
sodipodi:docname="ignore_update.svg"
xml:space="preserve"
viewBox="0 0 23.515307 24"
y="0px"
x="0px"
id="Capa_1"
version="1.1"><metadata
id="metadata977"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs975" /><sodipodi:namedview
inkscape:current-layer="Capa_1"
inkscape:window-maximized="1"
inkscape:window-y="0"
inkscape:window-x="0"
inkscape:cy="15.198259"
inkscape:cx="25.836555"
inkscape:zoom="9.4874926"
fit-margin-bottom="0"
fit-margin-right="0"
fit-margin-left="0"
fit-margin-top="0"
showborder="true"
showgrid="false"
id="namedview973"
inkscape:window-height="703"
inkscape:window-width="1366"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
guidetolerance="10"
gridtolerance="10"
objecttolerance="10"
borderopacity="1"
bordercolor="#666666"
pagecolor="#ffffff" />
<g
transform="translate(-99.310818,-31.505501)"
id="g942">
</g>
<g
transform="translate(-99.310818,-31.505501)"
id="g944">
</g>
<g
transform="translate(-99.310818,-31.505501)"
id="g946">
</g>
<g
transform="translate(-99.310818,-31.505501)"
id="g948">
</g>
<g
transform="translate(-99.310818,-31.505501)"
id="g950">
</g>
<g
transform="translate(-99.310818,-31.505501)"
id="g952">
</g>
<g
transform="translate(-99.310818,-31.505501)"
id="g954">
</g>
<g
transform="translate(-99.310818,-31.505501)"
id="g956">
</g>
<g
transform="translate(-99.310818,-31.505501)"
id="g958">
</g>
<g
transform="translate(-99.310818,-31.505501)"
id="g960">
</g>
<g
transform="translate(-99.310818,-31.505501)"
id="g962">
</g>
<g
transform="translate(-99.310818,-31.505501)"
id="g964">
</g>
<g
transform="translate(-99.310818,-31.505501)"
id="g966">
</g>
<g
transform="translate(-99.310818,-31.505501)"
id="g968">
</g>
<g
transform="translate(-99.310818,-31.505501)"
id="g970">
</g>
<g
transform="scale(0.48990007)"
id="g3081"><g
style="fill:#91a069;fill-opacity:1;stroke:#91a069;stroke-width:0.0521502;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(1.8424663,0,0,1.9956679,0.04804185,-0.95415234)"
id="g6"><path
style="fill:#91a069;fill-opacity:1;stroke:#91a069;stroke-width:0.0521502;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
id="path2"
d="m 25,17 h -2 c -0.6,0 -1,0.4 -1,1 v 2.5 C 22,20.8 21.8,21 21.5,21 H 4.5 C 4.2,21 4,20.8 4,20.5 V 18 C 4,17.4 3.6,17 3,17 H 1 c -0.6,0 -1,0.4 -1,1 v 6 c 0,0.6 0.4,1 1,1 h 24 c 0.6,0 1,-0.4 1,-1 v -6 c 0,-0.6 -0.4,-1 -1,-1 z" /><path
style="fill:#91a069;fill-opacity:1;stroke:#91a069;stroke-width:0.0521502;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
id="path4"
d="m 12.3,16.7 c 0.2,0.2 0.5,0.3 0.7,0.3 0.2,0 0.5,-0.1 0.7,-0.3 l 6,-6 C 19.9,10.5 20,10.3 20,10 20,9.7 19.9,9.5 19.7,9.3 L 18.3,7.9 C 18.1,7.7 17.9,7.6 17.6,7.6 c -0.3,0 -0.5,0.1 -0.7,0.3 l -1,1 C 15.6,9.2 15,9 15,8.5 V 2 C 15,1.4 14.6,1 14,1 H 12 C 11.4,1 11,1.4 11,2 V 8.6 C 11,9 10.5,9.3 10.1,9 L 9.1,8 C 8.9,7.8 8.7,7.7 8.4,7.7 8.1,7.7 7.9,7.8 7.7,8 L 6.3,9.4 C 6.1,9.6 6,9.8 6,10.1 c 0,0.3 0.1,0.5 0.3,0.7 z" /></g><g
id="g940"
style="fill:#ff0000"
transform="matrix(0.11250018,0,0,0.11250018,4.659997e-5,-3.3967093e-7)">
<g
id="g938"
style="fill:#ff0000">
<path
d="M 213.333,0 C 95.467,0 0,95.467 0,213.333 0,331.199 95.467,426.666 213.333,426.666 331.199,426.666 426.667,331.2 426.667,213.333 426.667,95.466 331.2,0 213.333,0 Z M 42.667,213.333 c 0,-94.293 76.373,-170.667 170.667,-170.667 39.467,0 75.627,13.547 104.533,35.947 L 78.613,317.867 C 56.213,288.96 42.667,252.8 42.667,213.333 Z M 213.333,384 C 173.866,384 137.706,370.453 108.8,348.053 L 348.053,108.8 C 370.453,137.707 384,173.867 384,213.333 384,307.627 307.627,384 213.333,384 Z"
id="path936"
style="fill:#ff0000" />
</g>
</g></g></svg>

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

@@ -0,0 +1,189 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="Capa_1"
x="0px"
y="0px"
viewBox="0 0 23.515307 24"
xml:space="preserve"
sodipodi:docname="revert_update_ignored.svg"
width="23.515306"
height="24"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"><metadata
id="metadata977"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs975" /><sodipodi:namedview
inkscape:document-rotation="0"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1600"
inkscape:window-height="871"
id="namedview973"
showgrid="false"
showborder="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="6.7086704"
inkscape:cx="48.469191"
inkscape:cy="14.670878"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="Capa_1" />
<g
id="g942"
transform="translate(-99.310818,-31.505501)">
</g>
<g
id="g944"
transform="translate(-99.310818,-31.505501)">
</g>
<g
id="g946"
transform="translate(-99.310818,-31.505501)">
</g>
<g
id="g948"
transform="translate(-99.310818,-31.505501)">
</g>
<g
id="g950"
transform="translate(-99.310818,-31.505501)">
</g>
<g
id="g952"
transform="translate(-99.310818,-31.505501)">
</g>
<g
id="g954"
transform="translate(-99.310818,-31.505501)">
</g>
<g
id="g956"
transform="translate(-99.310818,-31.505501)">
</g>
<g
id="g958"
transform="translate(-99.310818,-31.505501)">
</g>
<g
id="g960"
transform="translate(-99.310818,-31.505501)">
</g>
<g
id="g962"
transform="translate(-99.310818,-31.505501)">
</g>
<g
id="g964"
transform="translate(-99.310818,-31.505501)">
</g>
<g
id="g966"
transform="translate(-99.310818,-31.505501)">
</g>
<g
id="g968"
transform="translate(-99.310818,-31.505501)">
</g>
<g
id="g970"
transform="translate(-99.310818,-31.505501)">
</g>
<g
transform="matrix(0.0625,0,0,0.0625,5.3383307,-186.94071)"
id="g1607" /><g
transform="matrix(0.0625,0,0,0.0625,5.3383307,-186.94071)"
id="g1609" /><g
transform="matrix(0.0625,0,0,0.0625,5.3383307,-186.94071)"
id="g1611" /><g
transform="matrix(0.0625,0,0,0.0625,5.3383307,-186.94071)"
id="g1613" /><g
transform="matrix(0.0625,0,0,0.0625,5.3383307,-186.94071)"
id="g1615" /><g
transform="matrix(0.0625,0,0,0.0625,5.3383307,-186.94071)"
id="g1617" /><g
transform="matrix(0.0625,0,0,0.0625,5.3383307,-186.94071)"
id="g1619" /><g
transform="matrix(0.0625,0,0,0.0625,5.3383307,-186.94071)"
id="g1621" /><g
transform="matrix(0.0625,0,0,0.0625,5.3383307,-186.94071)"
id="g1623" /><g
transform="matrix(0.0625,0,0,0.0625,5.3383307,-186.94071)"
id="g1625" /><g
transform="matrix(0.0625,0,0,0.0625,5.3383307,-186.94071)"
id="g1627" /><g
transform="matrix(0.0625,0,0,0.0625,5.3383307,-186.94071)"
id="g1629" /><g
transform="matrix(0.0625,0,0,0.0625,5.3383307,-186.94071)"
id="g1631" /><g
transform="matrix(0.0625,0,0,0.0625,5.3383307,-186.94071)"
id="g1633" /><g
transform="matrix(0.0625,0,0,0.0625,5.3383307,-186.94071)"
id="g1635" /><g
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
id="g3479"
transform="matrix(0.04614971,0,0,0.04614971,-0.05664347,0.18569731)"><g
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
id="g3455"><g
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
id="g2828"><g
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
id="g2826"><path
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
d="M 508.745,246.041 C 504.171,239.784 395.188,92.835 255.997,92.835 c -139.191,0 -248.179,146.949 -252.748,153.2 -4.332,5.936 -4.332,13.987 0,19.923 4.569,6.257 113.557,153.206 252.748,153.206 139.191,0 248.174,-146.95 252.748,-153.201 4.338,-5.935 4.338,-13.992 0,-19.922 z M 255.997,385.406 c -102.529,0 -191.33,-97.533 -217.617,-129.418 26.253,-31.913 114.868,-129.395 217.617,-129.395 102.524,0 191.319,97.516 217.617,129.418 -26.253,31.912 -114.868,129.395 -217.617,129.395 z"
id="path2824" /></g></g><g
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
id="g2834"><g
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
id="g2832"><path
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
d="m 255.997,154.725 c -55.842,0 -101.275,45.433 -101.275,101.275 0,55.842 45.433,101.275 101.275,101.275 55.842,0 101.275,-45.433 101.275,-101.275 0,-55.842 -45.433,-101.275 -101.275,-101.275 z m 0,168.791 c -37.23,0 -67.516,-30.287 -67.516,-67.516 0,-37.229 30.287,-67.516 67.516,-67.516 37.229,0 67.516,30.287 67.516,67.516 0,37.229 -30.286,67.516 -67.516,67.516 z"
id="path2830" /></g></g><g
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
id="g2836" /><g
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
id="g2838" /><g
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
id="g2840" /><g
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
id="g2842" /><g
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
id="g2844" /><g
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
id="g2846" /><g
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
id="g2848" /><g
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
id="g2850" /><g
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
id="g2852" /><g
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
id="g2854" /><g
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
id="g2856" /><g
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
id="g2858" /><g
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
id="g2860" /><g
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
id="g2862" /><g
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
id="g2864" /></g></g></svg>

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

@@ -57,6 +57,10 @@ action.disk_trim.error=There was a problem while optimizing the disk
action.failed=L'acció ha fallat
action.history.no_history.body=There is no available history for {}
action.history.no_history.title=No history
action.ignore_updates.fail=It was not possible to ignore updates from {}
action.ignore_updates.success=Updates from {} will be ignored from now on
action.ignore_updates_reverse.fail=It was not possible to revert ignored updates from {}
action.ignore_updates_reverse.success=Updates from {} will be displayed again from now on
action.info.tooltip=Feu clic aquí per a veure informació sobre aquesta aplicació
action.not_allowed=Action not allowed
action.request_reboot.title=System restart
@@ -268,6 +272,8 @@ locale.tr=turc
manage_window.apps_table.row.actions.downgrade=Reverteix
manage_window.apps_table.row.actions.downgrade.popup.body=Voleu revertir «{}»?
manage_window.apps_table.row.actions.history=Historial
manage_window.apps_table.row.actions.ignore_updates=Ignore updates
manage_window.apps_table.row.actions.ignore_updates_reverse=Revert ignored updates
manage_window.apps_table.row.actions.info=Informació
manage_window.apps_table.row.actions.install=Instal·la
manage_window.apps_table.row.actions.install.popup.body=Voleu instal·lar «{}» a lordinador?
@@ -301,6 +307,8 @@ manage_window.settings.about=Quant a
manage_window.status.downgrading=Sestà revertint
manage_window.status.filtering=Sestà filtrant
manage_window.status.history=Sestà recuperant lhistorial
manage_window.status.ignore_updates=Ignoring updates from {}
manage_window.status.ignore_updates_reverse=Reverting updates ignored from {}
manage_window.status.info=Sestà recuperant la informació
manage_window.status.installed=Loading installed
manage_window.status.installing=Sestà instal·lant
@@ -380,6 +388,7 @@ version.latest=versió més recent
version.outdated=no actualitzada
version.unknown=no informat
version.updated=actualitzada
version.updates_ignored=Updates ignored
view.components.file_chooser.placeholder=Feu clic aquí per seleccionar
warning=avís
warning.update_available=There is a new {} version available ({}). Check out the news at {}.

View File

@@ -57,6 +57,10 @@ action.disk_trim.error=There was a problem while optimizing the disk
action.failed=Aktion fehlgeschlagen
action.history.no_history.body=There is no available history for {}
action.history.no_history.title=No history
action.ignore_updates.fail=It was not possible to ignore updates from {}
action.ignore_updates.success=Updates from {} will be ignored from now on
action.ignore_updates_reverse.fail=It was not possible to revert ignored updates from {}
action.ignore_updates_reverse.success=Updates from {} will be displayed again from now on
action.info.tooltip=Informationen über diese Anwendung anzeigen
action.not_allowed=Action not allowed
action.request_reboot.title=System restart
@@ -267,6 +271,8 @@ locale.tr=Türkisch
manage_window.apps_table.row.actions.downgrade=Downgraden
manage_window.apps_table.row.actions.downgrade.popup.body={} wirklich downgraden?
manage_window.apps_table.row.actions.history=Verlauf
manage_window.apps_table.row.actions.ignore_updates=Ignore updates
manage_window.apps_table.row.actions.ignore_updates_reverse=Revert ignored updates
manage_window.apps_table.row.actions.info=Information
manage_window.apps_table.row.actions.install=Installieren
manage_window.apps_table.row.actions.install.popup.body={} installieren?
@@ -300,6 +306,8 @@ manage_window.settings.about=Über
manage_window.status.downgrading=Downgraden
manage_window.status.filtering=Filtern
manage_window.status.history=Verlauf laden
manage_window.status.ignore_updates=Ignoring updates from {}
manage_window.status.ignore_updates_reverse=Reverting updates ignored from {}
manage_window.status.info=Informationen laden
manage_window.status.installed=Loading installed
manage_window.status.installing=Installieren
@@ -379,6 +387,7 @@ version.latest=Aktuellste Version
version.outdated=veraltet
version.unknown=unbekannt
version.updated=geupdated
version.updates_ignored=Updates ignored
view.components.file_chooser.placeholder=Auswählen
warning=Warnung
warning.update_available=There is a new {} version available ({}). Check out the news at {}.

View File

@@ -57,6 +57,10 @@ action.disk_trim=Optimizing disc ( TRIM )
action.failed=Action failed
action.history.no_history.body=There is no available history for {}
action.history.no_history.title=No history
action.ignore_updates.fail=It was not possible to ignore updates from {}
action.ignore_updates.success=Updates from {} will be ignored from now on
action.ignore_updates_reverse.fail=It was not possible to revert ignored updates from {}
action.ignore_updates_reverse.success=Updates from {} will be displayed again from now on
action.info.tooltip=Click here to see information about this application
action.not_allowed=Action not allowed
action.request_reboot.title=System restart
@@ -267,6 +271,8 @@ locale.tr=turkish
manage_window.apps_table.row.actions.downgrade.popup.body=Do you really want to downgrade {} ?
manage_window.apps_table.row.actions.downgrade=Downgrade
manage_window.apps_table.row.actions.history=History
manage_window.apps_table.row.actions.ignore_updates=Ignore updates
manage_window.apps_table.row.actions.ignore_updates_reverse=Revert ignored updates
manage_window.apps_table.row.actions.info=Information
manage_window.apps_table.row.actions.install.popup.body=Install {} on your device ?
manage_window.apps_table.row.actions.install.popup.title=Installation
@@ -300,6 +306,8 @@ manage_window.settings.about=About
manage_window.status.downgrading=Downgrading
manage_window.status.filtering=Filtering
manage_window.status.history=Retrieving history
manage_window.status.ignore_updates=Ignoring updates from {}
manage_window.status.ignore_updates_reverse=Reverting updates ignored from {}
manage_window.status.info=Retrieving information
manage_window.status.installed=Loading installed
manage_window.status.installing=Installing
@@ -378,6 +386,7 @@ version.latest=latest version
version.outdated=outdated
version.unknown=not informed
version.updated=updated
version.updates_ignored=Updates ignored
version=version
view.components.file_chooser.placeholder=Click here to select
warning=warning

View File

@@ -57,6 +57,10 @@ action.disk_trim.error=Hubo un problema al optimizar el disco
action.failed=Acción fallida
action.history.no_history.body=There is no available history for {}
action.history.no_history.title=No history
action.ignore_updates.fail=No fue posible ignorar las actualizaciones de {}
action.ignore_updates.success=Las actualizaciones de {} serán ignoradas de ahora en adelante
action.ignore_updates_reverse.fail=No fue posible revertir las actualizaciones ignoradas de {}
action.ignore_updates_reverse.success=Las actualizaciones de {} se mostrarán nuevamente a partir de ahora
action.info.tooltip=Pulse aquí para ver información sobre esta aplicación
action.not_allowed=Acción no permitida
action.request_reboot.title=Reinicio de sistema
@@ -268,6 +272,8 @@ locale.tr=turco
manage_window.apps_table.row.actions.downgrade=Revertir versión
manage_window.apps_table.row.actions.downgrade.popup.body=¿Realmente quiere revertir la versión actual de {}?
manage_window.apps_table.row.actions.history=Histórico
manage_window.apps_table.row.actions.ignore_updates=Ignorar actualizaciones
manage_window.apps_table.row.actions.ignore_updates_reverse=Revertir actualizaciones ignoradas
manage_window.apps_table.row.actions.info=Información
manage_window.apps_table.row.actions.install=Instalar
manage_window.apps_table.row.actions.install.popup.body=¿Quiere instalar {} en el equipo?
@@ -301,6 +307,8 @@ manage_window.settings.about=Acerca de
manage_window.status.downgrading=Revirtiendo
manage_window.status.filtering=Filtrando
manage_window.status.history=Obteniendo el histórico
manage_window.status.ignore_updates=Ignorando las actualizaciones de {}
manage_window.status.ignore_updates_reverse=Revertir actualizaciones ignoradas de {}
manage_window.status.info=Obteniendo información
manage_window.status.installed=Cargando instalados
manage_window.status.installing=Instalando
@@ -380,6 +388,7 @@ version.latest=versión más reciente
version.outdated=desactualizada
version.unknown=versión no informada
version.updated=actualizada
version.updates_ignored=Actualizaciónes ignoradas
view.components.file_chooser.placeholder=Pulse aquí para seleccionar
warning=aviso
warning.update_available=Hay una nueva versión de {} disponible ({}). Vea las novedades en {}.

View File

@@ -57,6 +57,10 @@ action.disk_trim.error=There was a problem while optimizing the disk
action.failed=Azione non riuscita
action.history.no_history.body=There is no available history for {}
action.history.no_history.title=No history
action.ignore_updates.fail=It was not possible to ignore updates from {}
action.ignore_updates.success=Updates from {} will be ignored from now on
action.ignore_updates_reverse.fail=It was not possible to revert ignored updates from {}
action.ignore_updates_reverse.success=Updates from {} will be displayed again from now on
action.info.tooltip=Clicca qui per vedere informazioni su questa applicazione
action.not_allowed=Action not allowed
action.request_reboot.title=System restart
@@ -269,6 +273,8 @@ locale.tr=turco
manage_window.apps_table.row.actions.downgrade=Downgrade
manage_window.apps_table.row.actions.downgrade.popup.body=Vuoi veramente fare il downgrade {} ?
manage_window.apps_table.row.actions.history=Cronologia
manage_window.apps_table.row.actions.ignore_updates=Ignore updates
manage_window.apps_table.row.actions.ignore_updates_reverse=Revert ignored updates
manage_window.apps_table.row.actions.info=Informazioni
manage_window.apps_table.row.actions.install=Installa
manage_window.apps_table.row.actions.install.popup.body=Installa {} nel tuo dispositivo ?
@@ -302,6 +308,8 @@ manage_window.settings.about=Informazione su
manage_window.status.downgrading=Downgrading
manage_window.status.filtering=Filtraggio
manage_window.status.history=Recupero della cronologia
manage_window.status.ignore_updates=Ignoring updates from {}
manage_window.status.ignore_updates_reverse=Reverting updates ignored from {}
manage_window.status.info=Recupero di informazioni
manage_window.status.installed=Loading installed
manage_window.status.installing=Installazione
@@ -382,6 +390,7 @@ version.latest=ultima versione
version.outdated=obsoleta
version.unknown=non informato
version.updated=aggiornata
version.updates_ignored=Updates ignored
view.components.file_chooser.placeholder=Fai clic qui per selezionare
warning=Avviso
warning.update_available=There is a new {} version available ({}). Check out the news at {}.

View File

@@ -57,6 +57,10 @@ action.disk_trim=Otimizando disco ( TRIM )
action.failed=Ação falhou
action.history.no_history.body=Não existe histórico disponível para {}
action.history.no_history.title=Sem histórico
action.ignore_updates.fail=Não foi possível ignorar as atualizações de {}
action.ignore_updates.success=As atualizações de {} serão ignoradas a partir de agora
action.ignore_updates_reverse.fail=Não foi possível reverter as atualizações ignoradas de {}
action.ignore_updates_reverse.success=As atualizações de {} serão exibidas novamente a partir de agora
action.info.tooltip=Clique aqui para ver informações sobre este aplicativo
action.not_allowed=Ação não permitida
action.request_reboot.title=Reinicialização de sistema
@@ -267,6 +271,8 @@ locale.tr=turco
manage_window.apps_table.row.actions.downgrade.popup.body=Você realmente quer reverter a versão atual de {} ?
manage_window.apps_table.row.actions.downgrade=Reverter versão
manage_window.apps_table.row.actions.history=Histórico
manage_window.apps_table.row.actions.ignore_updates=Ignorar atualizações
manage_window.apps_table.row.actions.ignore_updates_reverse=Reverter atualizações ignoradas
manage_window.apps_table.row.actions.info=Informação
manage_window.apps_table.row.actions.install.popup.body=Instalar {} no seu dispositivo ?
manage_window.apps_table.row.actions.install.popup.title=Instalação
@@ -300,6 +306,8 @@ manage_window.settings.about=Sobre
manage_window.status.downgrading=Revertendo
manage_window.status.filtering=Filtrando
manage_window.status.history=Obtendo histórico
manage_window.status.ignore_updates=Ignorando atualizações de {}
manage_window.status.ignore_updates_reverse=Revertendo atualizações ignoradas de {}
manage_window.status.info=Obtendo informação
manage_window.status.installed=Carregando instalados
manage_window.status.installing=Instalando
@@ -378,6 +386,7 @@ version.latest=versão mais recente
version.outdated=desatualizada
version.unknown=versão não informada
version.updated=atualizada
version.updates_ignored=Atualizações ignoradas
version=versão
view.components.file_chooser.placeholder=Clique aqui para selecionar
warning=aviso

View File

@@ -57,6 +57,10 @@ action.disk_trim.error=There was a problem while optimizing the disk
action.failed=Действие не удалось
action.history.no_history.body=There is no available history for {}
action.history.no_history.title=No history
action.ignore_updates.fail=It was not possible to ignore updates from {}
action.ignore_updates.success=Updates from {} will be ignored from now on
action.ignore_updates_reverse.fail=It was not possible to revert ignored updates from {}
action.ignore_updates_reverse.success=Updates from {} will be displayed again from now on
action.info.tooltip=Нажмите здесь, чтобы посмотреть информацию об этом приложении
action.not_allowed=Действие не допускается
action.request_reboot.title=System restart
@@ -267,6 +271,8 @@ locale.tr=Турецкий
manage_window.apps_table.row.actions.downgrade=Откат версии
manage_window.apps_table.row.actions.downgrade.popup.body=Вы действительно хотите откатить версию {}?
manage_window.apps_table.row.actions.history=История версий
manage_window.apps_table.row.actions.ignore_updates=Ignore updates
manage_window.apps_table.row.actions.ignore_updates_reverse=Revert ignored updates
manage_window.apps_table.row.actions.info=Информация
manage_window.apps_table.row.actions.install=Установка
manage_window.apps_table.row.actions.install.popup.body=Установить {} на Ваше устройство?
@@ -300,6 +306,8 @@ manage_window.settings.about=О программе
manage_window.status.downgrading=Откатить
manage_window.status.filtering=Фильтрация
manage_window.status.history=Извлечение истории
manage_window.status.ignore_updates=Ignoring updates from {}
manage_window.status.ignore_updates_reverse=Reverting updates ignored from {}
manage_window.status.info=Извлечение информации
manage_window.status.installed=Загрузка установленных
manage_window.status.installing=Установить
@@ -379,6 +387,7 @@ version.latest=Последняя версия
version.outdated=Устаревшая
version.unknown=не сообщать
version.updated=Обновленная
version.updates_ignored=Updates ignored
view.components.file_chooser.placeholder=Нажмите здесь, чтобы выбрать
warning=Предупреждение
warning.update_available=There is a new {} version available ({}). Check out the news at {}.

View File

@@ -57,6 +57,10 @@ action.disk_trim=Diski optimize etme ( TRIM )
action.failed=Eylem başarısız
action.history.no_history.body={} için kullanılabilir geçmiş yok
action.history.no_history.title=Geçmiş yok
action.ignore_updates.fail=It was not possible to ignore updates from {}
action.ignore_updates.success=Updates from {} will be ignored from now on
action.ignore_updates_reverse.fail=It was not possible to revert ignored updates from {}
action.ignore_updates_reverse.success=Updates from {} will be displayed again from now on
action.info.tooltip=Uygulama bilgilerini görmek için buraya tıkla
action.not_allowed=Eyleme izin verilmiyor
action.request_reboot.title=Sistemi yeniden başlat
@@ -267,6 +271,8 @@ locale.tr=türkçe
manage_window.apps_table.row.actions.downgrade.popup.body=Gerçekten sürüm düşürmek istiyor musunuz {} ?
manage_window.apps_table.row.actions.downgrade=Sürüm düşür
manage_window.apps_table.row.actions.history=Tarihçe
manage_window.apps_table.row.actions.ignore_updates=Ignore updates
manage_window.apps_table.row.actions.ignore_updates_reverse=Revert ignored updates
manage_window.apps_table.row.actions.info=Bilgilendirme
manage_window.apps_table.row.actions.install.popup.body={} Cihazınıza yüklensin mi ?
manage_window.apps_table.row.actions.install.popup.title=Kurulum
@@ -300,6 +306,8 @@ manage_window.settings.about=Hakkında
manage_window.status.downgrading=Düşürülüyor
manage_window.status.filtering=Filtreleniyor
manage_window.status.history=Geçmiş bilgisi alınıyor
manage_window.status.ignore_updates=Ignoring updates from {}
manage_window.status.ignore_updates_reverse=Reverting updates ignored from {}
manage_window.status.info=Bilgilendirme alınıyor
manage_window.status.installed=Yükleme tamamlandı
manage_window.status.installing=Yükleniyor
@@ -378,6 +386,7 @@ version.latest=son sürüm
version.outdated=güncel değil
version.unknown=bilgilendirilmemiş
version.updated=güncellendi
version.updates_ignored=Updates ignored
version=sürüm
view.components.file_chooser.placeholder=Seçmek için buraya tıkla
warning=uyarı

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB