Package: release.debian.org
Severity: normal
User: release.debian....@packages.debian.org
Usertags: unblock
X-Debbugs-Cc: safee...@packages.debian.org
Control: affects -1 + src:safeeyes

Please unblock package safeeyes

[ Reason ]
The version of safeeyes in testing is very broken: (i) it
does not appear in the notification bar for (at least) KDE/Plasma and
XFCE4, making it impossible to control or defer (bug #1006942, though
for some reason that bug was not recorded as RC); (ii) it fails to
load any plugins with Python 3.11, meaning that it fails to function
correctly (most of the package runs via a plugins mechanism, loading
internal plugins; bug #1033106).

Unfortunately, though, I wasn't thinking clearly when I uploaded, and
the diff is rather bigger than it ought to have been (though the vast
majority of it is translation updates).  I'll explain more below in
the "Other info" section.

[ Impact ]
The package will only lock the screen at the chosen intervals with no
ability to control it, defer it, take account of user idle time....

[ Tests ]
Unfortunately there are no autopkgtests in this package.  I did an NMU
for it recently, but have been happily running a local copy of my code
for several weeks.

[ Risks ]
It's a leaf package, and while the current diff is substantial (see
"Other info" below), the changes are all essentially trivial.

[ Checklist ]
  [x] all changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them
v  [x] attach debdiff against the package in testing

[ Other info ]
I fixed #1006942 by upgrading to a new upstream version.  Given that
it was targeted for bookworm, I should have cherry-picked the relevant
patch.  If this is deemed too much for bookworm, what would you
suggest to fix it?  Should I perhaps upload a version
2.1.5+really2.1.3-0.1 which only has cherry-picked patches?

To assist, here is a list of all changed files in the debdiff and
comments on them:

safeeyes-2.1.5/debian/changelog
safeeyes-2.1.5/debian/control

  This fixes the dependencies to match the packages currently in
  testing (gir1.2-appindicator3-0.1 is no longer present, and
  gir1.2-notify-0.7 is required for the notifications to work)

safeeyes-2.1.5/debian/patches/series
safeeyes-2.1.5/debian/patches/support-python311.patch

  These introduce a one-line patch for the Python 3.11 bug; I
  haven't included DEP-3 headers in this patch, but could do if you
  would like me to.

safeeyes-2.1.5/.github/FUNDING.yml
safeeyes-2.1.5/.github/ISSUE_TEMPLATE/bug_report.md
safeeyes-2.1.5/.github/ISSUE_TEMPLATE/feature_request.md
safeeyes-2.1.5/.github/ISSUE_TEMPLATE/plugin-request.md
safeeyes-2.1.5/.github/workflows/release.yml
safeeyes-2.1.5/.gitignore

  All of these are in the upstream version but it turns out weren't
  included in the previous Debian version.  None of them are used in the
  build or end up in the binary package.

safeeyes-2.1.5/LICENSE
safeeyes-2.1.5/README.md

  URLs updated to use https rather than http

safeeyes-2.1.5/safeeyes/config/locale/*/LC_MESSAGES/safeeyes.po

  Updated translation files (this accounts for most of the bulk of the
  debdiff)

safeeyes-2.1.5/safeeyes/glade/about_dialog.glade

  URLs changed from http to https, and version number update

safeeyes-2.1.5/safeeyes/__main__.py

  A safety check to prevent crashing in case locale does not support
  bindtextdomain (though why it would not, I don't know)

safeeyes-2.1.5/safeeyes/plugins/donotdisturb/plugin.py

  This is a small bug fix.

safeeyes-2.1.5/safeeyes/plugins/smartpause/dependency_checker.py
safeeyes-2.1.5/safeeyes/plugins/smartpause/plugin.py

  This is new code to support the "sway" desktop environment.

safeeyes-2.1.5/safeeyes/plugins/trayicon/plugin.py

  This is the code which fixes Debian bug #1006942

safeeyes-2.1.5/safeeyes/safeeyes.py

  Updated version number

safeeyes-2.1.5/safeeyes/utility.py

  Support "sawy"; new check for using Wayland

safeeyes-2.1.5/setup.py

  New version number

safeeyes-2.1.5/validate_po.py

  Unused script, not included in final binary package; presumably it
  is used by the developers to check the .po files are OK.

unblock safeeyes/2.1.5-0.1
diff -Nru safeeyes-2.1.3/debian/changelog safeeyes-2.1.5/debian/changelog
--- safeeyes-2.1.3/debian/changelog     2021-09-04 19:00:04.000000000 +0100
+++ safeeyes-2.1.5/debian/changelog     2023-03-24 12:32:08.000000000 +0000
@@ -1,3 +1,12 @@
+safeeyes (2.1.5-0.1) unstable; urgency=medium
+
+  * Non-maintainer upload
+  * New upstream version makes icon appear in KDE/Plasma and XFCE4 system
+    tray once again (Closes: #1006942)
+  * Support Python 3.11 (Closes: #1033106)
+
+ -- Julian Gilbey <j...@debian.org>  Fri, 24 Mar 2023 12:32:08 +0000
+
 safeeyes (2.1.3-1) unstable; urgency=medium
 
   * New upstream release
diff -Nru safeeyes-2.1.3/debian/control safeeyes-2.1.5/debian/control
--- safeeyes-2.1.3/debian/control       2021-09-04 19:00:04.000000000 +0100
+++ safeeyes-2.1.5/debian/control       2023-03-24 12:32:08.000000000 +0000
@@ -13,8 +13,8 @@
 
 Package: safeeyes
 Architecture: all
-Depends: ${misc:Depends}, ${python3:Depends}, python3-gi, python3-dbus, 
gir1.2-gtk-3.0
-Recommends: gir1.2-appindicator3-0.1, xprintidle
+Depends: ${misc:Depends}, ${python3:Depends}, python3-gi, python3-dbus, 
gir1.2-gtk-3.0, gir1.2-notify-0.7
+Recommends: gir1.2-ayatanaappindicator3-0.1, xprintidle
 Description: Protect your eyes from eye strain using this continuous breaks
  Safe Eyes is a simple tool to remind you to take periodic breaks for your
  eyes. This is essential for anyone spending more time on the computer to
diff -Nru safeeyes-2.1.3/debian/patches/series 
safeeyes-2.1.5/debian/patches/series
--- safeeyes-2.1.3/debian/patches/series        1970-01-01 01:00:00.000000000 
+0100
+++ safeeyes-2.1.5/debian/patches/series        2023-03-24 12:32:08.000000000 
+0000
@@ -0,0 +1 @@
+support-python311.patch
diff -Nru safeeyes-2.1.3/debian/patches/support-python311.patch 
safeeyes-2.1.5/debian/patches/support-python311.patch
--- safeeyes-2.1.3/debian/patches/support-python311.patch       1970-01-01 
01:00:00.000000000 +0100
+++ safeeyes-2.1.5/debian/patches/support-python311.patch       2023-03-24 
12:32:08.000000000 +0000
@@ -0,0 +1,11 @@
+--- a/safeeyes/utility.py
++++ b/safeeyes/utility.py
+@@ -666,7 +666,7 @@
+     Check whether the given function is defined in the module or not.
+     """
+     if hasattr(module, method_name):
+-        if len(inspect.getargspec(getattr(module, method_name)).args) == 
no_of_args:
++        if len(inspect.getfullargspec(getattr(module, method_name)).args) == 
no_of_args:
+             return True
+     return False
+ 
diff -Nru safeeyes-2.1.3/.github/FUNDING.yml safeeyes-2.1.5/.github/FUNDING.yml
--- safeeyes-2.1.3/.github/FUNDING.yml  1970-01-01 01:00:00.000000000 +0100
+++ safeeyes-2.1.5/.github/FUNDING.yml  2023-03-09 12:28:03.000000000 +0000
@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: slgobinath
+patreon: # Replace with a single Patreon username
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: # Replace with a single Tidelift platform-name/package-name e.g., 
npm/babel
+community_bridge: # Replace with a single Community Bridge project-name e.g., 
cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: 'https://www.paypal.com/paypalme/slgobinath'
diff -Nru safeeyes-2.1.3/.github/ISSUE_TEMPLATE/bug_report.md 
safeeyes-2.1.5/.github/ISSUE_TEMPLATE/bug_report.md
--- safeeyes-2.1.3/.github/ISSUE_TEMPLATE/bug_report.md 1970-01-01 
01:00:00.000000000 +0100
+++ safeeyes-2.1.5/.github/ISSUE_TEMPLATE/bug_report.md 2023-03-09 
12:28:03.000000000 +0000
@@ -0,0 +1,32 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title: ''
+labels: bug
+assignees: ''
+
+---
+
+**Describe the bug**
+A clear and concise description of what the bug is.
+
+**To Reproduce**
+Steps to reproduce the behavior:
+1. Go to '...'
+2. Click on '....'
+3. Scroll down to '....'
+4. See error
+
+**Expected behavior**
+A clear and concise description of what you expected to happen.
+
+**Desktop (please complete the following information):**
+ - OS: [e.g. Ubuntu 20.04, Manjaro]
+ - Desktop Env [e.g. Gnome, KDE]
+ - Version [e.g. 2.0.3]
+
+**Debug Log**
+Run the Safe Eyes using `safeeyes --debug` command attach the ~/safeeyes.log` 
file.
+
+**Screenshots**
+If applicable, add screenshots to help explain your problem.
diff -Nru safeeyes-2.1.3/.github/ISSUE_TEMPLATE/feature_request.md 
safeeyes-2.1.5/.github/ISSUE_TEMPLATE/feature_request.md
--- safeeyes-2.1.3/.github/ISSUE_TEMPLATE/feature_request.md    1970-01-01 
01:00:00.000000000 +0100
+++ safeeyes-2.1.5/.github/ISSUE_TEMPLATE/feature_request.md    2023-03-09 
12:28:03.000000000 +0000
@@ -0,0 +1,20 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+title: ''
+labels: feature
+assignees: ''
+
+---
+
+**Is your feature request related to a problem? Please describe.**
+A clear and concise description of what the problem is. Ex. I'm always 
frustrated when [...]
+
+**Describe the solution you'd like**
+A clear and concise description of what you want to happen.
+
+**Describe alternatives you've considered**
+A clear and concise description of any alternative solutions or features 
you've considered.
+
+**Additional context**
+Add any other context or screenshots about the feature request here.
diff -Nru safeeyes-2.1.3/.github/ISSUE_TEMPLATE/plugin-request.md 
safeeyes-2.1.5/.github/ISSUE_TEMPLATE/plugin-request.md
--- safeeyes-2.1.3/.github/ISSUE_TEMPLATE/plugin-request.md     1970-01-01 
01:00:00.000000000 +0100
+++ safeeyes-2.1.5/.github/ISSUE_TEMPLATE/plugin-request.md     2023-03-09 
12:28:03.000000000 +0000
@@ -0,0 +1,20 @@
+---
+name: Plugin request
+about: Suggest an idea for a plugin
+title: ''
+labels: plugin
+assignees: ''
+
+---
+
+**Is your plugin request related to a problem? Please describe.**
+A clear and concise description of what the problem is. Ex. I'm always 
frustrated when [...]
+
+**Describe the plugin you'd like**
+A clear and concise description of what you want to happen.
+
+**Describe alternatives you've considered**
+A clear and concise description of any alternative solutions or features 
you've considered.
+
+**Additional context**
+Add any other context or screenshots about the feature request here.
diff -Nru safeeyes-2.1.3/.github/workflows/release.yml 
safeeyes-2.1.5/.github/workflows/release.yml
--- safeeyes-2.1.3/.github/workflows/release.yml        1970-01-01 
01:00:00.000000000 +0100
+++ safeeyes-2.1.5/.github/workflows/release.yml        2023-03-09 
12:28:03.000000000 +0000
@@ -0,0 +1,67 @@
+name: Release
+on:
+  push:
+    branches: [ release ]
+
+jobs:
+  release:
+    name: Release
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v3
+        with:
+          fetch-depth: 0
+          token: ${{ secrets.GH_API_SECRET }}
+
+      - name: Set up Python 3.10
+        uses: actions/setup-python@v3
+        with:
+          python-version: "3.10"
+
+      - name: Install dependencies
+        run: |
+          python -m pip install --upgrade pip
+          pip install build
+
+      - name: Get Current Version
+        run: |
+          project_version=$(python3 setup.py --version)
+          echo "project_version=$project_version" >> $GITHUB_OUTPUT
+        id: get_current_version
+
+      - name: Create Tag
+        uses: mathieudutour/github-tag-action@v6.1
+        with:
+          custom_tag: "v${{steps.get_current_version.outputs.project_version}}"
+          github_token: ${{ secrets.GH_API_SECRET }}
+
+      - name: Build Changelog
+        id: build_changelog
+        uses: mikepenz/release-changelog-builder-action@v3.4.0
+        env:
+          GITHUB_TOKEN: ${{ secrets.GH_API_SECRET }}
+
+      - name: Create Release
+        uses: softprops/action-gh-release@v1
+        with:
+          tag_name: 'v${{steps.get_current_version.outputs.project_version}}'
+          body: ${{steps.build_changelog.outputs.changelog}}
+          token: ${{ secrets.GH_API_SECRET }}
+
+      - name: Build Python Package
+        run: rm -Rf build *.egg-info/ && python3 setup.py sdist bdist_wheel
+
+      - name: Publish to PyPi
+        uses: pypa/gh-action-pypi-publish@v1.6.4
+        with:
+          password: ${{ secrets.PYPI_API_TOKEN }}
+
+      - name: Sync Release with Master
+        run: |
+          git fetch origin
+          git checkout release
+          git pull origin release
+          git checkout master
+          git pull origin master
+          git merge release --ff-only
+          git push origin master
diff -Nru safeeyes-2.1.3/.gitignore safeeyes-2.1.5/.gitignore
--- safeeyes-2.1.3/.gitignore   1970-01-01 01:00:00.000000000 +0100
+++ safeeyes-2.1.5/.gitignore   2023-03-09 12:28:03.000000000 +0000
@@ -0,0 +1,116 @@
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Glade temporary files
+*.glade~
+
+# Distribution / packaging
+.Python
+env/
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+
+# PyInstaller
+#  Usually these files are written by a python script from a template
+#  before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*,cover
+.hypothesis/
+
+# Translations
+*.mo
+# *.pot
+
+# Django stuff:
+*.log
+local_settings.py
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# pyenv
+.python-version
+
+# celery beat schedule file
+celerybeat-schedule
+
+# SageMath parsed files
+*.sage.py
+
+# dotenv
+.env
+
+# virtualenv
+.venv
+venv/
+ENV/
+
+# Spyder project settings
+.spyderproject
+
+# Rope project settings
+.ropeproject
+
+# Visual Studio Code settings
+.vscode/
+
+safeeyes/config/locale/*/LC_MESSAGES/safeeyes.po~
+
+node_modules/
+
+# PyCharm
+.idea
+
+# Debian Build
+.pybuild/
+debian/safeeyes
+debian/.debhelper
+debian/files
+debian/safeeyes.substvars
+debian/safeeyes.prerm.debhelper
+debian/safeeyes.postinst.debhelper
\ No newline at end of file
diff -Nru safeeyes-2.1.3/LICENSE safeeyes-2.1.5/LICENSE
--- safeeyes-2.1.3/LICENSE      2021-09-04 18:58:52.000000000 +0100
+++ safeeyes-2.1.5/LICENSE      2023-03-09 12:28:03.000000000 +0000
@@ -1,7 +1,7 @@
                     GNU GENERAL PUBLIC LICENSE
                        Version 3, 29 June 2007
 
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
 
@@ -645,7 +645,7 @@
     GNU General Public License for more details.
 
     You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 Also add information on how to contact you by electronic and paper mail.
 
@@ -664,11 +664,11 @@
   You should also get your employer (if you work as a programmer) or school,
 if any, to sign a "copyright disclaimer" for the program, if necessary.
 For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
+<https://www.gnu.org/licenses/>.
 
   The GNU General Public License does not permit incorporating your program
 into proprietary programs.  If your program is a subroutine library, you
 may consider it more useful to permit linking proprietary applications with
 the library.  If this is what you want to do, use the GNU Lesser General
 Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+<https://www.gnu.org/philosophy/why-not-lgpl.html>.
diff -Nru safeeyes-2.1.3/README.md safeeyes-2.1.5/README.md
--- safeeyes-2.1.3/README.md    2021-09-04 18:58:52.000000000 +0100
+++ safeeyes-2.1.5/README.md    2023-03-09 12:28:03.000000000 +0000
@@ -10,7 +10,7 @@
 
 Protect your eyes from eye strain using this simple and beautiful, yet 
extensible break reminder.
 
-Visit the official site: http://slgobinath.github.io/SafeEyes/ for more 
details.
+Visit the official site: https://slgobinath.github.io/SafeEyes/ for more 
details.
 
 ## Safe Eyes command-line arguments
 
@@ -60,14 +60,6 @@
 ### Debian
 
 ```bash
-sudo apt-get install gir1.2-appindicator3-0.1 gir1.2-notify-0.7 python3-psutil 
python3-xlib xprintidle python3-pip python3-babel python3-croniter
-sudo pip3 install safeeyes
-sudo update-icon-caches /usr/share/icons/hicolor
-```
-
-People using unstable/testing Debian can install Safe Eyes from the official 
repository using the following command:
-
-```bash
 sudo apt-get install safeeyes
 ```
 
@@ -86,11 +78,17 @@
 sudo zypper install safeeyes
 ```
 
+### Alpine Linux
+
+```bash
+sudo apk add safeeyes
+```
+
 ### Other Linux & Run from source
 
 Ensure to meet the following dependencies:
 
-- gir1.2-appindicator3-0.1
+- gir1.2-appindicator3-0.1 or gir1.2-ayatanaappindicator3-0.1
 - gir1.2-notify-0.7
 - libappindicator-gtk3
 - python3-psutil
diff -Nru safeeyes-2.1.3/safeeyes/config/locale/ar/LC_MESSAGES/safeeyes.po 
safeeyes-2.1.5/safeeyes/config/locale/ar/LC_MESSAGES/safeeyes.po
--- safeeyes-2.1.3/safeeyes/config/locale/ar/LC_MESSAGES/safeeyes.po    
2021-09-04 18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/config/locale/ar/LC_MESSAGES/safeeyes.po    
2023-03-09 12:28:03.000000000 +0000
@@ -6,8 +6,8 @@
 msgstr ""
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-12-23 11:29+0000\n"
-"Last-Translator: Muhammad Hegab <mhe...@hotmail.com>\n"
+"PO-Revision-Date: 2022-05-24 17:15+0000\n"
+"Last-Translator: Mohamed Omran <mohamedgom...@gmail.com>\n"
 "Language-Team: Arabic <https://hosted.weblate.org/projects/safe-eyes/";
 "translations/ar/>\n"
 "Language: ar\n"
@@ -16,7 +16,7 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
 "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
-"X-Generator: Weblate 4.4.1-dev\n"
+"X-Generator: Weblate 4.13-dev\n"
 
 # Short break
 msgid "Tightly close your eyes"
@@ -72,7 +72,7 @@
 
 # Commandline arg description
 msgid "show the settings dialog"
-msgstr "أظهر مربع الإعدادات"
+msgstr "إظهار لوحة اﻹعدادات"
 
 # Commandline arg description
 msgid "start safeeyes in debug mode"
@@ -84,7 +84,7 @@
 
 # Status message
 msgid "Safe Eyes is not running"
-msgstr "SafeEyes غير مشغل"
+msgstr "SafeEyes لا يعمل"
 
 # RPC not enabled message
 msgid ""
@@ -137,7 +137,7 @@
 
 # Settings dialog
 msgid "Show breaks in random order"
-msgstr ""
+msgstr "اظهِّر الاستراحات بترتيب عشوائي"
 
 # Settings dialog
 msgid "Strict break (No way to skip breaks)"
@@ -274,7 +274,7 @@
 
 # Settings dialog
 msgid "Invalid cron expression '%s'"
-msgstr ""
+msgstr "تعبير الوظيفة المجدولة غير صحيح '%s'"
 
 # Settings dialog
 msgid "Please add the resource %(resource)s to %(config_resource)s directory"
@@ -290,7 +290,7 @@
 
 # Settings dialog
 msgid "Discard"
-msgstr "اترك"
+msgstr "تجاهل"
 
 # Settings dialog
 msgid "Save"
@@ -298,7 +298,7 @@
 
 # plugin/audiblealert
 msgid "Audible Alert"
-msgstr "تنبيه مسموع"
+msgstr "إنذار مسموع"
 
 # plugin/audiblealert
 msgid "Play audible alert before and after breaks"
@@ -346,7 +346,7 @@
 
 # plugin/healthstats
 msgid "Statistics reset interval (cron expression)"
-msgstr ""
+msgstr "فاصل إعادة ضبط الإحصائيات (تعبير وظيفة مجدولة)"
 
 # plugin/notification
 msgid "Notification"
@@ -366,55 +366,55 @@
 
 # plugin/screensaver
 msgid "Screensaver"
-msgstr ""
+msgstr "شاشة التوقف"
 
 # plugin/screensaver
 msgid "Lock the screen after long breaks by starting screensaver"
-msgstr ""
+msgstr "اغلق الشاشة بعد فترة استراحة طويلة عن طريق بدأ شاشة التوقف"
 
 # plugin/screensaver
 msgid "Custom screensaver command"
-msgstr ""
+msgstr "أمر شاشة التوقف مخصص"
 
 # plugin/screensaver
 msgid "Minimum seconds to skip without screensaver"
-msgstr ""
+msgstr "أقل عدد ثواني للتخطي بدون شاشة التوقف"
 
 # plugin/screensaver
 msgid "Lock screen"
-msgstr ""
+msgstr "اغلق الشاشة"
 
 # plugin/smartpause
 msgid "Smart Pause"
-msgstr ""
+msgstr "التوقف الذكي"
 
 # plugin/smartpause
 msgid "Pause Safe Eyes if the system is idle"
-msgstr ""
+msgstr "اوقف Safe Eyes إذا كان النظام خاملاً"
 
 # plugin/smartpause
 msgid "Minimum idle time to pause Safe Eyes (in seconds)"
-msgstr ""
+msgstr "أقل مدة خمول لإيقاف Safe Eyes (بالثوان)"
 
 # plugin/smartpause
 msgid "Interpret idle time equivalent to upcoming break duration as a break"
-msgstr ""
+msgstr "تفسير وقت الخمول المكافئ لفترة الاستراحة القادمة على أنه استراحة"
 
 # plugin/smartpause
 msgid "Postpone the next break until the system becomes idle"
-msgstr ""
+msgstr "اجًّل فترة الاستراحة القادمة حتى يصبح النظام خاملاً"
 
 #: plugins/trayicon
 msgid "Tray Icon"
-msgstr ""
+msgstr "الأيقونة"
 
 #: plugins/trayicon
 msgid "Show a tray icon in the notification area"
-msgstr ""
+msgstr "أظهِّر الأيقونة في منطقة الإشعارات"
 
 #: plugins/trayicon
 msgid "Show next break time in tray icon"
-msgstr ""
+msgstr "أظهِّر وقت الاستراحة القادمة في درج الأيقونة"
 
 #: plugins/trayicon
 msgid "Allow disabling Safe Eyes"
@@ -443,68 +443,68 @@
 #: plugins/trayicon
 msgid "For %d Hour"
 msgid_plural "For %d Hours"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-msgstr[4] ""
-msgstr[5] ""
+msgstr[0] "لمدة %d ساعة"
+msgstr[1] "لمدة ساعة"
+msgstr[2] "لمدة ساعتين"
+msgstr[3] "لمدة %d ساعات"
+msgstr[4] "لمدة %d ساعة"
+msgstr[5] "لمدة %d ساعة"
 
 #: plugins/trayicon
 msgid "For %d Minute"
 msgid_plural "For %d Minutes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-msgstr[4] ""
-msgstr[5] ""
+msgstr[0] "لمدة %d دقيقة"
+msgstr[1] "لمدة دقيقة"
+msgstr[2] "لمدة دقيقتين"
+msgstr[3] "لمدة %d دقائق"
+msgstr[4] "لمدة %d دقيقة"
+msgstr[5] "لمدة %d دقيقة"
 
 #: plugins/trayicon
 msgid "For %d Second"
 msgid_plural "For %d Seconds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-msgstr[4] ""
-msgstr[5] ""
+msgstr[0] "لمدة %d ثانية"
+msgstr[1] "لمدة ثانية"
+msgstr[2] "لمدة ثانيتين"
+msgstr[3] "لمدة %d ثوان"
+msgstr[4] "لمدة %d ثانية"
+msgstr[5] "لمدة %d ثانية"
 
 #: plugins/trayicon
 msgid "Next break at %s"
-msgstr ""
+msgstr "فترة الاستراحة القادمة بعد %s"
 
 #: plugins/trayicon
 msgid "No Breaks Available"
-msgstr ""
+msgstr "لا يوجد فترات استراحة متاحة"
 
 #: plugins/trayicon
 msgid "Settings"
-msgstr ""
+msgstr "الإعدادات"
 
 #: plugins/trayicon
 msgid "Take a break now"
-msgstr ""
+msgstr "خُذ استراحة الآن"
 
 #: plugins/trayicon
 msgid "Until restart"
-msgstr ""
+msgstr "حتى إعادة التشغيل"
 
 #: plugins/trayicon
 msgid "Quit"
-msgstr ""
+msgstr "اخرج"
 
 # plugin/mediacontrol
 msgid "Media Control"
-msgstr ""
+msgstr "تحكم الوسائط"
 
 # plugin/mediacontrol
 msgid "Pause media players from the break screen"
-msgstr ""
+msgstr "أوقِف مشغلات الوسائط في شاشة فترة الاستراحة"
 
 # plugin/mediacontrol
 msgid "Pause media"
-msgstr ""
+msgstr "أوقِف الوسائط"
 
 # plugin/healthstats
 #~ msgid "Interval to reset statistics (in hours)"
diff -Nru safeeyes-2.1.3/safeeyes/config/locale/ca/LC_MESSAGES/safeeyes.po 
safeeyes-2.1.5/safeeyes/config/locale/ca/LC_MESSAGES/safeeyes.po
--- safeeyes-2.1.3/safeeyes/config/locale/ca/LC_MESSAGES/safeeyes.po    
2021-09-04 18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/config/locale/ca/LC_MESSAGES/safeeyes.po    
2023-03-09 12:28:03.000000000 +0000
@@ -6,8 +6,8 @@
 msgstr ""
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2018-02-01 11:34+0000\n"
-"Last-Translator: Joan Montané <j...@montane.cat>\n"
+"PO-Revision-Date: 2022-08-08 21:25+0000\n"
+"Last-Translator: calbasi <j...@calbasi.net>\n"
 "Language-Team: Catalan <https://hosted.weblate.org/projects/safe-eyes/";
 "translations/ca/>\n"
 "Language: ca\n"
@@ -15,7 +15,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 2.19-dev\n"
+"X-Generator: Weblate 4.14-dev\n"
 
 # Short break
 msgid "Tightly close your eyes"
@@ -55,31 +55,31 @@
 
 # Commandline arg description
 msgid "show the about dialog"
-msgstr ""
+msgstr "Mostra la informació Naltros"
 
 # Commandline arg description
 msgid "disable the currently running safeeyes instance"
-msgstr ""
+msgstr "Inhabilita la instància de safeeyes en funcionament"
 
 # Commandline arg description
 msgid "enable the currently running safeeyes instance"
-msgstr ""
+msgstr "Habilita la instància de safeeyes en funcionament"
 
 # Commandline arg description
 msgid "quit the running safeeyes instance and exit"
-msgstr ""
+msgstr "Tanca de la instància de safeeyes en funcionament i surt"
 
 # Commandline arg description
 msgid "show the settings dialog"
-msgstr ""
+msgstr "Mostra la finestra de preferències"
 
 # Commandline arg description
 msgid "start safeeyes in debug mode"
-msgstr ""
+msgstr "Inicia safeeyes en mode de depuració"
 
 # Commandline arg description
 msgid "print the status of running safeeyes instance and exit"
-msgstr ""
+msgstr "Mostra l'estat de la instància de safeeyes en funcionament i surt"
 
 # Status message
 msgid "Safe Eyes is not running"
@@ -139,11 +139,11 @@
 
 # Settings dialog
 msgid "Show breaks in random order"
-msgstr ""
+msgstr "Mostra les pauses en ordre aleatori"
 
 # Settings dialog
 msgid "Strict break (No way to skip breaks)"
-msgstr ""
+msgstr "Pauses estrictes (sense possibilitat de saltar-se-les)"
 
 # Settings dialog
 msgid "Allow postponing breaks"
@@ -167,99 +167,99 @@
 
 # Settings dialog
 msgid "Reset"
-msgstr ""
+msgstr "Restablir"
 
 # Settings dialog
 msgid "Are you sure you want to reset all settings to default?"
-msgstr ""
+msgstr "De veritat que voleu restablir les preferències als valors per 
defecte?"
 
 # Settings dialog
 msgid "Options"
-msgstr ""
+msgstr "Opcions"
 
 # Settings dialog
 msgid "Short Breaks"
-msgstr ""
+msgstr "Pauses curtes"
 
 # Settings dialog
 msgid "Long Breaks"
-msgstr ""
+msgstr "Pauses llargues"
 
 # Settings dialog
 msgid "Delete"
-msgstr ""
+msgstr "Suprimeix"
 
 # Settings dialog
 msgid "Are you sure you want to delete this break?"
-msgstr ""
+msgstr "De veritat que voleu suprimir aquesta pausa?"
 
 # Settings dialog
 msgid "You can't undo this action."
-msgstr ""
+msgstr "Aquesta acció no podrà revertir-se."
 
 # Settings dialog
 msgid "Break"
-msgstr ""
+msgstr "Pausa"
 
 # Settings dialog
 msgid "Breaks"
-msgstr ""
+msgstr "Pauses"
 
 # Settings dialog
 msgid "Plugins"
-msgstr ""
+msgstr "Complements"
 
 # Settings dialog
 msgid "Type"
-msgstr ""
+msgstr "Tipus"
 
 # Settings dialog
 msgid "Short"
-msgstr ""
+msgstr "Curta"
 
 # Settings dialog
 msgid "Long"
-msgstr ""
+msgstr "Llarga"
 
 # Settings dialog
 msgid "Image"
-msgstr ""
+msgstr "Imatge"
 
 # Settings dialog
 msgid "Select"
-msgstr ""
+msgstr "Trieu"
 
 # Settings dialog
 msgid "Please select an image"
-msgstr ""
+msgstr "Si us plau, trieu una imatge"
 
 # Settings dialog
 msgid "Duration"
-msgstr ""
+msgstr "Durada"
 
 # Settings dialog
 msgid "Time to wait"
-msgstr ""
+msgstr "Temps d'espera"
 
 # Settings dialog
 msgid "Override"
-msgstr ""
+msgstr "Sobreescriu"
 
 # Settings dialog
 msgid "Time (in seconds)"
-msgstr ""
+msgstr "Temps (en segons)"
 
 # Settings dialog
 msgid "Time (in minutes)"
-msgstr ""
+msgstr "Temps (en minuts)"
 
 # Settings dialog
 msgid "Break Settings"
-msgstr ""
+msgstr "Preferències de la pausa"
 
 # Settings dialog
 msgid "Plugin Settings"
-msgstr ""
+msgstr "Preferències del complement"
 
 # Settings dialog
 msgid "Plugin does not support %s desktop environment"
@@ -283,15 +283,15 @@
 
 # Settings dialog
 msgid "New Break"
-msgstr ""
+msgstr "Nova Pausa"
 
 # Settings dialog
 msgid "Remove"
-msgstr ""
+msgstr "Suprimeix"
 
 # Settings dialog
 msgid "Discard"
-msgstr ""
+msgstr "Descarta-ho"
 
 # Settings dialog
 msgid "Save"
@@ -299,7 +299,7 @@
 
 # plugin/audiblealert
 msgid "Audible Alert"
-msgstr ""
+msgstr "Alerta audible"
 
 # plugin/audiblealert
 msgid "Play audible alert before and after breaks"
@@ -315,7 +315,7 @@
 
 # plugin/donotdisturb
 msgid "Do Not Disturb"
-msgstr ""
+msgstr "No molesteu"
 
 # plugin/donotdisturb
 msgid "Skip break if the active window is in fullscreen mode"
@@ -339,7 +339,7 @@
 
 # plugin/healthstats
 msgid "Health Statistics"
-msgstr ""
+msgstr "Estadístiques de salut"
 
 # plugin/healthstats
 msgid "Show statistics based on how you use Safe Eyes"
diff -Nru safeeyes-2.1.3/safeeyes/config/locale/cs/LC_MESSAGES/safeeyes.po 
safeeyes-2.1.5/safeeyes/config/locale/cs/LC_MESSAGES/safeeyes.po
--- safeeyes-2.1.3/safeeyes/config/locale/cs/LC_MESSAGES/safeeyes.po    
2021-09-04 18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/config/locale/cs/LC_MESSAGES/safeeyes.po    
2023-03-09 12:28:03.000000000 +0000
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2019-11-26 16:05+0000\n"
+"PO-Revision-Date: 2022-03-06 20:59+0000\n"
 "Last-Translator: Pavel Borecki <pavel.bore...@gmail.com>\n"
 "Language-Team: Czech <https://hosted.weblate.org/projects/safe-eyes/";
 "translations/cs/>\n"
@@ -15,7 +15,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: Weblate 3.10-dev\n"
+"X-Generator: Weblate 4.12-dev\n"
 
 # Short break
 msgid "Tightly close your eyes"
@@ -140,7 +140,7 @@
 
 # Settings dialog
 msgid "Show breaks in random order"
-msgstr ""
+msgstr "Zobrazovat přestávky v náhodném pořadí"
 
 # Settings dialog
 msgid "Strict break (No way to skip breaks)"
@@ -276,7 +276,7 @@
 
 # Settings dialog
 msgid "Invalid cron expression '%s'"
-msgstr ""
+msgstr "Neplatný výraz pro plánovač (cron) „%s“"
 
 # Settings dialog
 msgid "Please add the resource %(resource)s to %(config_resource)s directory"
@@ -349,7 +349,7 @@
 
 # plugin/healthstats
 msgid "Statistics reset interval (cron expression)"
-msgstr ""
+msgstr "Interval vynulování statistik (výraz pro plánovač cron)"
 
 # plugin/notification
 msgid "Notification"
diff -Nru safeeyes-2.1.3/safeeyes/config/locale/en_US/LC_MESSAGES/safeeyes.po 
safeeyes-2.1.5/safeeyes/config/locale/en_US/LC_MESSAGES/safeeyes.po
--- safeeyes-2.1.3/safeeyes/config/locale/en_US/LC_MESSAGES/safeeyes.po 
2021-09-04 18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/config/locale/en_US/LC_MESSAGES/safeeyes.po 
2023-03-09 12:28:03.000000000 +0000
@@ -6,8 +6,8 @@
 msgstr ""
 "Project-Id-Version: \n"
 "POT-Creation-Date: 2017-09-17 07:59-0400\n"
-"PO-Revision-Date: 2020-06-17 18:41+0000\n"
-"Last-Translator: Aanand Kainth <akainth...@gmail.com>\n"
+"PO-Revision-Date: 2021-07-04 07:32+0000\n"
+"Last-Translator: J. Lavoie <j.lav...@net-c.ca>\n"
 "Language-Team: English (United States) <https://hosted.weblate.org/projects/";
 "safe-eyes/translations/en_US/>\n"
 "Language: en_US\n"
@@ -15,7 +15,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.1.1-dev\n"
+"X-Generator: Weblate 4.8-dev\n"
 "Generated-By: pygettext.py 1.5\n"
 
 # Short break
@@ -277,7 +277,7 @@
 
 # Settings dialog
 msgid "Invalid cron expression '%s'"
-msgstr ""
+msgstr "Invalid cron expression “%s”"
 
 # Settings dialog
 msgid "Please add the resource %(resource)s to %(config_resource)s directory"
diff -Nru safeeyes-2.1.3/safeeyes/config/locale/eo/LC_MESSAGES/safeeyes.po 
safeeyes-2.1.5/safeeyes/config/locale/eo/LC_MESSAGES/safeeyes.po
--- safeeyes-2.1.3/safeeyes/config/locale/eo/LC_MESSAGES/safeeyes.po    
2021-09-04 18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/config/locale/eo/LC_MESSAGES/safeeyes.po    
2023-03-09 12:28:03.000000000 +0000
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: \n"
 "POT-Creation-Date: 2017-09-17 07:59-0400\n"
-"PO-Revision-Date: 2021-02-10 15:50+0000\n"
+"PO-Revision-Date: 2021-05-21 15:32+0000\n"
 "Last-Translator: Jorge Maldonado Ventura <jorgesu...@freakspot.net>\n"
 "Language-Team: Esperanto <https://hosted.weblate.org/projects/safe-eyes/";
 "translations/eo/>\n"
@@ -15,7 +15,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.5-dev\n"
+"X-Generator: Weblate 4.7-dev\n"
 "Generated-By: pygettext.py 1.5\n"
 
 # Short break
@@ -44,7 +44,7 @@
 
 # Short break
 msgid "Have some water"
-msgstr "Trinku kelke da akvon"
+msgstr "Trinku kelke da akvo"
 
 # Long break
 msgid "Walk for a while"
diff -Nru safeeyes-2.1.3/safeeyes/config/locale/eu/LC_MESSAGES/safeeyes.po 
safeeyes-2.1.5/safeeyes/config/locale/eu/LC_MESSAGES/safeeyes.po
--- safeeyes-2.1.3/safeeyes/config/locale/eu/LC_MESSAGES/safeeyes.po    
2021-09-04 18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/config/locale/eu/LC_MESSAGES/safeeyes.po    
2023-03-09 12:28:03.000000000 +0000
@@ -6,8 +6,8 @@
 msgstr ""
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-04-15 12:26+0000\n"
-"Last-Translator: Porrumentzio <porrument...@riseup.net>\n"
+"PO-Revision-Date: 2022-09-28 22:17+0000\n"
+"Last-Translator: Gontzal Manuel Pujana Onaindia <thadahden...@gmail.com>\n"
 "Language-Team: Basque <https://hosted.weblate.org/projects/safe-eyes/";
 "translations/eu/>\n"
 "Language: eu\n"
@@ -15,7 +15,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.6-dev\n"
+"X-Generator: Weblate 4.14.1\n"
 
 # Short break
 msgid "Tightly close your eyes"
@@ -400,11 +400,10 @@
 msgstr "Safe Eyes pausatzeko gutxieneko denbora inaktiboa (segundotan)"
 
 # plugin/smartpause
-#, fuzzy
 msgid "Interpret idle time equivalent to upcoming break duration as a break"
 msgstr ""
-"Interpretatu denbora inaktiboa hurrengo atsedenaldiaren iraupenaren "
-"baliokide, atsedenaldi gisa"
+"Interpretatu hurrengo atsedenaldiaren iraupenaren baliokidea den denbora "
+"inaktiboa atsedenaldi gisa"
 
 # plugin/smartpause
 msgid "Postpone the next break until the system becomes idle"
@@ -449,19 +448,19 @@
 #: plugins/trayicon
 msgid "For %d Hour"
 msgid_plural "For %d Hours"
-msgstr[0] "Ordubeterako"
+msgstr[0] "Ordu %derako"
 msgstr[1] "%d ordurako"
 
 #: plugins/trayicon
 msgid "For %d Minute"
 msgid_plural "For %d Minutes"
-msgstr[0] "Minutu baterako"
+msgstr[0] "Minutu %derako"
 msgstr[1] "%d minuturako"
 
 #: plugins/trayicon
 msgid "For %d Second"
 msgid_plural "For %d Seconds"
-msgstr[0] "Segundo baterako"
+msgstr[0] "Segundo %derako"
 msgstr[1] "%d segundorako"
 
 #: plugins/trayicon
diff -Nru safeeyes-2.1.3/safeeyes/config/locale/fa/LC_MESSAGES/safeeyes.po 
safeeyes-2.1.5/safeeyes/config/locale/fa/LC_MESSAGES/safeeyes.po
--- safeeyes-2.1.3/safeeyes/config/locale/fa/LC_MESSAGES/safeeyes.po    
2021-09-04 18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/config/locale/fa/LC_MESSAGES/safeeyes.po    
2023-03-09 12:28:03.000000000 +0000
@@ -6,8 +6,8 @@
 msgstr ""
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-10-23 17:20+0000\n"
-"Last-Translator: mohammadbagher fakouri <mbfakou...@gmail.com>\n"
+"PO-Revision-Date: 2022-07-07 10:18+0000\n"
+"Last-Translator: Danial Behzadi <dani.be...@ubuntu.com>\n"
 "Language-Team: Persian <https://hosted.weblate.org/projects/safe-eyes/";
 "translations/fa/>\n"
 "Language: fa\n"
@@ -15,7 +15,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.3.1\n"
+"X-Generator: Weblate 4.13.1-dev\n"
 
 # Short break
 msgid "Tightly close your eyes"
@@ -27,11 +27,11 @@
 
 # Short break
 msgid "Rotate your eyes in clockwise direction"
-msgstr "چشمان خود را در جهت عقربه های ساعت بچرخانید"
+msgstr "چشمانتان را ساعتگرد بچرخانید"
 
 # Short break
 msgid "Rotate your eyes in counterclockwise direction"
-msgstr "چشم هایتان را در خلاف جهت عقربه های ساعت بچرخانید"
+msgstr "چشمانتان را پادساعتگرد بچرخانید"
 
 # Short break
 msgid "Blink your eyes"
@@ -59,39 +59,39 @@
 
 # Commandline arg description
 msgid "disable the currently running safeeyes instance"
-msgstr "غیرفعال کردن نمونه safeeyes درحال اجرا"
+msgstr "از کار انداختن نمونهٔ محافظ چشم در حال اجرا"
 
 # Commandline arg description
 msgid "enable the currently running safeeyes instance"
-msgstr "فعال کردن نمونه safeeyes درحال اجرا"
+msgstr "به کار انداختن نمونهٔ محافظ چشم در حال اجرا"
 
 # Commandline arg description
 msgid "quit the running safeeyes instance and exit"
-msgstr "بستن و خروج از safeeyes در حال اجرا"
+msgstr "بستن و خروج از نمونهٔ محافظ چشم در حال اجرا"
 
 # Commandline arg description
 msgid "show the settings dialog"
-msgstr "نشان دادن پنجره تنظیمات"
+msgstr "نمایش گفت‌وگوی تنظیمات"
 
 # Commandline arg description
 msgid "start safeeyes in debug mode"
-msgstr "اجرا کردن safeeyes در حالت دیباگ"
+msgstr "اجرای محافظ چشم در حالت رفع اشکال"
 
 # Commandline arg description
 msgid "print the status of running safeeyes instance and exit"
-msgstr "وضعیت اجرای safeeyes را چاپ کرده و از آن خارج شوید"
+msgstr "چاپ وضعیت نمونهٔ محافظ چشم در جال اجرا و خروج"
 
 # Status message
 msgid "Safe Eyes is not running"
-msgstr "محافظ چشم در حال اجرا نیست"
+msgstr "محافظ چشم اجرا نمی‌شود"
 
 # RPC not enabled message
 msgid ""
 "Safe Eyes is running without an RPC server. Turn it on to use command-line "
 "arguments."
 msgstr ""
-"Safe Eyes بدون سرور RPC در حال اجرا است. برای استفاده از آرگومان های خط "
-"فرمان آن را روشن کنید."
+"محافظ چشم دارد بدون کارساز RPC اجرا می‌شود. برای استفاده از آرگومان‌های خط "
+"فرمان، روشنش کنید."
 
 # About dialog
 msgid "Close"
@@ -102,19 +102,21 @@
 msgid ""
 "Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you "
 "to take breaks while you're working long hours at the computer"
-msgstr "شرح"
+msgstr ""
+"محافظ چشم با یادآوردی استراحت هنگام کار طولانی با رایانه، از چشمانتان در "
+"برابر خشتگی جشم (استنوپیا) محافظت می‌کند"
 
 # About dialog
 msgid "License"
-msgstr "مجوز"
+msgstr "پروانه"
 
 # Break screen
 msgid "Skip"
-msgstr "رد کردن"
+msgstr "پرش"
 
 # Break screen
 msgid "Postpone"
-msgstr "بعدا"
+msgstr "تعویق"
 
 # Settings dialog
 msgid "Break duration (in seconds)"
@@ -122,31 +124,31 @@
 
 # Settings dialog
 msgid "Interval between two breaks (in minutes)"
-msgstr "بازه بین دو استراحت (به دقیقه)"
+msgstr "بازهٔ بین دو استراحت (به دقیقه)"
 
 # Settings dialog
 msgid "Time to prepare for a break (in seconds)"
-msgstr "زمان آماده شدن برای استراحت (در چند ثانیه)"
+msgstr "زمان آمادگی برای استراحت (به ثانیه)"
 
 # Settings dialog
 msgid "Keyboard shortcuts disabled period (in seconds)"
-msgstr "میانبرهای صفحه کلید دوره غیرفعال شده (در چند ثانیه)"
+msgstr "دورهٔ از کار افتادن میان‌برهای صفحه کلید (به ثانیه)"
 
 # Settings dialog
 msgid "Postponement duration (in minutes)"
-msgstr "به تعویق انداختن مدت زمان (در چند دقیقه)"
+msgstr "زمان تعویق (به دقیقه)"
 
 # Settings dialog
 msgid "Show breaks in random order"
-msgstr ""
+msgstr "نمایش استراحت‌ها به ترتیب کاتوره‌ای"
 
 # Settings dialog
 msgid "Strict break (No way to skip breaks)"
-msgstr "استراحت سخت (راهی برای جستجوی وقفه وجود ندارد)"
+msgstr "استراحت قاطع ( بدون راهی برای پرش از استراحت)"
 
 # Settings dialog
 msgid "Allow postponing breaks"
-msgstr "به تعویق انداختن وقفه ها اجازه دهید"
+msgstr "اجازه به تعویق استراحت‌ها"
 
 # Settings dialog
 msgid "Persist the internal state"
@@ -154,36 +156,35 @@
 
 # Settings dialog
 msgid "Use RPC server to receive runtime commands"
-msgstr "برای دریافت دستورات زمان اجرا از سرور RPC استفاده کنید"
+msgstr "استفاده از کارساز RPC برای دریافت دستورات زمان اجرا"
 
 # Settings dialog
 msgid "Without the RPC server, command-line commands may not work"
-msgstr "بدون سرور RPC ، دستورات خط فرمان ممکن است کار نکنند"
+msgstr "بدون کارساز RPC ممکن است دستورات خط فرمان نکنند"
 
 # Settings dialog
 msgid "Long break interval must be a multiple of short break interval"
-msgstr "فاصله زمانی طولانی باید مضربی از وقفه کوتاه باشد"
+msgstr "دورهٔ استراحت طولانی باید مضربی از دوره‌های استراحت کوتاه باشد"
 
 # Settings dialog
 msgid "Reset"
-msgstr "تنظیم مجدد"
+msgstr "بازنشانی"
 
 # Settings dialog
 msgid "Are you sure you want to reset all settings to default?"
-msgstr ""
-"آیا مطمئن هستید که می خواهید همه تنظیمات را به حالت پیش فرض بازنشانی کنید؟"
+msgstr "مطمئنید که می‌خواهید تمامی تنظیمات را به پیش‌گزیده بازنشانی کنید؟"
 
 # Settings dialog
 msgid "Options"
-msgstr "گزینه ها"
+msgstr "گزینه‌ها"
 
 # Settings dialog
 msgid "Short Breaks"
-msgstr "وقفه های کوتاه"
+msgstr "استراحت‌های کوتاه"
 
 # Settings dialog
 msgid "Long Breaks"
-msgstr "وقفه های طولانی"
+msgstr "استراحت‌های طولانی"
 
 # Settings dialog
 msgid "Delete"
@@ -191,7 +192,7 @@
 
 # Settings dialog
 msgid "Are you sure you want to delete this break?"
-msgstr "آیا مطمئن هستید که می خواهید این وقفه را حذف کنید؟"
+msgstr "مطمئنید که می‌خواهید این استراحت را حذف کنید؟"
 
 # Settings dialog
 msgid "You can't undo this action."
@@ -203,15 +204,15 @@
 
 # Settings dialog
 msgid "Breaks"
-msgstr "می شکند"
+msgstr "استراحت‌ها"
 
 # Settings dialog
 msgid "Plugins"
-msgstr "پلاگین ها"
+msgstr "افزایه‌ها"
 
 # Settings dialog
 msgid "Type"
-msgstr "نوع"
+msgstr "گونه"
 
 # Settings dialog
 msgid "Short"
@@ -227,59 +228,59 @@
 
 # Settings dialog
 msgid "Select"
-msgstr "انتخاب کنید"
+msgstr "گزینش"
 
 # Settings dialog
 msgid "Please select an image"
-msgstr "لطفاً تصویری انتخاب کنید"
+msgstr "لطفاً تصویری برگزینید"
 
 # Settings dialog
 msgid "Duration"
-msgstr "مدت زمان"
+msgstr "طول"
 
 # Settings dialog
 msgid "Time to wait"
-msgstr "وقت انتظار است"
+msgstr "زمان انتظار"
 
 # Settings dialog
 msgid "Override"
-msgstr "لغو کردن"
+msgstr "پایمالی"
 
 # Settings dialog
 msgid "Time (in seconds)"
-msgstr "زمان (در چند ثانیه)"
+msgstr "زمان (به ثانیه)"
 
 # Settings dialog
 msgid "Time (in minutes)"
-msgstr "زمان (در چند دقیقه)"
+msgstr "زمان (به دقیقه)"
 
 # Settings dialog
 msgid "Break Settings"
-msgstr "شکستن تنظیمات"
+msgstr "تنظیمات استراحت"
 
 # Settings dialog
 msgid "Plugin Settings"
-msgstr "تنظیمات پلاگین"
+msgstr "تنظیمات افزایه"
 
 # Settings dialog
 msgid "Plugin does not support %s desktop environment"
-msgstr "پلاگین پشتیبانی نمی کند %s محیط دسک تاپ"
+msgstr "افزایه از محیط میزکار %s پشتیبانی نمی‌کند"
 
 # Settings dialog
 msgid "Please install the Python module '%s'"
-msgstr "لطفاً ماژول پایتون را نصب کنید '%s'"
+msgstr "لطفاً پیمانهٔ %s پایتون را نصب کنید"
 
 # Settings dialog
 msgid "Please install the command-line tool '%s'"
-msgstr "لطفاً ابزار خط فرمان را نصب کنید '%s'"
+msgstr "لطفاً ابزار خط فرمان %s را نصب کنید"
 
 # Settings dialog
 msgid "Invalid cron expression '%s'"
-msgstr ""
+msgstr "عبارت کرون نامعتبر «%s»"
 
 # Settings dialog
 msgid "Please add the resource %(resource)s to %(config_resource)s directory"
-msgstr "لطفا منبع را اضافه کنید %(resource) در %(config_resource)پوشه ها"
+msgstr "لطفا منبع %(resource)s را به شاخهٔ %(config_resource)s بیفزایید"
 
 # Settings dialog
 msgid "New Break"
@@ -303,15 +304,15 @@
 
 # plugin/audiblealert
 msgid "Play audible alert before and after breaks"
-msgstr "هشدار صوتی را قبل و بعد از وقفه پخش کنید"
+msgstr "پخش هشدار صوتی پیش و پس از استراحت‌ها"
 
 # plugin/audiblealert
 msgid "Play audible alert before breaks"
-msgstr "هشدار صوتی را قبل از وقفه پخش کنید"
+msgstr "پخش هشدار صوتی پیش از استراحت‌ها"
 
 # plugin/audiblealert
 msgid "Play audible alert after breaks"
-msgstr "بعد از وقفه هشدار صوتی را پخش کنید"
+msgstr "پخش هشدار صوتی پس از استراحت‌ها"
 
 # plugin/donotdisturb
 msgid "Do Not Disturb"
@@ -323,15 +324,15 @@
 
 # plugin/donotdisturb
 msgid "Do not interrupt these windows anytime"
-msgstr "هر وقت بخواهید این پنجره ها را قطع نکنید"
+msgstr "این پنجره‌ها هرگز دچار وقفه نشوند"
 
 # plugin/donotdisturb
 msgid "Interrupt these windows regardless of their state"
-msgstr "قطع این پنجره ها بدون توجه به وضعیت آنها"
+msgstr "وقفه دادن این پنجره‌ها فارغ از وضعیتشان"
 
 # plugin/donotdisturb
 msgid "Switch the interruptible windows to normal mode"
-msgstr "پنجره های قطع شونده را به حالت عادی تغییر دهید"
+msgstr "تغییر پنچره‌های وقفه‌پذیر به حالت عادی"
 
 # plugin/donotdisturb
 msgid "Do not disturb while on battery"
@@ -339,31 +340,31 @@
 
 # plugin/healthstats
 msgid "Health Statistics"
-msgstr "آمار بهداشت"
+msgstr "آمار سلامتی"
 
 # plugin/healthstats
 msgid "Show statistics based on how you use Safe Eyes"
-msgstr "آماری را براساس نحوه استفاده از Safe Eyes نشان دهید"
+msgstr "نمایش آماری بر پایهٔ چگونگی استفاده‌تان از محافظ چشم"
 
 # plugin/healthstats
 msgid "Statistics reset interval (cron expression)"
-msgstr ""
+msgstr "بازهٔ بازنشانی آمار (عبارت کرون)"
 
 # plugin/notification
 msgid "Notification"
-msgstr "اطلاع"
+msgstr "آگاهی"
 
 # plugin/notification
 msgid "Show a system notification before breaks"
-msgstr "قبل از وقفه یک اعلان سیستم را نشان دهید"
+msgstr "نمایش یک آگاهی سامانه پیش از استراحت‌ها"
 
 # plugin/notification
 msgid "Ready for a short break in %s seconds"
-msgstr "آماده برای یک استراحت کوتاه در %s ثانیه"
+msgstr "آماده برای استراحتی کوتاه در %s ثانیه"
 
 # plugin/notification
 msgid "Ready for a long break in %s seconds"
-msgstr "آماده برای یک استراحت طولانی در %s ثانیه"
+msgstr "آماده برای استراحتی طولانی در %s ثانیه"
 
 # plugin/screensaver
 msgid "Screensaver"
@@ -371,7 +372,7 @@
 
 # plugin/screensaver
 msgid "Lock the screen after long breaks by starting screensaver"
-msgstr "با اسکرین سیور ، صفحه را پس از وقفه های طولانی قفل کن"
+msgstr "قفل صفحه پس از استراحت‌های طولانی با آغاز محافظ صفحه"
 
 # plugin/screensaver
 msgid "Custom screensaver command"
@@ -379,7 +380,7 @@
 
 # plugin/screensaver
 msgid "Minimum seconds to skip without screensaver"
-msgstr "حداقل ثانیه برای پرش بدون محافظ صفحه نمایش"
+msgstr "کمینهٔ ثانیه‌ها برای پرش بدون محافظ صفحه"
 
 # plugin/screensaver
 msgid "Lock screen"
@@ -391,73 +392,73 @@
 
 # plugin/smartpause
 msgid "Pause Safe Eyes if the system is idle"
-msgstr "اگر سیستم بیکار است ، Safe Eyes را مکث کنید"
+msgstr "مکث محافظ چشم در صورت بی‌کاری سامانه"
 
 # plugin/smartpause
 msgid "Minimum idle time to pause Safe Eyes (in seconds)"
-msgstr "حداقل زمان بیکار برای مکث ایمن چشم ها (در چند ثانیه)"
+msgstr "کمینهٔ زمان بیکاری برای مکث محافظ چشم (به ثانیه)"
 
 # plugin/smartpause
 msgid "Interpret idle time equivalent to upcoming break duration as a break"
-msgstr "زمان بیکار معادل مدت وقفه آینده را به عنوان یک استراحت تفسیر کنید"
+msgstr "وقفهٔ زمان بیکاری معادل زمان استراحت پیش رو به عنوان یک استراحت"
 
 # plugin/smartpause
 msgid "Postpone the next break until the system becomes idle"
-msgstr "وقفه بعدی را به تأخیر بیندازید تا سیستم بیکار شود"
+msgstr "تعویق استراحت بعدی تا زمان بیکار شدن سامانه"
 
 #: plugins/trayicon
 msgid "Tray Icon"
-msgstr "Tray Icon"
+msgstr "نقشک سینی"
 
 #: plugins/trayicon
 msgid "Show a tray icon in the notification area"
-msgstr "نماد تلاش مجدد را در قسمت اعلان نشان دهید"
+msgstr "نمایش نقشک سینی در ناحیهٔ آگاهی"
 
 #: plugins/trayicon
 msgid "Show next break time in tray icon"
-msgstr "زمان استراحت بعدی را در نماد تلاش مجدد نشان دهید"
+msgstr "نمایش زمان استراحت بعدی در نقشک سینی"
 
 #: plugins/trayicon
 msgid "Allow disabling Safe Eyes"
-msgstr "اجازه دادن به غیرفعال کردن ایمن چشم ها"
+msgstr "اجازه به از کار انداختن محافظ چشم"
 
 #: plugins/trayicon
 msgid "About"
-msgstr "در باره"
+msgstr "درباره"
 
 #: plugins/trayicon
 msgid "Disable Safe Eyes"
-msgstr "غیر فعال سازی Safe Eyes"
+msgstr "از کار انداختن محافظ چشم"
 
 #: plugins/trayicon
 msgid "Disabled until %s"
-msgstr "غیرفعال تا %s"
+msgstr "از کار افتاده تا %s"
 
 #: plugins/trayicon
 msgid "Disabled until restart"
-msgstr "غیرفعال است تا راه اندازی مجدد"
+msgstr "از کار افتاده تا آغاز دوباره"
 
 #: plugins/trayicon
 msgid "Enable Safe Eyes"
-msgstr "فعال سازی Safe Eyes"
+msgstr "به کار انداختن محافظ چشم"
 
 #: plugins/trayicon
 msgid "For %d Hour"
 msgid_plural "For %d Hours"
-msgstr[0] "به مدت %d ساعت ها"
-msgstr[1] "به مدت %d ساعت"
+msgstr[0] "برای ۱ ساعت"
+msgstr[1] "برای %Id ساعت"
 
 #: plugins/trayicon
 msgid "For %d Minute"
 msgid_plural "For %d Minutes"
-msgstr[0] "برای %d دقیقه"
-msgstr[1] "برای %d دقیقه ها"
+msgstr[0] "برای ۱ دقیقه"
+msgstr[1] "برای %Id دقیقه"
 
 #: plugins/trayicon
 msgid "For %d Second"
 msgid_plural "For %d Seconds"
-msgstr[0] "برای %d ثانیه"
-msgstr[1] "برای %d ثانیه ها"
+msgstr[0] "برای ۱ ثانیه"
+msgstr[1] "برای %dI ثانیه"
 
 #: plugins/trayicon
 msgid "Next break at %s"
@@ -465,7 +466,7 @@
 
 #: plugins/trayicon
 msgid "No Breaks Available"
-msgstr "هیچ وقفه ای موجود نیست"
+msgstr "هیچ استراحتی موجود نیست"
 
 #: plugins/trayicon
 msgid "Settings"
@@ -473,23 +474,23 @@
 
 #: plugins/trayicon
 msgid "Take a break now"
-msgstr "کمی استراحت کن"
+msgstr "اکنون استراحت کنید"
 
 #: plugins/trayicon
 msgid "Until restart"
-msgstr "تا راه اندازی مجدد"
+msgstr "تا آغاز دوباره"
 
 #: plugins/trayicon
 msgid "Quit"
-msgstr "ترک کن"
+msgstr "خروج"
 
 # plugin/mediacontrol
 msgid "Media Control"
-msgstr "کنترل رسانه"
+msgstr "واپایش رسانه"
 
 # plugin/mediacontrol
 msgid "Pause media players from the break screen"
-msgstr "توقف پخش کننده رسانه در توقف صفحه"
+msgstr "مکث پخش‌کننده‌های رسانه در صفحهٔ استراحت"
 
 # plugin/mediacontrol
 msgid "Pause media"
diff -Nru safeeyes-2.1.3/safeeyes/config/locale/fr/LC_MESSAGES/safeeyes.po 
safeeyes-2.1.5/safeeyes/config/locale/fr/LC_MESSAGES/safeeyes.po
--- safeeyes-2.1.3/safeeyes/config/locale/fr/LC_MESSAGES/safeeyes.po    
2021-09-04 18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/config/locale/fr/LC_MESSAGES/safeeyes.po    
2023-03-09 12:28:03.000000000 +0000
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-02-10 15:50+0000\n"
+"PO-Revision-Date: 2022-01-11 15:55+0000\n"
 "Last-Translator: AO Localisation Lab <a...@localizationlab.org>\n"
 "Language-Team: French <https://hosted.weblate.org/projects/safe-eyes/";
 "translations/fr/>\n"
@@ -15,7 +15,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.5-dev\n"
+"X-Generator: Weblate 4.10.1\n"
 
 # Short break
 msgid "Tightly close your eyes"
@@ -59,7 +59,7 @@
 
 # Commandline arg description
 msgid "disable the currently running safeeyes instance"
-msgstr "désactiver l’instance de safeyes en cours"
+msgstr "désactiver l’instance de safeeyes en cours"
 
 # Commandline arg description
 msgid "enable the currently running safeeyes instance"
@@ -67,7 +67,7 @@
 
 # Commandline arg description
 msgid "quit the running safeeyes instance and exit"
-msgstr "fermer l’instance de safeyes en cours et sortir"
+msgstr "fermer l’instance de safeyes en cours et fermer"
 
 # Commandline arg description
 msgid "show the settings dialog"
@@ -79,7 +79,7 @@
 
 # Commandline arg description
 msgid "print the status of running safeeyes instance and exit"
-msgstr "imprimer l’état de l’instance safeeyes en cours et sortir"
+msgstr "imprimer l’état de l’instance safeeyes en cours et fermer"
 
 # Status message
 msgid "Safe Eyes is not running"
@@ -103,7 +103,7 @@
 "Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you "
 "to take breaks while you're working long hours at the computer"
 msgstr ""
-"Safe Eyes protège vos yeux contre la fatigue de l'œil (asthénopie) en vous "
+"Safe Eyes protège vos yeux contre la fatigue de l’œil (asthénopie) en vous "
 "rappelant de prendre des pauses lors de vos longues heures de travail sur un "
 "ordinateur"
 
@@ -203,7 +203,7 @@
 
 # Settings dialog
 msgid "You can't undo this action."
-msgstr "Vous ne pouvez-pas annuler cette action."
+msgstr "Vous ne pouvez pas annuler cette action."
 
 # Settings dialog
 msgid "Break"
@@ -235,11 +235,11 @@
 
 # Settings dialog
 msgid "Select"
-msgstr "Choisir"
+msgstr "Sélectionner"
 
 # Settings dialog
 msgid "Please select an image"
-msgstr "Veuillez choisir une image"
+msgstr "Veuillez sélectionner une image"
 
 # Settings dialog
 msgid "Duration"
@@ -352,7 +352,7 @@
 
 # plugin/healthstats
 msgid "Show statistics based on how you use Safe Eyes"
-msgstr "Afficher des statistiques basées sur votre utilisation de Safe Eyes"
+msgstr "Afficher des statistiques d’après votre utilisation de Safe Eyes"
 
 # plugin/healthstats
 msgid "Statistics reset interval (cron expression)"
@@ -376,7 +376,7 @@
 
 # plugin/screensaver
 msgid "Screensaver"
-msgstr "Économiseur d'écran"
+msgstr "Économiseur d’écran"
 
 # plugin/screensaver
 msgid "Lock the screen after long breaks by starting screensaver"
@@ -407,7 +407,7 @@
 # plugin/smartpause
 msgid "Minimum idle time to pause Safe Eyes (in seconds)"
 msgstr ""
-"Durée d'inactivité minimale pour mettre Safe Eyes en pause (en secondes)"
+"Durée d’inactivité minimale pour mettre Safe Eyes en pause (en secondes)"
 
 # plugin/smartpause
 msgid "Interpret idle time equivalent to upcoming break duration as a break"
@@ -479,7 +479,7 @@
 
 #: plugins/trayicon
 msgid "No Breaks Available"
-msgstr "Aucune pause n'est prévue"
+msgstr "Aucune pause n'est proposée"
 
 #: plugins/trayicon
 msgid "Settings"
diff -Nru safeeyes-2.1.3/safeeyes/config/locale/he/LC_MESSAGES/safeeyes.po 
safeeyes-2.1.5/safeeyes/config/locale/he/LC_MESSAGES/safeeyes.po
--- safeeyes-2.1.3/safeeyes/config/locale/he/LC_MESSAGES/safeeyes.po    
2021-09-04 18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/config/locale/he/LC_MESSAGES/safeeyes.po    
2023-03-09 12:28:03.000000000 +0000
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-10-13 15:27+0000\n"
+"PO-Revision-Date: 2021-05-23 09:32+0000\n"
 "Last-Translator: Yaron Shahrabani <sh.ya...@gmail.com>\n"
 "Language-Team: Hebrew <https://hosted.weblate.org/projects/safe-eyes/";
 "translations/he/>\n"
@@ -15,7 +15,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Weblate 4.3-dev\n"
+"X-Generator: Weblate 4.7-dev\n"
 
 # Short break
 msgid "Tightly close your eyes"
@@ -138,7 +138,7 @@
 
 # Settings dialog
 msgid "Show breaks in random order"
-msgstr ""
+msgstr "להציג הפסקות בסדר אקראי"
 
 # Settings dialog
 msgid "Strict break (No way to skip breaks)"
@@ -274,7 +274,7 @@
 
 # Settings dialog
 msgid "Invalid cron expression '%s'"
-msgstr ""
+msgstr "ביטוי cron שגוי ‚%s’"
 
 # Settings dialog
 msgid "Please add the resource %(resource)s to %(config_resource)s directory"
@@ -346,7 +346,7 @@
 
 # plugin/healthstats
 msgid "Statistics reset interval (cron expression)"
-msgstr ""
+msgstr "הפרשים בין איפוסי סטטיסטיקה (ביטוי cron)"
 
 # plugin/notification
 msgid "Notification"
diff -Nru safeeyes-2.1.3/safeeyes/config/locale/it/LC_MESSAGES/safeeyes.po 
safeeyes-2.1.5/safeeyes/config/locale/it/LC_MESSAGES/safeeyes.po
--- safeeyes-2.1.3/safeeyes/config/locale/it/LC_MESSAGES/safeeyes.po    
2021-09-04 18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/config/locale/it/LC_MESSAGES/safeeyes.po    
2023-03-09 12:28:03.000000000 +0000
@@ -6,8 +6,8 @@
 msgstr ""
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-02-24 07:50+0000\n"
-"Last-Translator: bortox <broto...@zoho.com>\n"
+"PO-Revision-Date: 2022-01-16 12:55+0000\n"
+"Last-Translator: albanobattistella <albano_battiste...@hotmail.com>\n"
 "Language-Team: Italian <https://hosted.weblate.org/projects/safe-eyes/";
 "translations/it/>\n"
 "Language: it\n"
@@ -15,7 +15,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.5\n"
+"X-Generator: Weblate 4.10.1\n"
 
 # Short break
 msgid "Tightly close your eyes"
@@ -90,8 +90,8 @@
 "Safe Eyes is running without an RPC server. Turn it on to use command-line "
 "arguments."
 msgstr ""
-"Safe Eyes funziona senza un server RPC. Attivalo per utilizzare gli "
-"argomenti della riga di comando."
+"Safe Eyes è in esecuzione senza un server RPC. Apri Safe Eyes per utilizzare "
+"la linea di comando."
 
 # About dialog
 msgid "Close"
@@ -388,7 +388,7 @@
 
 # plugin/screensaver
 msgid "Lock screen"
-msgstr "Schermo bloccato"
+msgstr "Blocca schermo"
 
 # plugin/smartpause
 msgid "Smart Pause"
diff -Nru safeeyes-2.1.3/safeeyes/config/locale/kn/LC_MESSAGES/safeeyes.po 
safeeyes-2.1.5/safeeyes/config/locale/kn/LC_MESSAGES/safeeyes.po
--- safeeyes-2.1.3/safeeyes/config/locale/kn/LC_MESSAGES/safeeyes.po    
2021-09-04 18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/config/locale/kn/LC_MESSAGES/safeeyes.po    
2023-03-09 12:28:03.000000000 +0000
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-12-23 11:29+0000\n"
+"PO-Revision-Date: 2021-07-30 17:35+0000\n"
 "Last-Translator: Yogesh <yog...@karnatakaeducation.org.in>\n"
 "Language-Team: Kannada <https://hosted.weblate.org/projects/safe-eyes/";
 "translations/kn/>\n"
@@ -15,11 +15,11 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.4.1-dev\n"
+"X-Generator: Weblate 4.7.2-dev\n"
 
 # Short break
 msgid "Tightly close your eyes"
-msgstr ""
+msgstr "ಕಣ್ಣನ್ನು ಗಟ್ಟಿಯಾಗಿ ಮುಚ್ಚಿರಿ"
 
 # Short break
 msgid "Roll your eyes a few times to each side"
@@ -35,7 +35,7 @@
 
 # Short break
 msgid "Blink your eyes"
-msgstr ""
+msgstr "ಕಣ್ಣನ್ನು ಮಿಟುಕಿಸಿ"
 
 # Short break
 msgid "Focus on a point in the far distance"
@@ -43,35 +43,35 @@
 
 # Short break
 msgid "Have some water"
-msgstr ""
+msgstr "ಸ್ವಲ್ಪ ನೀರನ್ನು ಕುಡಿಯಿರಿ"
 
 # Long break
 msgid "Walk for a while"
-msgstr ""
+msgstr "ಕೆಲ ಸಮಯ ನಡೆದಾಡಿ"
 
 # Long break
 msgid "Lean back at your seat and relax"
-msgstr ""
+msgstr "ನಿಮ್ಮ ಆಸನದ ಹಿಂಬದಿಗೆ ಹೊರಗಿ ವಿಶ್ರಮಿಸಿ"
 
 # Commandline arg description
 msgid "show the about dialog"
-msgstr ""
+msgstr "ಇದರ ಬಗ್ಗೆ ತೋರಿಸು"
 
 # Commandline arg description
 msgid "disable the currently running safeeyes instance"
-msgstr ""
+msgstr "ನೆಡುಯುತ್ತಿರುವ ಸೇಫ್‌ಐಸ್ಅನ್ನು ನಿಶ್ಕ್ರಿಯ ಗೊಳಿಸು"
 
 # Commandline arg description
 msgid "enable the currently running safeeyes instance"
-msgstr ""
+msgstr "ನೆಡುಯುತ್ತಿರುವ ಸೇಫ್‌ಐಸ್ಅನ್ನು ಸಕ್ರಿಯ ಗೊಳಿಸು"
 
 # Commandline arg description
 msgid "quit the running safeeyes instance and exit"
-msgstr ""
+msgstr "ನೆಡುಯುತ್ತಿರುವ ಸೇಫ್‌ಐಸ್ಅನ್ನು ತ್ಯಜಿಸು"
 
 # Commandline arg description
 msgid "show the settings dialog"
-msgstr ""
+msgstr "ಸಿದ್ಧತೆಗಳನ್ನು ತೋರಿಸು"
 
 # Commandline arg description
 msgid "start safeeyes in debug mode"
@@ -83,7 +83,7 @@
 
 # Status message
 msgid "Safe Eyes is not running"
-msgstr ""
+msgstr "ಸೇಫ್‌ಐಸ್ ನೆಡುಯುತ್ತಿಲ್ಲ"
 
 # RPC not enabled message
 msgid ""
@@ -95,7 +95,7 @@
 
 # About dialog
 msgid "Close"
-msgstr ""
+msgstr "ಮುಚ್ಚಿರಿ"
 
 # Description in about dialog
 # Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you 
to take breaks while you're working long hours at the computer
diff -Nru safeeyes-2.1.3/safeeyes/config/locale/nb/LC_MESSAGES/safeeyes.po 
safeeyes-2.1.5/safeeyes/config/locale/nb/LC_MESSAGES/safeeyes.po
--- safeeyes-2.1.3/safeeyes/config/locale/nb/LC_MESSAGES/safeeyes.po    
2021-09-04 18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/config/locale/nb/LC_MESSAGES/safeeyes.po    
2023-03-09 12:28:03.000000000 +0000
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-02-10 15:50+0000\n"
+"PO-Revision-Date: 2021-07-30 17:35+0000\n"
 "Last-Translator: Allan Nordhøy <ep...@anotheragency.no>\n"
 "Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/";
 "safe-eyes/translations/nb_NO/>\n"
@@ -15,7 +15,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.5-dev\n"
+"X-Generator: Weblate 4.7.2-dev\n"
 
 # Short break
 msgid "Tightly close your eyes"
@@ -163,7 +163,7 @@
 
 # Settings dialog
 msgid "Long break interval must be a multiple of short break interval"
-msgstr "Tiden mellom lange pauser må være være en inndeling av de små pausene"
+msgstr "Tiden mellom lange pauser må være en inndeling av de små pausene"
 
 # Settings dialog
 msgid "Reset"
diff -Nru safeeyes-2.1.3/safeeyes/config/locale/ru/LC_MESSAGES/safeeyes.po 
safeeyes-2.1.5/safeeyes/config/locale/ru/LC_MESSAGES/safeeyes.po
--- safeeyes-2.1.3/safeeyes/config/locale/ru/LC_MESSAGES/safeeyes.po    
2021-09-04 18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/config/locale/ru/LC_MESSAGES/safeeyes.po    
2023-03-09 12:28:03.000000000 +0000
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-03-11 12:02+0000\n"
+"PO-Revision-Date: 2022-12-21 05:47+0000\n"
 "Last-Translator: Dmitriy Q <krot...@mail.ru>\n"
 "Language-Team: Russian <https://hosted.weblate.org/projects/safe-eyes/";
 "translations/ru/>\n"
@@ -14,9 +14,9 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.5.2-dev\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.15.1-dev\n"
 
 # Short break
 msgid "Tightly close your eyes"
@@ -91,8 +91,8 @@
 "Safe Eyes is running without an RPC server. Turn it on to use command-line "
 "arguments."
 msgstr ""
-"Safe Eyes работает без RPC-сервера. Включите его чтобы использовать "
-"аргументы командной строки."
+"Программа Safe Eyes запущена без RPC сервера. Для использования аргументов "
+"командной строки запустите RPC сервер."
 
 # About dialog
 msgid "Close"
@@ -103,7 +103,9 @@
 msgid ""
 "Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you "
 "to take breaks while you're working long hours at the computer"
-msgstr "Описание"
+msgstr ""
+"Safe Eyes защищает ваши глаза от перенапряжения (астенопии), напоминая о "
+"необходимости сделать перерыв во время долгих часов за ПК"
 
 # About dialog
 msgid "License"
@@ -143,7 +145,7 @@
 
 # Settings dialog
 msgid "Strict break (No way to skip breaks)"
-msgstr "Обязательный перерыв (Невозможно отменить перерывы)"
+msgstr "Обязательный перерыв (без возможности пропуска)"
 
 # Settings dialog
 msgid "Allow postponing breaks"
@@ -155,11 +157,11 @@
 
 # Settings dialog
 msgid "Use RPC server to receive runtime commands"
-msgstr "Используйте RPC-сервер для получения запущенных команд"
+msgstr "Использовать RPC-сервер для получения запущенных команд"
 
 # Settings dialog
 msgid "Without the RPC server, command-line commands may not work"
-msgstr "Команды из командной строки могут не работать без RPC сервера"
+msgstr "Без RPC сервера команды из командной строки могут не работать"
 
 # Settings dialog
 msgid "Long break interval must be a multiple of short break interval"
@@ -232,7 +234,7 @@
 
 # Settings dialog
 msgid "Please select an image"
-msgstr "Пожалуйста выберите изображение"
+msgstr "Пожалуйста, выберите изображение"
 
 # Settings dialog
 msgid "Duration"
@@ -268,11 +270,11 @@
 
 # Settings dialog
 msgid "Please install the Python module '%s'"
-msgstr "Пожалуйста установите модуль Python: %s"
+msgstr "Пожалуйста, установите модуль Python: %s"
 
 # Settings dialog
 msgid "Please install the command-line tool '%s'"
-msgstr "Пожалуйста установите инструмент командной строки '%s'"
+msgstr "Пожалуйста, установите инструмент командной строки '%s'"
 
 # Settings dialog
 msgid "Invalid cron expression '%s'"
@@ -280,7 +282,7 @@
 
 # Settings dialog
 msgid "Please add the resource %(resource)s to %(config_resource)s directory"
-msgstr "Пожалуйста добавьте источник %(resource)s в папку %(config_resource)"
+msgstr "Пожалуйста, добавьте источник %(resource)s в папку %(config_resource)"
 
 # Settings dialog
 msgid "New Break"
@@ -320,7 +322,7 @@
 
 # plugin/donotdisturb
 msgid "Skip break if the active window is in fullscreen mode"
-msgstr "Пропустить перерыв, если активое окно в полнооконном режиме"
+msgstr "Пропустить перерыв, если активное окно в полноэкранном режиме"
 
 # plugin/donotdisturb
 msgid "Do not interrupt these windows anytime"
@@ -336,7 +338,7 @@
 
 # plugin/donotdisturb
 msgid "Do not disturb while on battery"
-msgstr "Не прерывать на автономном питании"
+msgstr "Не беспокоить при работе от батареи"
 
 # plugin/healthstats
 msgid "Health Statistics"
@@ -344,7 +346,7 @@
 
 # plugin/healthstats
 msgid "Show statistics based on how you use Safe Eyes"
-msgstr "Показывать статистику основанную на использовании Safe Eyes"
+msgstr "Показывать статистику, основанную на использовании Safe Eyes"
 
 # plugin/healthstats
 msgid "Statistics reset interval (cron expression)"
@@ -401,8 +403,8 @@
 # plugin/smartpause
 msgid "Interpret idle time equivalent to upcoming break duration as a break"
 msgstr ""
-"Интерпретировать время простоя равное продолжительности предстоящего "
-"перерыва как перерыв"
+"Интерпретировать время простоя, равное продолжительности предстоящего "
+"перерыва, как перерыв"
 
 # plugin/smartpause
 msgid "Postpone the next break until the system becomes idle"
@@ -422,7 +424,7 @@
 
 #: plugins/trayicon
 msgid "Allow disabling Safe Eyes"
-msgstr "Разрешить запрет Safe Eyes"
+msgstr "Разрешить выключение Safe Eyes"
 
 #: plugins/trayicon
 msgid "About"
diff -Nru safeeyes-2.1.3/safeeyes/config/locale/sk/LC_MESSAGES/safeeyes.po 
safeeyes-2.1.5/safeeyes/config/locale/sk/LC_MESSAGES/safeeyes.po
--- safeeyes-2.1.3/safeeyes/config/locale/sk/LC_MESSAGES/safeeyes.po    
2021-09-04 18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/config/locale/sk/LC_MESSAGES/safeeyes.po    
2023-03-09 12:28:03.000000000 +0000
@@ -6,8 +6,8 @@
 msgstr ""
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2019-02-17 23:26+0000\n"
-"Last-Translator: Jose Riha <jose1...@gmail.com>\n"
+"PO-Revision-Date: 2022-04-17 16:06+0000\n"
+"Last-Translator: menom <men...@protonmail.com>\n"
 "Language-Team: Slovak <https://hosted.weblate.org/projects/safe-eyes/";
 "translations/sk/>\n"
 "Language: sk\n"
@@ -15,7 +15,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: Weblate 3.5-dev\n"
+"X-Generator: Weblate 4.12-dev\n"
 
 # Short break
 msgid "Tightly close your eyes"
@@ -90,6 +90,8 @@
 "Safe Eyes is running without an RPC server. Turn it on to use command-line "
 "arguments."
 msgstr ""
+"Safe Eyes je spustený bez RPC serveru. Zapnite ho pre použitie argumentov v "
+"príkazovom riadku."
 
 # About dialog
 msgid "Close"
@@ -139,7 +141,7 @@
 
 # Settings dialog
 msgid "Show breaks in random order"
-msgstr ""
+msgstr "Ukazovať prestávky v náhodnom poradí"
 
 # Settings dialog
 msgid "Strict break (No way to skip breaks)"
@@ -155,11 +157,11 @@
 
 # Settings dialog
 msgid "Use RPC server to receive runtime commands"
-msgstr ""
+msgstr "Použiť RPC server na prijatie spúšťacích príkazov"
 
 # Settings dialog
 msgid "Without the RPC server, command-line commands may not work"
-msgstr ""
+msgstr "Bez RPC serveru príkazy v príkazovom riadku nemusia fungovať"
 
 # Settings dialog
 msgid "Long break interval must be a multiple of short break interval"
@@ -275,7 +277,7 @@
 
 # Settings dialog
 msgid "Invalid cron expression '%s'"
-msgstr ""
+msgstr "Neplatný výraz pre cron '%s'"
 
 # Settings dialog
 msgid "Please add the resource %(resource)s to %(config_resource)s directory"
@@ -347,7 +349,7 @@
 
 # plugin/healthstats
 msgid "Statistics reset interval (cron expression)"
-msgstr ""
+msgstr "Interval vynulovania štatistík (výraz pre plánovač cron)"
 
 # plugin/notification
 msgid "Notification"
@@ -403,7 +405,7 @@
 
 # plugin/smartpause
 msgid "Postpone the next break until the system becomes idle"
-msgstr ""
+msgstr "Odložiť ďalšiu prestávku až dokiaľ bude systém nečinný"
 
 #: plugins/trayicon
 msgid "Tray Icon"
@@ -419,7 +421,7 @@
 
 #: plugins/trayicon
 msgid "Allow disabling Safe Eyes"
-msgstr ""
+msgstr "Povoliť vypnutie Safe Eyes"
 
 #: plugins/trayicon
 msgid "About"
@@ -488,12 +490,12 @@
 
 # plugin/mediacontrol
 msgid "Media Control"
-msgstr ""
+msgstr "Ovládanie médií"
 
 # plugin/mediacontrol
 msgid "Pause media players from the break screen"
-msgstr ""
+msgstr "Pozastaviť prehrávače médií z obrazovky prestávky"
 
 # plugin/mediacontrol
 msgid "Pause media"
-msgstr ""
+msgstr "Pozastaviť média"
diff -Nru safeeyes-2.1.3/safeeyes/config/locale/sv/LC_MESSAGES/safeeyes.po 
safeeyes-2.1.5/safeeyes/config/locale/sv/LC_MESSAGES/safeeyes.po
--- safeeyes-2.1.3/safeeyes/config/locale/sv/LC_MESSAGES/safeeyes.po    
2021-09-04 18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/config/locale/sv/LC_MESSAGES/safeeyes.po    
2023-03-09 12:28:03.000000000 +0000
@@ -6,8 +6,8 @@
 msgstr ""
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-09-28 07:40+0000\n"
-"Last-Translator: Mattias Münster <mattias...@gmail.com>\n"
+"PO-Revision-Date: 2021-08-18 00:37+0000\n"
+"Last-Translator: Luna Jernberg <droidbit...@gmail.com>\n"
 "Language-Team: Swedish <https://hosted.weblate.org/projects/safe-eyes/";
 "translations/sv/>\n"
 "Language: sv\n"
@@ -15,7 +15,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.3-dev\n"
+"X-Generator: Weblate 4.8-dev\n"
 
 # Short break
 msgid "Tightly close your eyes"
@@ -275,7 +275,7 @@
 
 # Settings dialog
 msgid "Invalid cron expression '%s'"
-msgstr ""
+msgstr "Ogiltigt cron uttryck '%s'"
 
 # Settings dialog
 msgid "Please add the resource %(resource)s to %(config_resource)s directory"
@@ -347,7 +347,7 @@
 
 # plugin/healthstats
 msgid "Statistics reset interval (cron expression)"
-msgstr ""
+msgstr "Återställningsintervall för statistik (cron-uttryck)"
 
 # plugin/notification
 msgid "Notification"
diff -Nru safeeyes-2.1.3/safeeyes/config/locale/uk/LC_MESSAGES/safeeyes.po 
safeeyes-2.1.5/safeeyes/config/locale/uk/LC_MESSAGES/safeeyes.po
--- safeeyes-2.1.3/safeeyes/config/locale/uk/LC_MESSAGES/safeeyes.po    
2021-09-04 18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/config/locale/uk/LC_MESSAGES/safeeyes.po    
2023-03-09 12:28:03.000000000 +0000
@@ -6,8 +6,8 @@
 msgstr ""
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-01-27 09:32+0000\n"
-"Last-Translator: Dmitriy Q <krot...@mail.ru>\n"
+"PO-Revision-Date: 2021-08-18 00:37+0000\n"
+"Last-Translator: Tymofii Lytvynenko <till.s...@gmail.com>\n"
 "Language-Team: Ukrainian <https://hosted.weblate.org/projects/safe-eyes/";
 "translations/uk/>\n"
 "Language: uk\n"
@@ -16,7 +16,7 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
 "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.5-dev\n"
+"X-Generator: Weblate 4.8-dev\n"
 
 # Short break
 msgid "Tightly close your eyes"
@@ -139,7 +139,7 @@
 
 # Settings dialog
 msgid "Show breaks in random order"
-msgstr ""
+msgstr "Показувати перерви у випадковому порядку"
 
 # Settings dialog
 msgid "Strict break (No way to skip breaks)"
@@ -196,7 +196,7 @@
 
 # Settings dialog
 msgid "You can't undo this action."
-msgstr "Цю дію неможливо відмінити."
+msgstr "Цю дію неможливо скасувати."
 
 # Settings dialog
 msgid "Break"
@@ -275,9 +275,8 @@
 msgstr "Будь ласка, встановіть засіб вказівкового рядка «%s»"
 
 # Settings dialog
-#, fuzzy
 msgid "Invalid cron expression '%s'"
-msgstr "Неприпустимий вираз cron '% s'"
+msgstr "Неприпустимий вираз cron '%s'"
 
 # Settings dialog
 msgid "Please add the resource %(resource)s to %(config_resource)s directory"
@@ -351,7 +350,7 @@
 
 # plugin/healthstats
 msgid "Statistics reset interval (cron expression)"
-msgstr ""
+msgstr "Інтервал скидання статистики (вираз cron)"
 
 # plugin/notification
 msgid "Notification"
diff -Nru safeeyes-2.1.3/safeeyes/config/locale/vi/LC_MESSAGES/safeeyes.po 
safeeyes-2.1.5/safeeyes/config/locale/vi/LC_MESSAGES/safeeyes.po
--- safeeyes-2.1.3/safeeyes/config/locale/vi/LC_MESSAGES/safeeyes.po    
2021-09-04 18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/config/locale/vi/LC_MESSAGES/safeeyes.po    
2023-03-09 12:28:03.000000000 +0000
@@ -6,8 +6,8 @@
 msgstr ""
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2018-08-26 03:45+0000\n"
-"Last-Translator: Hoàng Trần <hoangtk...@gmail.com>\n"
+"PO-Revision-Date: 2022-11-26 23:54+0000\n"
+"Last-Translator: Minh P <phandinhm...@protonmail.ch>\n"
 "Language-Team: Vietnamese <https://hosted.weblate.org/projects/safe-eyes/";
 "translations/vi/>\n"
 "Language: vi\n"
@@ -15,7 +15,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 3.2-dev\n"
+"X-Generator: Weblate 4.15-dev\n"
 
 # Short break
 msgid "Tightly close your eyes"
@@ -79,7 +79,7 @@
 
 # Commandline arg description
 msgid "print the status of running safeeyes instance and exit"
-msgstr ""
+msgstr "in trạng thái chạy phiên bản Safe Eyes và thoát"
 
 # Status message
 msgid "Safe Eyes is not running"
@@ -90,6 +90,8 @@
 "Safe Eyes is running without an RPC server. Turn it on to use command-line "
 "arguments."
 msgstr ""
+"Safe Eyes đang chạy mà không có máy chủ RPC. Bạn hãy bật nó lên để sử dụng "
+"tham số dòng lệnh nhé."
 
 # About dialog
 msgid "Close"
@@ -139,7 +141,7 @@
 
 # Settings dialog
 msgid "Show breaks in random order"
-msgstr ""
+msgstr "Hiển thị theo thứ tự ngẫu nhiên"
 
 # Settings dialog
 msgid "Strict break (No way to skip breaks)"
@@ -151,15 +153,15 @@
 
 # Settings dialog
 msgid "Persist the internal state"
-msgstr "Persist the internal state"
+msgstr "Duy trì nội trạng thái"
 
 # Settings dialog
 msgid "Use RPC server to receive runtime commands"
-msgstr ""
+msgstr "Sử dụng máy chủ RPC để nhận lệnh thời gian chạy"
 
 # Settings dialog
 msgid "Without the RPC server, command-line commands may not work"
-msgstr ""
+msgstr "Nếu không có máy chủ RPC, các lệnh dòng lệnh có thể không hoạt động"
 
 # Settings dialog
 msgid "Long break interval must be a multiple of short break interval"
@@ -167,11 +169,11 @@
 
 # Settings dialog
 msgid "Reset"
-msgstr ""
+msgstr "Đặt lại"
 
 # Settings dialog
 msgid "Are you sure you want to reset all settings to default?"
-msgstr ""
+msgstr "Bạn có chắc chắn muốn đặt lại tất cả cài đặt về mặc định không?"
 
 # Settings dialog
 msgid "Options"
@@ -187,15 +189,15 @@
 
 # Settings dialog
 msgid "Delete"
-msgstr ""
+msgstr "Xóa"
 
 # Settings dialog
 msgid "Are you sure you want to delete this break?"
-msgstr ""
+msgstr "Bạn có chắc chắn muốn xóa thời gian nghỉ này không?"
 
 # Settings dialog
 msgid "You can't undo this action."
-msgstr ""
+msgstr "Bạn không thể hoàn tác hành động này."
 
 # Settings dialog
 msgid "Break"
@@ -239,7 +241,7 @@
 
 # Settings dialog
 msgid "Time to wait"
-msgstr ""
+msgstr "Thời gian chờ"
 
 # Settings dialog
 msgid "Override"
@@ -275,7 +277,7 @@
 
 # Settings dialog
 msgid "Invalid cron expression '%s'"
-msgstr ""
+msgstr "Biểu thức cron '%s' không hợp lệ"
 
 # Settings dialog
 msgid "Please add the resource %(resource)s to %(config_resource)s directory"
@@ -303,15 +305,15 @@
 
 # plugin/audiblealert
 msgid "Play audible alert before and after breaks"
-msgstr ""
+msgstr "Phát âm thanh cảnh báo trước và sau khi nghỉ giải lao"
 
 # plugin/audiblealert
 msgid "Play audible alert before breaks"
-msgstr ""
+msgstr "Phát âm thanh cảnh báo trước khi nghỉ giải lao"
 
 # plugin/audiblealert
 msgid "Play audible alert after breaks"
-msgstr ""
+msgstr "Phát âm thanh cảnh báo sau khi nghỉ giải lao"
 
 # plugin/donotdisturb
 msgid "Do Not Disturb"
@@ -336,7 +338,7 @@
 
 # plugin/donotdisturb
 msgid "Do not disturb while on battery"
-msgstr ""
+msgstr "Không làm phiền khi đang sử dụng pin"
 
 # plugin/healthstats
 msgid "Health Statistics"
@@ -348,7 +350,7 @@
 
 # plugin/healthstats
 msgid "Statistics reset interval (cron expression)"
-msgstr ""
+msgstr "Khoảng thời gian đặt lại thống kê (biểu thức cron)"
 
 # plugin/notification
 msgid "Notification"
@@ -384,7 +386,7 @@
 
 # plugin/screensaver
 msgid "Lock screen"
-msgstr ""
+msgstr "Khóa màn hình"
 
 # plugin/smartpause
 msgid "Smart Pause"
@@ -406,7 +408,7 @@
 
 # plugin/smartpause
 msgid "Postpone the next break until the system becomes idle"
-msgstr ""
+msgstr "Hoãn lần nghỉ tiếp theo cho đến khi hệ thống không hoạt động"
 
 #: plugins/trayicon
 msgid "Tray Icon"
@@ -422,7 +424,7 @@
 
 #: plugins/trayicon
 msgid "Allow disabling Safe Eyes"
-msgstr ""
+msgstr "Cho phép tắt Safe Eyes"
 
 #: plugins/trayicon
 msgid "About"
@@ -485,12 +487,12 @@
 
 # plugin/mediacontrol
 msgid "Media Control"
-msgstr ""
+msgstr "Kiểm soát phương tiện"
 
 # plugin/mediacontrol
 msgid "Pause media players from the break screen"
-msgstr ""
+msgstr "Tạm dừng trình phát đa phương tiện từ màn hình nghỉ"
 
 # plugin/mediacontrol
 msgid "Pause media"
-msgstr ""
+msgstr "Tạm dừng media"
diff -Nru safeeyes-2.1.3/safeeyes/config/locale/zh_CN/LC_MESSAGES/safeeyes.po 
safeeyes-2.1.5/safeeyes/config/locale/zh_CN/LC_MESSAGES/safeeyes.po
--- safeeyes-2.1.3/safeeyes/config/locale/zh_CN/LC_MESSAGES/safeeyes.po 
2021-09-04 18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/config/locale/zh_CN/LC_MESSAGES/safeeyes.po 
2023-03-09 12:28:03.000000000 +0000
@@ -6,8 +6,8 @@
 msgstr ""
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-03-07 09:50+0000\n"
-"Last-Translator: Eric <spice2w...@gmail.com>\n"
+"PO-Revision-Date: 2021-10-10 05:05+0000\n"
+"Last-Translator: Frank.wu <m...@wuzhiping.top>\n"
 "Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/";
 "safe-eyes/translations/zh_Hans/>\n"
 "Language: zh_CN\n"
@@ -15,7 +15,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.5.1\n"
+"X-Generator: Weblate 4.9-dev\n"
 
 # Short break
 msgid "Tightly close your eyes"
@@ -23,15 +23,15 @@
 
 # Short break
 msgid "Roll your eyes a few times to each side"
-msgstr "左右滚动您的眼珠"
+msgstr "向两边各翻几下眼睛"
 
 # Short break
 msgid "Rotate your eyes in clockwise direction"
-msgstr "顺时针方向转动您的眼珠"
+msgstr "按顺时针方向旋转你的眼球"
 
 # Short break
 msgid "Rotate your eyes in counterclockwise direction"
-msgstr "逆时针方向转动您的眼珠"
+msgstr "按逆时针方向旋转你的眼球"
 
 # Short break
 msgid "Blink your eyes"
@@ -83,7 +83,7 @@
 
 # Status message
 msgid "Safe Eyes is not running"
-msgstr "Safe Eyes尚未运行"
+msgstr "Safe Eyes 尚未运行"
 
 # RPC not enabled message
 msgid ""
diff -Nru safeeyes-2.1.3/safeeyes/glade/about_dialog.glade 
safeeyes-2.1.5/safeeyes/glade/about_dialog.glade
--- safeeyes-2.1.3/safeeyes/glade/about_dialog.glade    2021-09-04 
18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/glade/about_dialog.glade    2023-03-09 
12:28:03.000000000 +0000
@@ -33,7 +33,7 @@
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
-along with this program.  If not, see 
&lt;http://www.gnu.org/licenses/&gt;.</property>
+along with this program.  If not, see 
&lt;https://www.gnu.org/licenses/&gt;.</property>
   </object>
   <object class="GtkWindow" id="window_about">
     <property name="can_focus">False</property>
@@ -71,7 +71,7 @@
                 <property name="valign">center</property>
                 <property name="margin_top">10</property>
                 <property name="margin_bottom">10</property>
-                <property name="label" translatable="yes">Safe Eyes 
2.1.3</property>
+                <property name="label" translatable="yes">Safe Eyes 
2.1.5</property>
                 <property name="justify">center</property>
                 <attributes>
                   <attribute name="style" value="normal"/>
@@ -135,14 +135,14 @@
             </child>
             <child>
               <object class="GtkLinkButton" id="btn_url">
-                <property name="label" 
translatable="yes">http://slgobinath.github.io/SafeEyes</property>
+                <property name="label" 
translatable="yes">https://slgobinath.github.io/SafeEyes</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="focus_on_click">False</property>
                 <property name="receives_default">True</property>
                 <property name="halign">center</property>
                 <property name="relief">none</property>
-                <property 
name="uri">http://slgobinath.github.io/SafeEyes</property>
+                <property 
name="uri">https://slgobinath.github.io/SafeEyes</property>
               </object>
               <packing>
                 <property name="expand">False</property>
diff -Nru safeeyes-2.1.3/safeeyes/__main__.py 
safeeyes-2.1.5/safeeyes/__main__.py
--- safeeyes-2.1.3/safeeyes/__main__.py 2021-09-04 18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/__main__.py 2023-03-09 12:28:03.000000000 +0000
@@ -90,9 +90,12 @@
     """
     system_locale = gettext.translation('safeeyes', 
localedir=utility.LOCALE_PATH, languages=[utility.system_locale(), 'en_US'], 
fallback=True)
     system_locale.install()
-    # locale.bindtextdomain is required for Glade files
-    # gettext.bindtextdomain(gettext.textdomain(), Utility.LOCALE_PATH)
-    locale.bindtextdomain('safeeyes', utility.LOCALE_PATH)
+    try:
+        # locale.bindtextdomain is required for Glade files
+        locale.bindtextdomain('safeeyes', utility.LOCALE_PATH)
+    except AttributeError:
+        logging.warning('installed python\'s gettext module does not support 
locale.bindtextdomain. locale.bindtextdomain is required for Glade files')
+
 
     parser = argparse.ArgumentParser(prog='safeeyes', 
description=_('description'))
     group = parser.add_mutually_exclusive_group()
diff -Nru safeeyes-2.1.3/safeeyes/plugins/donotdisturb/plugin.py 
safeeyes-2.1.5/safeeyes/plugins/donotdisturb/plugin.py
--- safeeyes-2.1.3/safeeyes/plugins/donotdisturb/plugin.py      2021-09-04 
18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/plugins/donotdisturb/plugin.py      2023-03-09 
12:28:03.000000000 +0000
@@ -80,16 +80,15 @@
                 # Extract the process name
                 process_names = re.findall('"(.+?)"', stdout)
                 if process_names:
-                    process = process_names[1].lower()
-                    if process in skip_break_window_classes:
+                    process_name = process_names[1].lower()
+                    if _window_class_matches(process_name, 
skip_break_window_classes):
                         return True
-                    elif process in take_break_window_classes:
+                    elif _window_class_matches(process_name, 
take_break_window_classes):
                         if is_fullscreen and unfullscreen_allowed and not 
pre_break:
                             try:
                                 active_window.unfullscreen()
-                            except BaseException:
-                                logging.error(
-                                    'Error in unfullscreen the window ' + 
process)
+                            except BaseException as e:
+                                logging.error('Error in unfullscreen the 
window ' + process_name, exc_info=e)
                         return False
 
                 return is_fullscreen
@@ -97,6 +96,10 @@
     return False
 
 
+def _window_class_matches(window_class: str, classes: list) -> bool:
+    return any(map(lambda w: w in classes, window_class.split()))
+
+
 def is_on_battery():
     """
     Check if the computer is running on battery.
@@ -131,12 +134,16 @@
     global dnd_while_on_battery
     logging.debug('Initialize Skip Fullscreen plugin')
     context = ctx
-    skip_break_window_classes = plugin_config['skip_break_windows'].split()
-    take_break_window_classes = plugin_config['take_break_windows'].split()
+    skip_break_window_classes = 
_normalize_window_classes(plugin_config['skip_break_windows'])
+    take_break_window_classes = 
_normalize_window_classes(plugin_config['take_break_windows'])
     unfullscreen_allowed = plugin_config['unfullscreen']
     dnd_while_on_battery = plugin_config['while_on_battery']
 
 
+def _normalize_window_classes(classes_as_str: str):
+    return [w.lower() for w in classes_as_str.split()]
+
+
 def on_pre_break(break_obj):
     """
     Lifecycle method executes before the pre-break period.
diff -Nru safeeyes-2.1.3/safeeyes/plugins/smartpause/dependency_checker.py 
safeeyes-2.1.5/safeeyes/plugins/smartpause/dependency_checker.py
--- safeeyes-2.1.3/safeeyes/plugins/smartpause/dependency_checker.py    
2021-09-04 18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/plugins/smartpause/dependency_checker.py    
2023-03-09 12:28:03.000000000 +0000
@@ -23,6 +23,8 @@
     command = None
     if utility.DESKTOP_ENVIRONMENT == "gnome" and utility.IS_WAYLAND:
         command = "dbus-send"
+    elif utility.DESKTOP_ENVIRONMENT == "sway":
+        command = "swayidle"
     else:
         command = "xprintidle"
     if not utility.command_exist(command):
diff -Nru safeeyes-2.1.3/safeeyes/plugins/smartpause/plugin.py 
safeeyes-2.1.5/safeeyes/plugins/smartpause/plugin.py
--- safeeyes-2.1.3/safeeyes/plugins/smartpause/plugin.py        2021-09-04 
18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/plugins/smartpause/plugin.py        2023-03-09 
12:28:03.000000000 +0000
@@ -46,6 +46,48 @@
 interpret_idle_as_break = False
 is_wayland_and_gnome = False
 
+use_swayidle = False
+swayidle_process = None
+swayidle_lock = threading.Lock()
+swayidle_idle = 0
+swayidle_active = 0
+
+def __swayidle_running():
+    return (swayidle_process is not None and
+            swayidle_process.poll() is None)
+
+def __start_swayidle_monitor():
+    global swayidle_process
+    global swayidle_start
+    global swayidle_idle
+    global swayidle_active
+    logging.debug('Starting swayidle subprocess')
+    swayidle_process = subprocess.Popen([
+        "swayidle", "timeout", "1", "date +S%s", "resume", "date +R%s"
+        ], stdout=subprocess.PIPE, bufsize=1, universal_newlines=True, 
encoding='utf-8')
+    for line in swayidle_process.stdout:
+        with swayidle_lock:
+            typ = line[0]
+            timestamp = int(line[1:])
+            if typ == 'S':
+                swayidle_idle = timestamp
+            elif typ == 'R':
+                swayidle_active = timestamp
+
+def __stop_swayidle_monitor():
+    if __swayidle_running():
+        logging.debug('Stopping swayidle subprocess')
+        swayidle_process.terminate()
+
+def __swayidle_idle_time():
+    with swayidle_lock:
+        if not __swayidle_running():
+            utility.start_thread(__start_swayidle_monitor)
+        # Idle more recently than active, meaning idle time isn't stale.
+        if swayidle_idle > swayidle_active:
+            idle_time = int(datetime.datetime.now().timestamp()) - 
swayidle_idle
+            return idle_time
+    return 0
 
 def __gnome_wayland_idle_time():
     """
@@ -76,6 +118,8 @@
     try:
         if is_wayland_and_gnome:
             return __gnome_wayland_idle_time()
+        elif use_swayidle:
+            return __swayidle_idle_time()
         # Convert to seconds
         return int(subprocess.check_output(['xprintidle']).decode('utf-8')) / 
1000
     except BaseException:
@@ -116,6 +160,7 @@
     global interpret_idle_as_break
     global postpone_if_active
     global is_wayland_and_gnome
+    global use_swayidle
     logging.debug('Initialize Smart Pause plugin')
     context = ctx
     enable_safe_eyes = context['api']['enable_safeeyes']
@@ -129,6 +174,7 @@
     long_break_duration = safeeyes_config.get('long_break_duration')
     waiting_time = min(2, idle_time)  # If idle time is 1 sec, wait only 1 sec
     is_wayland_and_gnome = context['desktop'] == 'gnome' and 
context['is_wayland']
+    use_swayidle = context['desktop'] == 'sway'
 
 
 def __start_idle_monitor():
@@ -199,6 +245,8 @@
         smart_pause_activated = False
         return
     logging.debug('Stop Smart Pause plugin')
+    if use_swayidle:
+        __stop_swayidle_monitor()
     __set_active(False)
     idle_condition.acquire()
     idle_condition.notify_all()
diff -Nru safeeyes-2.1.3/safeeyes/plugins/trayicon/plugin.py 
safeeyes-2.1.5/safeeyes/plugins/trayicon/plugin.py
--- safeeyes-2.1.3/safeeyes/plugins/trayicon/plugin.py  2021-09-04 
18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/plugins/trayicon/plugin.py  2023-03-09 
12:28:03.000000000 +0000
@@ -19,8 +19,13 @@
 import datetime
 import gi
 gi.require_version('Gtk', '3.0')
-gi.require_version('AppIndicator3', '0.1')
-from gi.repository import AppIndicator3 as appindicator
+try:
+    gi.require_version('AppIndicator3', '0.1')
+    from gi.repository import AppIndicator3 as appindicator
+except:
+    #fall back to Ayatana
+    gi.require_version('AyatanaAppIndicator3', '0.1')
+    from gi.repository import AyatanaAppIndicator3 as appindicator
 from gi.repository import Gtk
 import logging
 from safeeyes import utility
diff -Nru safeeyes-2.1.3/safeeyes/safeeyes.py 
safeeyes-2.1.5/safeeyes/safeeyes.py
--- safeeyes-2.1.3/safeeyes/safeeyes.py 2021-09-04 18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/safeeyes.py 2023-03-09 12:28:03.000000000 +0000
@@ -40,7 +40,7 @@
 gi.require_version('Gtk', '3.0')
 from gi.repository import Gtk
 
-SAFE_EYES_VERSION = "2.1.3"
+SAFE_EYES_VERSION = "2.1.5"
 
 
 class SafeEyes:
diff -Nru safeeyes-2.1.3/safeeyes/utility.py safeeyes-2.1.5/safeeyes/utility.py
--- safeeyes-2.1.3/safeeyes/utility.py  2021-09-04 18:58:52.000000000 +0100
+++ safeeyes-2.1.5/safeeyes/utility.py  2023-03-09 12:28:03.000000000 +0000
@@ -290,6 +290,9 @@
             env = 'gnome'
         elif desktop_session.startswith('ubuntu'):
             env = 'unity'
+    elif current_desktop is not None:
+        if current_desktop.startswith('sway'):
+            env = 'sway'
     DESKTOP_ENVIRONMENT = env
     return env
 
@@ -299,6 +302,13 @@
     https://unix.stackexchange.com/a/325972/222290
     """
     global IS_WAYLAND
+
+    # Easy method. Does not depend on loginctl
+    # 
https://stackoverflow.com/questions/45536141/how-i-can-find-out-if-a-linux-system-uses-wayland-or-x11/45537237#45537237
+    if "WAYLAND_DISPLAY" in os.environ:
+        IS_WAYLAND = True
+        return IS_WAYLAND
+
     try:
         session_id = 
subprocess.check_output(['loginctl']).split(b'\n')[1].split()[0]
         output = subprocess.check_output(
diff -Nru safeeyes-2.1.3/setup.py safeeyes-2.1.5/setup.py
--- safeeyes-2.1.3/setup.py     2021-09-04 18:58:52.000000000 +0100
+++ safeeyes-2.1.5/setup.py     2023-03-09 12:28:03.000000000 +0000
@@ -78,14 +78,14 @@
 
 setuptools.setup(
     name="safeeyes",
-    version="2.1.3",
+    version="2.1.5",
     description="Protect your eyes from eye strain using this continuous 
breaks reminder.",
     long_description=long_description,
     long_description_content_type="text/markdown",
     author="Gobinath Loganathan",
     author_email="slgobin...@gmail.com",
     url="https://github.com/slgobinath/SafeEyes";,
-    
download_url="https://github.com/slgobinath/SafeEyes/archive/v2.1.3.tar.gz";,
+    
download_url="https://github.com/slgobinath/SafeEyes/archive/v2.1.5.tar.gz";,
     packages=setuptools.find_packages(),
     package_data={'safeeyes': __package_data()},
     data_files=__data_files(),
diff -Nru safeeyes-2.1.3/validate_po.py safeeyes-2.1.5/validate_po.py
--- safeeyes-2.1.3/validate_po.py       1970-01-01 01:00:00.000000000 +0100
+++ safeeyes-2.1.5/validate_po.py       2023-03-09 12:28:03.000000000 +0000
@@ -0,0 +1,35 @@
+#!/usr/bin/env python3
+# Safe Eyes is a utility to remind you to take break frequently
+# to protect your eyes from eye strain.
+
+# Copyright (C) 2021  Gobinath
+
+# This program 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.
+
+# This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import os
+import polib
+
+def validate_po(locale, path):
+     po = polib.pofile(path)
+     for entry in po:
+         if entry.msgstr and (entry.msgid.count("%") != 
entry.msgstr.count("%")):
+             print("Number of varialbes mismatched in " + locale)
+             print(entry.msgid + " -> " + entry.msgstr)
+             print()
+
+locales = os.listdir('safeeyes/config/locale')
+for locale in locales:
+    path = os.path.join('safeeyes/config/locale', locale, 
"LC_MESSAGES/safeeyes.po")
+    if os.path.isfile(path):
+        validate_po(locale, path)
\ No newline at end of file

Reply via email to