Compare commits
100 Commits
Author | SHA1 | Date |
---|---|---|
aerowolf | 00c33908a3 | |
Сергій | 766e9a9795 | |
Salif Mehmed | 4f7cbc4d93 | |
Hosted Weblate | c8f815345d | |
麋悟BigELK176 | a59f3770dc | |
AdamPS | 3e89aa4fcf | |
AdamPS | 903d407faf | |
Alyssa Rosenzweig | 777d48603d | |
AdamPS | cbfc0cc133 | |
AdamPS | edb5b70b53 | |
AdamPS | dd190d0543 | |
AdamPS | 9d30def057 | |
Almaz Mannanov | 0cce71070b | |
Hosted Weblate | e8bf389da8 | |
Eryk Michalak | e8a254d74e | |
Kryštof Jelínek | c37e9db6db | |
akhil_s | 776a8b81de | |
Hosted Weblate | c4675b743d | |
Novak Urosevic | a33f317241 | |
Ilario Gelmetti | 5a993a4d60 | |
Milan Šalka | 068771d5fd | |
Hosted Weblate | 20db0432b9 | |
Salif Mehmed | b04d49ed34 | |
Sebastian Pipping | dc0a470c34 | |
Hosted Weblate | e6112a87a9 | |
Dmitriy Q | b838f3c5fe | |
Gobinath | ae88ad3386 | |
Gobinath Loganathan | bd18d33c90 | |
Hosted Weblate | 1a9ebfb2db | |
Sebastian Pipping | f26bcc5af2 | |
Onur Alp Akin | 684d16265a | |
Sebastian Pipping | 45a633d31f | |
Sebastian Pipping | 06d8f491c4 | |
Ilario Gelmetti | 682a027d04 | |
AHOHNMYC | cae19b0f28 | |
Yi Yunseok | 0874be58c2 | |
Luna Jernberg | d1a9f7d0b5 | |
Hosted Weblate | 339ed40f4a | |
Yi Yunseok | 7bde5d0368 | |
AdamPS | 201e6d2982 | |
AdamPS | 9a76aa4211 | |
AdamPS | 788e2b43af | |
AdamPS | d20894a7c4 | |
Gobinath | 9e64e65fce | |
Hosted Weblate | b90349ab10 | |
Porrumentzio | a158587311 | |
Gobinath Loganathan | 4799518354 | |
Gobinath | e495bf5652 | |
Gobinath Loganathan | e79444c699 | |
Gobinath Loganathan | 95da9334e0 | |
Gobinath Loganathan | 375bd9d737 | |
Gobinath Loganathan | d6a3596faa | |
meztihn | bcecc016dd | |
Dmitriy Q | 32cfc401f3 | |
Hosted Weblate | 9123562d5e | |
Minh P | 06d4aa5afe | |
Gobinath Loganathan | 5e844553dd | |
Gobinath Loganathan | b89fd61cdf | |
Gobinath Loganathan | 7f17dabbfe | |
Anjan Momi | 44e4a0a6ac | |
Anjan Momi | d3594bdb8f | |
Anjan Momi | dd16395471 | |
Gontzal Manuel Pujana Onaindia | 29a1e15192 | |
Dmitriy Q | 6ac60ec17c | |
calbasi | 2f83647d74 | |
Danial Behzadi | 71df387773 | |
AHOHNMYC | 6d66941058 | |
Mohamed Omran | 01f247328e | |
Mohamed Omran | c04a2d2009 | |
Hosted Weblate | 43ed01d3e4 | |
menom | cdcf5d7918 | |
Karl-Philipp Richter | 292ad62729 | |
Pavel Borecki | ed69ddde36 | |
Danial Behzadi | 4b318e4895 | |
albanobattistella | 8483a3db87 | |
AO Localisation Lab | 08dc41f352 | |
albanobattistella | 7ef644e6a2 | |
Hosted Weblate | 5489d952cf | |
Gralias | 846022b8e2 | |
Ankit Raj Pandey | ed60dd1970 | |
Itrych | 2e7df5c880 | |
Hosted Weblate | b673752f8b | |
Frank.wu | b70241ddda | |
Ankit Raj Pandey | ad041c7855 | |
mullerdavid | c784000e69 | |
Federico Ceratto | 8f4b9f2b10 | |
Luna Jernberg | a257c0993d | |
Tymofii Lytvynenko | c61da87600 | |
Tymofii Lytvynenko | 583471c9a0 | |
Yogesh | 541f39fdc0 | |
Allan Nordhøy | 858e8288df | |
Hosted Weblate | cbc29334ac | |
J. Lavoie | 330e343a04 | |
Gobinath | 4638e075ca | |
Gobinath | 5c0c92a8f3 | |
Yaron Shahrabani | f26fb07ffc | |
Hosted Weblate | 54eab4eba0 | |
Jorge Maldonado Ventura | e65426ece4 | |
Porrumentzio | 90458a8ce4 | |
Gobinath | b72ccaa2ea |
|
@ -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'
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -0,0 +1,68 @@
|
||||||
|
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
|
||||||
|
pip install wheel
|
||||||
|
|
||||||
|
- 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
|
|
@ -0,0 +1,31 @@
|
||||||
|
name: Check translations
|
||||||
|
|
||||||
|
# Drop permissions to minimum for security
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
push:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check_translations:
|
||||||
|
name: Check translations
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Set up Python 3.11
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: 3.11
|
||||||
|
|
||||||
|
- name: Install runtime dependencies
|
||||||
|
run: |
|
||||||
|
python3 -m pip install --upgrade pip setuptools wheel
|
||||||
|
python3 -m pip install polib
|
||||||
|
|
||||||
|
- name: Check translations
|
||||||
|
run: |
|
||||||
|
python3 validate_po.py
|
8
LICENSE
|
@ -1,7 +1,7 @@
|
||||||
GNU GENERAL PUBLIC LICENSE
|
GNU GENERAL PUBLIC LICENSE
|
||||||
Version 3, 29 June 2007
|
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
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
of this license document, but changing it is not allowed.
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
@ -645,7 +645,7 @@ the "copyright" line and a pointer to where the full notice is found.
|
||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
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.
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
@ -664,11 +664,11 @@ might be different; for a GUI interface, you would use an "about box".
|
||||||
You should also get your employer (if you work as a programmer) or school,
|
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.
|
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
|
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
|
The GNU General Public License does not permit incorporating your program
|
||||||
into proprietary programs. If your program is a subroutine library, you
|
into proprietary programs. If your program is a subroutine library, you
|
||||||
may consider it more useful to permit linking proprietary applications with
|
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
|
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
|
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>.
|
||||||
|
|
41
README.md
|
@ -4,13 +4,14 @@
|
||||||
[![PyPI version](https://badge.fury.io/py/safeeyes.svg)](https://badge.fury.io/py/safeeyes)
|
[![PyPI version](https://badge.fury.io/py/safeeyes.svg)](https://badge.fury.io/py/safeeyes)
|
||||||
[![Debian](https://badges.debian.net/badges/debian/unstable/safeeyes/version.svg)](https://packages.debian.org/unstable/safeeyes)
|
[![Debian](https://badges.debian.net/badges/debian/unstable/safeeyes/version.svg)](https://packages.debian.org/unstable/safeeyes)
|
||||||
[![AUR](https://img.shields.io/aur/version/safeeyes)](https://aur.archlinux.org/packages/safeeyes)
|
[![AUR](https://img.shields.io/aur/version/safeeyes)](https://aur.archlinux.org/packages/safeeyes)
|
||||||
|
[![Flathub](https://img.shields.io/flathub/v/io.github.slgobinath.SafeEyes)](https://flathub.org/apps/details/io.github.slgobinath.SafeEyes)
|
||||||
[![Translation status](https://hosted.weblate.org/widgets/safe-eyes/-/translations/svg-badge.svg)](https://hosted.weblate.org/engage/safe-eyes/?utm_source=widget)
|
[![Translation status](https://hosted.weblate.org/widgets/safe-eyes/-/translations/svg-badge.svg)](https://hosted.weblate.org/engage/safe-eyes/?utm_source=widget)
|
||||||
[![Awesome Humane Tech](https://raw.githubusercontent.com/humanetech-community/awesome-humane-tech/main/humane-tech-badge.svg?sanitize=true)](https://github.com/humanetech-community/awesome-humane-tech)
|
[![Awesome Humane Tech](https://raw.githubusercontent.com/humanetech-community/awesome-humane-tech/main/humane-tech-badge.svg?sanitize=true)](https://github.com/humanetech-community/awesome-humane-tech)
|
||||||
[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://paypal.me/slgobinath)
|
[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://paypal.me/slgobinath)
|
||||||
|
|
||||||
Protect your eyes from eye strain using this simple and beautiful, yet extensible break reminder.
|
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
|
## Safe Eyes command-line arguments
|
||||||
|
|
||||||
|
@ -59,14 +60,6 @@ sudo emerge -av x11-misc/safeeyes
|
||||||
|
|
||||||
### Debian
|
### 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
|
```bash
|
||||||
sudo apt-get install safeeyes
|
sudo apt-get install safeeyes
|
||||||
```
|
```
|
||||||
|
@ -86,11 +79,23 @@ sudo zypper refresh
|
||||||
sudo zypper install safeeyes
|
sudo zypper install safeeyes
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Alpine Linux
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apk add safeeyes
|
||||||
|
```
|
||||||
|
|
||||||
|
### Flatpak
|
||||||
|
|
||||||
|
```bash
|
||||||
|
flatpak install flathub io.github.slgobinath.SafeEyes
|
||||||
|
```
|
||||||
|
|
||||||
### Other Linux & Run from source
|
### Other Linux & Run from source
|
||||||
|
|
||||||
Ensure to meet the following dependencies:
|
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
|
- gir1.2-notify-0.7
|
||||||
- libappindicator-gtk3
|
- libappindicator-gtk3
|
||||||
- python3-psutil
|
- python3-psutil
|
||||||
|
@ -163,6 +168,22 @@ For more details, please check the issue: [#329](https://github.com/slgobinath/S
|
||||||
|
|
||||||
Thirdparty plugins are available at another GitHub repository: [safeeyes-plugins](https://github.com/slgobinath/safeeyes-plugins). More details about how to write your own plugin and how to install third-party plugin are available there.
|
Thirdparty plugins are available at another GitHub repository: [safeeyes-plugins](https://github.com/slgobinath/safeeyes-plugins). More details about how to write your own plugin and how to install third-party plugin are available there.
|
||||||
|
|
||||||
|
## How to Release?
|
||||||
|
|
||||||
|
1. Checkout the latest commits from the `master` branch
|
||||||
|
2. Run `python3 -m safeeyes` to make sure nothing is broken
|
||||||
|
3. Update the Safe Eyes version in the following places (Open the project in VSCode and search for the current version):
|
||||||
|
- [setup.py](https://github.com/slgobinath/SafeEyes/blob/master/setup.py#L81)
|
||||||
|
- [setup.py](https://github.com/slgobinath/SafeEyes/blob/master/setup.py#L88)
|
||||||
|
- [safeeyes.py](https://github.com/slgobinath/SafeEyes/blob/master/safeeyes/safeeyes.py#L43)
|
||||||
|
- [io.github.slgobinath.SafeEyes.metainfo.xml](https://github.com/slgobinath/SafeEyes/blob/master/safeeyes/platform/io.github.slgobinath.SafeEyes.metainfo.xml#L50)
|
||||||
|
- [about_dialog.glade](https://github.com/slgobinath/SafeEyes/blob/master/safeeyes/glade/about_dialog.glade#L74)
|
||||||
|
4. Update the [changelog](https://github.com/slgobinath/SafeEyes/blob/master/debian/changelog) (for Ubuntu release)
|
||||||
|
5. Commit the changes to `master`
|
||||||
|
6. Create a pull-request from `master` to `release`
|
||||||
|
7. Merge the PR to release **with merge commit** (Important to merge with merge commit)
|
||||||
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
GNU General Public License v3
|
GNU General Public License v3
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
safeeyes (2.1.3-1) xenial; urgency=high
|
safeeyes (2.1.6-0) lunar; urgency=high
|
||||||
* Fix the error if there is no long break
|
* Support Python 3.11
|
||||||
|
|
||||||
|
* Minor bug fixes
|
||||||
|
|
||||||
|
* Fix the ecd ..rror if there is no long break
|
||||||
|
|
||||||
* Add wayland support for do not disturb me plugin
|
* Add wayland support for do not disturb me plugin
|
||||||
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
9
|
10
|
||||||
|
|
|
@ -2,14 +2,14 @@ Source: safeeyes
|
||||||
Section: utils
|
Section: utils
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Maintainer: Gobinath Loganathan <slgobinath@gmail.com>
|
Maintainer: Gobinath Loganathan <slgobinath@gmail.com>
|
||||||
Build-Depends: debhelper (>= 9), python3, python3-setuptools
|
Build-Depends: debhelper (>= 10), dh-python, python3, python3-setuptools
|
||||||
Standards-Version: 3.9.6
|
Standards-Version: 3.9.6
|
||||||
X-Python3-Version: >= 3.5
|
X-Python3-Version: >= 3.5
|
||||||
Homepage: https://github.com/slgobinath/SafeEyes/
|
Homepage: https://github.com/slgobinath/SafeEyes/
|
||||||
|
|
||||||
Package: safeeyes
|
Package: safeeyes
|
||||||
Architecture: all
|
Architecture: all
|
||||||
Depends: ${misc:Depends}, ${python3:Depends}, gir1.2-appindicator3-0.1, python3 (>= 3.5.0), python3-xlib, python3-dbus, gir1.2-notify-0.7, python3-babel, x11-utils, xprintidle, alsa-utils, python3-psutil, python3-croniter
|
Depends: ${misc:Depends}, ${python3:Depends}, gir1.2-ayatanaappindicator3-0.1, python3 (>= 3.5.0), python3-xlib, python3-dbus, gir1.2-notify-0.7, python3-babel, x11-utils, xprintidle, alsa-utils, python3-psutil, python3-croniter
|
||||||
Description: Safe Eyes
|
Description: Safe Eyes
|
||||||
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 avoid eye strain and other physical problems.
|
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 avoid eye strain and other physical problems.
|
||||||
.
|
.
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
safeeyes/platform/safeeyes.desktop usr/share/applications
|
safeeyes/platform/io.github.slgobinath.SafeEyes.desktop usr/share/applications
|
||||||
safeeyes/platform/icons/hicolor/128x128/apps/safeeyes.png usr/share/icons/hicolor/128x128/apps
|
safeeyes/platform/icons/hicolor/128x128/apps/io.github.slgobinath.SafeEyes.png usr/share/icons/hicolor/128x128/apps
|
||||||
safeeyes/platform/icons/hicolor/16x16/apps/safeeyes.png usr/share/icons/hicolor/16x16/apps
|
safeeyes/platform/icons/hicolor/16x16/apps/io.github.slgobinath.SafeEyes.png usr/share/icons/hicolor/16x16/apps
|
||||||
safeeyes/platform/icons/hicolor/16x16/status/safeeyes_disabled.png usr/share/icons/hicolor/16x16/status
|
safeeyes/platform/icons/hicolor/16x16/status/io.github.slgobinath.SafeEyes-disabled.png usr/share/icons/hicolor/16x16/status
|
||||||
safeeyes/platform/icons/hicolor/16x16/status/safeeyes_enabled.png usr/share/icons/hicolor/16x16/status
|
safeeyes/platform/icons/hicolor/16x16/status/io.github.slgobinath.SafeEyes-enabled.png usr/share/icons/hicolor/16x16/status
|
||||||
safeeyes/platform/icons/hicolor/16x16/status/safeeyes_timer.png usr/share/icons/hicolor/16x16/status
|
safeeyes/platform/icons/hicolor/16x16/status/io.github.slgobinath.SafeEyes-timer.png usr/share/icons/hicolor/16x16/status
|
||||||
safeeyes/platform/icons/hicolor/24x24/apps/safeeyes.png usr/share/icons/hicolor/24x24/apps
|
safeeyes/platform/icons/hicolor/24x24/apps/io.github.slgobinath.SafeEyes.png usr/share/icons/hicolor/24x24/apps
|
||||||
safeeyes/platform/icons/hicolor/24x24/status/safeeyes_disabled.png usr/share/icons/hicolor/24x24/status
|
safeeyes/platform/icons/hicolor/24x24/status/io.github.slgobinath.SafeEyes-disabled.png usr/share/icons/hicolor/24x24/status
|
||||||
safeeyes/platform/icons/hicolor/24x24/status/safeeyes_enabled.png usr/share/icons/hicolor/24x24/status
|
safeeyes/platform/icons/hicolor/24x24/status/io.github.slgobinath.SafeEyes-enabled.png usr/share/icons/hicolor/24x24/status
|
||||||
safeeyes/platform/icons/hicolor/24x24/status/safeeyes_timer.png usr/share/icons/hicolor/24x24/status
|
safeeyes/platform/icons/hicolor/24x24/status/io.github.slgobinath.SafeEyes-timer.png usr/share/icons/hicolor/24x24/status
|
||||||
safeeyes/platform/icons/hicolor/32x32/apps/safeeyes.png usr/share/icons/hicolor/32x32/apps
|
safeeyes/platform/icons/hicolor/32x32/apps/io.github.slgobinath.SafeEyes.png usr/share/icons/hicolor/32x32/apps
|
||||||
safeeyes/platform/icons/hicolor/32x32/status/safeeyes_disabled.png usr/share/icons/hicolor/32x32/status
|
safeeyes/platform/icons/hicolor/32x32/status/io.github.slgobinath.SafeEyes-disabled.png usr/share/icons/hicolor/32x32/status
|
||||||
safeeyes/platform/icons/hicolor/32x32/status/safeeyes_enabled.png usr/share/icons/hicolor/32x32/status
|
safeeyes/platform/icons/hicolor/32x32/status/io.github.slgobinath.SafeEyes-enabled.png usr/share/icons/hicolor/32x32/status
|
||||||
safeeyes/platform/icons/hicolor/48x48/apps/safeeyes.png usr/share/icons/hicolor/48x48/apps
|
safeeyes/platform/icons/hicolor/48x48/apps/io.github.slgobinath.SafeEyes.png usr/share/icons/hicolor/48x48/apps
|
||||||
safeeyes/platform/icons/hicolor/48x48/status/safeeyes_disabled.png usr/share/icons/hicolor/48x48/status
|
safeeyes/platform/icons/hicolor/48x48/status/io.github.slgobinath.SafeEyes-disabled.png usr/share/icons/hicolor/48x48/status
|
||||||
safeeyes/platform/icons/hicolor/48x48/status/safeeyes_enabled.png usr/share/icons/hicolor/48x48/status
|
safeeyes/platform/icons/hicolor/48x48/status/io.github.slgobinath.SafeEyes-enabled.png usr/share/icons/hicolor/48x48/status
|
||||||
safeeyes/platform/icons/hicolor/64x64/apps/safeeyes.png usr/share/icons/hicolor/64x64/apps
|
safeeyes/platform/icons/hicolor/64x64/apps/io.github.slgobinath.SafeEyes.png usr/share/icons/hicolor/64x64/apps
|
|
@ -90,9 +90,12 @@ def main():
|
||||||
"""
|
"""
|
||||||
system_locale = gettext.translation('safeeyes', localedir=utility.LOCALE_PATH, languages=[utility.system_locale(), 'en_US'], fallback=True)
|
system_locale = gettext.translation('safeeyes', localedir=utility.LOCALE_PATH, languages=[utility.system_locale(), 'en_US'], fallback=True)
|
||||||
system_locale.install()
|
system_locale.install()
|
||||||
# locale.bindtextdomain is required for Glade files
|
try:
|
||||||
# gettext.bindtextdomain(gettext.textdomain(), Utility.LOCALE_PATH)
|
# locale.bindtextdomain is required for Glade files
|
||||||
locale.bindtextdomain('safeeyes', utility.LOCALE_PATH)
|
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'))
|
parser = argparse.ArgumentParser(prog='safeeyes', description=_('description'))
|
||||||
group = parser.add_mutually_exclusive_group()
|
group = parser.add_mutually_exclusive_group()
|
||||||
|
@ -108,7 +111,7 @@ def main():
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
# Initialize the logging
|
# Initialize the logging
|
||||||
utility.intialize_logging(args.debug)
|
utility.initialize_logging(args.debug)
|
||||||
utility.initialize_platform()
|
utility.initialize_platform()
|
||||||
config = Config()
|
config = Config()
|
||||||
|
|
||||||
|
|
|
@ -6,8 +6,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: 2020-12-23 11:29+0000\n"
|
"PO-Revision-Date: 2022-05-24 17:15+0000\n"
|
||||||
"Last-Translator: Muhammad Hegab <mhegab@hotmail.com>\n"
|
"Last-Translator: Mohamed Omran <mohamedgomran@gmail.com>\n"
|
||||||
"Language-Team: Arabic <https://hosted.weblate.org/projects/safe-eyes/"
|
"Language-Team: Arabic <https://hosted.weblate.org/projects/safe-eyes/"
|
||||||
"translations/ar/>\n"
|
"translations/ar/>\n"
|
||||||
"Language: ar\n"
|
"Language: ar\n"
|
||||||
|
@ -16,7 +16,7 @@ msgstr ""
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
|
"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"
|
"&& 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
|
# Short break
|
||||||
msgid "Tightly close your eyes"
|
msgid "Tightly close your eyes"
|
||||||
|
@ -72,7 +72,7 @@ msgstr "غادر برنامج safeeyes المشتغل حاليّا"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "show the settings dialog"
|
msgid "show the settings dialog"
|
||||||
msgstr "أظهر مربع الإعدادات"
|
msgstr "إظهار لوحة اﻹعدادات"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "start safeeyes in debug mode"
|
msgid "start safeeyes in debug mode"
|
||||||
|
@ -84,7 +84,7 @@ msgstr "أظهر حالة برنامج safeeyes المشتغل حاليا و أ
|
||||||
|
|
||||||
# Status message
|
# Status message
|
||||||
msgid "Safe Eyes is not running"
|
msgid "Safe Eyes is not running"
|
||||||
msgstr "SafeEyes غير مشغل"
|
msgstr "SafeEyes لا يعمل"
|
||||||
|
|
||||||
# RPC not enabled message
|
# RPC not enabled message
|
||||||
msgid ""
|
msgid ""
|
||||||
|
@ -137,7 +137,7 @@ msgstr "مدة التأخير (دقائق)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Show breaks in random order"
|
msgid "Show breaks in random order"
|
||||||
msgstr ""
|
msgstr "اظهِّر الاستراحات بترتيب عشوائي"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Strict break (No way to skip breaks)"
|
msgid "Strict break (No way to skip breaks)"
|
||||||
|
@ -274,7 +274,7 @@ msgstr "من فضلك ثبّت أداة سطر الأوامر '%s'"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Invalid cron expression '%s'"
|
msgid "Invalid cron expression '%s'"
|
||||||
msgstr ""
|
msgstr "تعبير الوظيفة المجدولة غير صحيح '%s'"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Please add the resource %(resource)s to %(config_resource)s directory"
|
msgid "Please add the resource %(resource)s to %(config_resource)s directory"
|
||||||
|
@ -290,7 +290,7 @@ msgstr "إزالة"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Discard"
|
msgid "Discard"
|
||||||
msgstr "اترك"
|
msgstr "تجاهل"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Save"
|
msgid "Save"
|
||||||
|
@ -298,7 +298,7 @@ msgstr "احفظ"
|
||||||
|
|
||||||
# plugin/audiblealert
|
# plugin/audiblealert
|
||||||
msgid "Audible Alert"
|
msgid "Audible Alert"
|
||||||
msgstr "تنبيه مسموع"
|
msgstr "إنذار مسموع"
|
||||||
|
|
||||||
# plugin/audiblealert
|
# plugin/audiblealert
|
||||||
msgid "Play audible alert before and after breaks"
|
msgid "Play audible alert before and after breaks"
|
||||||
|
@ -346,7 +346,7 @@ msgstr "أظهر الإحصاءات بناءً على كيفية استخدام
|
||||||
|
|
||||||
# plugin/healthstats
|
# plugin/healthstats
|
||||||
msgid "Statistics reset interval (cron expression)"
|
msgid "Statistics reset interval (cron expression)"
|
||||||
msgstr ""
|
msgstr "فاصل إعادة ضبط الإحصائيات (تعبير وظيفة مجدولة)"
|
||||||
|
|
||||||
# plugin/notification
|
# plugin/notification
|
||||||
msgid "Notification"
|
msgid "Notification"
|
||||||
|
@ -366,55 +366,55 @@ msgstr "استعد لراحة طويلة بعد %s من الثواني"
|
||||||
|
|
||||||
# plugin/screensaver
|
# plugin/screensaver
|
||||||
msgid "Screensaver"
|
msgid "Screensaver"
|
||||||
msgstr ""
|
msgstr "شاشة التوقف"
|
||||||
|
|
||||||
# plugin/screensaver
|
# plugin/screensaver
|
||||||
msgid "Lock the screen after long breaks by starting screensaver"
|
msgid "Lock the screen after long breaks by starting screensaver"
|
||||||
msgstr ""
|
msgstr "اغلق الشاشة بعد فترة استراحة طويلة عن طريق بدأ شاشة التوقف"
|
||||||
|
|
||||||
# plugin/screensaver
|
# plugin/screensaver
|
||||||
msgid "Custom screensaver command"
|
msgid "Custom screensaver command"
|
||||||
msgstr ""
|
msgstr "أمر شاشة التوقف مخصص"
|
||||||
|
|
||||||
# plugin/screensaver
|
# plugin/screensaver
|
||||||
msgid "Minimum seconds to skip without screensaver"
|
msgid "Minimum seconds to skip without screensaver"
|
||||||
msgstr ""
|
msgstr "أقل عدد ثواني للتخطي بدون شاشة التوقف"
|
||||||
|
|
||||||
# plugin/screensaver
|
# plugin/screensaver
|
||||||
msgid "Lock screen"
|
msgid "Lock screen"
|
||||||
msgstr ""
|
msgstr "اغلق الشاشة"
|
||||||
|
|
||||||
# plugin/smartpause
|
# plugin/smartpause
|
||||||
msgid "Smart Pause"
|
msgid "Smart Pause"
|
||||||
msgstr ""
|
msgstr "التوقف الذكي"
|
||||||
|
|
||||||
# plugin/smartpause
|
# plugin/smartpause
|
||||||
msgid "Pause Safe Eyes if the system is idle"
|
msgid "Pause Safe Eyes if the system is idle"
|
||||||
msgstr ""
|
msgstr "اوقف Safe Eyes إذا كان النظام خاملاً"
|
||||||
|
|
||||||
# plugin/smartpause
|
# plugin/smartpause
|
||||||
msgid "Minimum idle time to pause Safe Eyes (in seconds)"
|
msgid "Minimum idle time to pause Safe Eyes (in seconds)"
|
||||||
msgstr ""
|
msgstr "أقل مدة خمول لإيقاف Safe Eyes (بالثوان)"
|
||||||
|
|
||||||
# plugin/smartpause
|
# plugin/smartpause
|
||||||
msgid "Interpret idle time equivalent to upcoming break duration as a break"
|
msgid "Interpret idle time equivalent to upcoming break duration as a break"
|
||||||
msgstr ""
|
msgstr "تفسير وقت الخمول المكافئ لفترة الاستراحة القادمة على أنه استراحة"
|
||||||
|
|
||||||
# plugin/smartpause
|
# plugin/smartpause
|
||||||
msgid "Postpone the next break until the system becomes idle"
|
msgid "Postpone the next break until the system becomes idle"
|
||||||
msgstr ""
|
msgstr "اجًّل فترة الاستراحة القادمة حتى يصبح النظام خاملاً"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Tray Icon"
|
msgid "Tray Icon"
|
||||||
msgstr ""
|
msgstr "الأيقونة"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Show a tray icon in the notification area"
|
msgid "Show a tray icon in the notification area"
|
||||||
msgstr ""
|
msgstr "أظهِّر الأيقونة في منطقة الإشعارات"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Show next break time in tray icon"
|
msgid "Show next break time in tray icon"
|
||||||
msgstr ""
|
msgstr "أظهِّر وقت الاستراحة القادمة في درج الأيقونة"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Allow disabling Safe Eyes"
|
msgid "Allow disabling Safe Eyes"
|
||||||
|
@ -443,68 +443,68 @@ msgstr "فعِّل Safe Eyes"
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "For %d Hour"
|
msgid "For %d Hour"
|
||||||
msgid_plural "For %d Hours"
|
msgid_plural "For %d Hours"
|
||||||
msgstr[0] ""
|
msgstr[0] "لمدة %d ساعة"
|
||||||
msgstr[1] ""
|
msgstr[1] "لمدة ساعة"
|
||||||
msgstr[2] ""
|
msgstr[2] "لمدة ساعتين"
|
||||||
msgstr[3] ""
|
msgstr[3] "لمدة %d ساعات"
|
||||||
msgstr[4] ""
|
msgstr[4] "لمدة %d ساعة"
|
||||||
msgstr[5] ""
|
msgstr[5] "لمدة %d ساعة"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "For %d Minute"
|
msgid "For %d Minute"
|
||||||
msgid_plural "For %d Minutes"
|
msgid_plural "For %d Minutes"
|
||||||
msgstr[0] ""
|
msgstr[0] "لمدة %d دقيقة"
|
||||||
msgstr[1] ""
|
msgstr[1] "لمدة دقيقة"
|
||||||
msgstr[2] ""
|
msgstr[2] "لمدة دقيقتين"
|
||||||
msgstr[3] ""
|
msgstr[3] "لمدة %d دقائق"
|
||||||
msgstr[4] ""
|
msgstr[4] "لمدة %d دقيقة"
|
||||||
msgstr[5] ""
|
msgstr[5] "لمدة %d دقيقة"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "For %d Second"
|
msgid "For %d Second"
|
||||||
msgid_plural "For %d Seconds"
|
msgid_plural "For %d Seconds"
|
||||||
msgstr[0] ""
|
msgstr[0] "لمدة %d ثانية"
|
||||||
msgstr[1] ""
|
msgstr[1] "لمدة ثانية"
|
||||||
msgstr[2] ""
|
msgstr[2] "لمدة ثانيتين"
|
||||||
msgstr[3] ""
|
msgstr[3] "لمدة %d ثوان"
|
||||||
msgstr[4] ""
|
msgstr[4] "لمدة %d ثانية"
|
||||||
msgstr[5] ""
|
msgstr[5] "لمدة %d ثانية"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Next break at %s"
|
msgid "Next break at %s"
|
||||||
msgstr ""
|
msgstr "فترة الاستراحة القادمة بعد %s"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "No Breaks Available"
|
msgid "No Breaks Available"
|
||||||
msgstr ""
|
msgstr "لا يوجد فترات استراحة متاحة"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr ""
|
msgstr "الإعدادات"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Take a break now"
|
msgid "Take a break now"
|
||||||
msgstr ""
|
msgstr "خُذ استراحة الآن"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Until restart"
|
msgid "Until restart"
|
||||||
msgstr ""
|
msgstr "حتى إعادة التشغيل"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr ""
|
msgstr "اخرج"
|
||||||
|
|
||||||
# plugin/mediacontrol
|
# plugin/mediacontrol
|
||||||
msgid "Media Control"
|
msgid "Media Control"
|
||||||
msgstr ""
|
msgstr "تحكم الوسائط"
|
||||||
|
|
||||||
# plugin/mediacontrol
|
# plugin/mediacontrol
|
||||||
msgid "Pause media players from the break screen"
|
msgid "Pause media players from the break screen"
|
||||||
msgstr ""
|
msgstr "أوقِف مشغلات الوسائط في شاشة فترة الاستراحة"
|
||||||
|
|
||||||
# plugin/mediacontrol
|
# plugin/mediacontrol
|
||||||
msgid "Pause media"
|
msgid "Pause media"
|
||||||
msgstr ""
|
msgstr "أوقِف الوسائط"
|
||||||
|
|
||||||
# plugin/healthstats
|
# plugin/healthstats
|
||||||
#~ msgid "Interval to reset statistics (in hours)"
|
#~ msgid "Interval to reset statistics (in hours)"
|
||||||
|
|
|
@ -6,51 +6,52 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: \n"
|
"PO-Revision-Date: 2024-02-07 05:56+0000\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: Salif Mehmed <mail@salif.eu>\n"
|
||||||
"Language-Team: \n"
|
"Language-Team: Bulgarian <https://hosted.weblate.org/projects/safe-eyes/"
|
||||||
|
"translations/bg/>\n"
|
||||||
"Language: bg\n"
|
"Language: bg\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Generator: Poedit 1.8.7.1\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"X-Generator: Weblate 5.4-dev\n"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Tightly close your eyes"
|
msgid "Tightly close your eyes"
|
||||||
msgstr ""
|
msgstr "Затворете плътно очи"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Roll your eyes a few times to each side"
|
msgid "Roll your eyes a few times to each side"
|
||||||
msgstr ""
|
msgstr "Завъртете очи няколко пъти на всяка страна"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Rotate your eyes in clockwise direction"
|
msgid "Rotate your eyes in clockwise direction"
|
||||||
msgstr ""
|
msgstr "Завъртете очите си по посока на часовниковата стрелка"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Rotate your eyes in counterclockwise direction"
|
msgid "Rotate your eyes in counterclockwise direction"
|
||||||
msgstr ""
|
msgstr "Завъртете очите си обратно на часовниковата стрелка"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Blink your eyes"
|
msgid "Blink your eyes"
|
||||||
msgstr ""
|
msgstr "Мигайте с очи"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Focus on a point in the far distance"
|
msgid "Focus on a point in the far distance"
|
||||||
msgstr ""
|
msgstr "Фокусирайте се върху точка в далечината"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Have some water"
|
msgid "Have some water"
|
||||||
msgstr ""
|
msgstr "Пийте вода"
|
||||||
|
|
||||||
# Long break
|
# Long break
|
||||||
msgid "Walk for a while"
|
msgid "Walk for a while"
|
||||||
msgstr ""
|
msgstr "Разходете се известно време"
|
||||||
|
|
||||||
# Long break
|
# Long break
|
||||||
msgid "Lean back at your seat and relax"
|
msgid "Lean back at your seat and relax"
|
||||||
msgstr ""
|
msgstr "Облегнете се и се отпуснете"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "show the about dialog"
|
msgid "show the about dialog"
|
||||||
|
@ -92,7 +93,7 @@ msgstr ""
|
||||||
|
|
||||||
# About dialog
|
# About dialog
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr "Затваряне"
|
||||||
|
|
||||||
# Description in about dialog
|
# 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
|
# Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you to take breaks while you're working long hours at the computer
|
||||||
|
@ -103,23 +104,23 @@ msgstr ""
|
||||||
|
|
||||||
# About dialog
|
# About dialog
|
||||||
msgid "License"
|
msgid "License"
|
||||||
msgstr ""
|
msgstr "Лиценз"
|
||||||
|
|
||||||
# Break screen
|
# Break screen
|
||||||
msgid "Skip"
|
msgid "Skip"
|
||||||
msgstr ""
|
msgstr "Пропускане"
|
||||||
|
|
||||||
# Break screen
|
# Break screen
|
||||||
msgid "Postpone"
|
msgid "Postpone"
|
||||||
msgstr ""
|
msgstr "Отлагане"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Break duration (in seconds)"
|
msgid "Break duration (in seconds)"
|
||||||
msgstr ""
|
msgstr "Продължителност на почивките (в секунди)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Interval between two breaks (in minutes)"
|
msgid "Interval between two breaks (in minutes)"
|
||||||
msgstr ""
|
msgstr "Интервал между две почивки (в минути)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Time to prepare for a break (in seconds)"
|
msgid "Time to prepare for a break (in seconds)"
|
||||||
|
@ -171,19 +172,19 @@ msgstr ""
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Options"
|
msgid "Options"
|
||||||
msgstr ""
|
msgstr "Опции"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Short Breaks"
|
msgid "Short Breaks"
|
||||||
msgstr ""
|
msgstr "Кратки почивки"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Long Breaks"
|
msgid "Long Breaks"
|
||||||
msgstr ""
|
msgstr "Дълги почивки"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr "Изтриване"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Are you sure you want to delete this break?"
|
msgid "Are you sure you want to delete this break?"
|
||||||
|
@ -195,11 +196,11 @@ msgstr ""
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Break"
|
msgid "Break"
|
||||||
msgstr ""
|
msgstr "Почивка"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Breaks"
|
msgid "Breaks"
|
||||||
msgstr ""
|
msgstr "Почивки"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Plugins"
|
msgid "Plugins"
|
||||||
|
@ -243,11 +244,11 @@ msgstr ""
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Time (in seconds)"
|
msgid "Time (in seconds)"
|
||||||
msgstr ""
|
msgstr "Време (в секунди)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Time (in minutes)"
|
msgid "Time (in minutes)"
|
||||||
msgstr ""
|
msgstr "Време (в минути)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Break Settings"
|
msgid "Break Settings"
|
||||||
|
@ -279,19 +280,19 @@ msgstr ""
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "New Break"
|
msgid "New Break"
|
||||||
msgstr ""
|
msgstr "Нова почивка"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr ""
|
msgstr "Премахване"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Discard"
|
msgid "Discard"
|
||||||
msgstr ""
|
msgstr "Отхвърляне"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Save"
|
msgid "Save"
|
||||||
msgstr ""
|
msgstr "Запазване"
|
||||||
|
|
||||||
# plugin/audiblealert
|
# plugin/audiblealert
|
||||||
msgid "Audible Alert"
|
msgid "Audible Alert"
|
||||||
|
@ -311,7 +312,7 @@ msgstr ""
|
||||||
|
|
||||||
# plugin/donotdisturb
|
# plugin/donotdisturb
|
||||||
msgid "Do Not Disturb"
|
msgid "Do Not Disturb"
|
||||||
msgstr ""
|
msgstr "Не безпокой"
|
||||||
|
|
||||||
# plugin/donotdisturb
|
# plugin/donotdisturb
|
||||||
msgid "Skip break if the active window is in fullscreen mode"
|
msgid "Skip break if the active window is in fullscreen mode"
|
||||||
|
@ -347,7 +348,7 @@ msgstr ""
|
||||||
|
|
||||||
# plugin/notification
|
# plugin/notification
|
||||||
msgid "Notification"
|
msgid "Notification"
|
||||||
msgstr ""
|
msgstr "Известие"
|
||||||
|
|
||||||
# plugin/notification
|
# plugin/notification
|
||||||
msgid "Show a system notification before breaks"
|
msgid "Show a system notification before breaks"
|
||||||
|
@ -419,65 +420,65 @@ msgstr ""
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "About"
|
msgid "About"
|
||||||
msgstr ""
|
msgstr "Относно"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Disable Safe Eyes"
|
msgid "Disable Safe Eyes"
|
||||||
msgstr ""
|
msgstr "Изключване на Safe Eyes"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Disabled until %s"
|
msgid "Disabled until %s"
|
||||||
msgstr ""
|
msgstr "Изключено до %s"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Disabled until restart"
|
msgid "Disabled until restart"
|
||||||
msgstr ""
|
msgstr "Изключено до рестартиране"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Enable Safe Eyes"
|
msgid "Enable Safe Eyes"
|
||||||
msgstr ""
|
msgstr "Включване на Safe Eyes"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "For %d Hour"
|
msgid "For %d Hour"
|
||||||
msgid_plural "For %d Hours"
|
msgid_plural "For %d Hours"
|
||||||
msgstr[0] ""
|
msgstr[0] "За %d Час"
|
||||||
msgstr[1] ""
|
msgstr[1] "За %d Часа"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "For %d Minute"
|
msgid "For %d Minute"
|
||||||
msgid_plural "For %d Minutes"
|
msgid_plural "For %d Minutes"
|
||||||
msgstr[0] ""
|
msgstr[0] "За %d Минута"
|
||||||
msgstr[1] ""
|
msgstr[1] "За %d Минути"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "For %d Second"
|
msgid "For %d Second"
|
||||||
msgid_plural "For %d Seconds"
|
msgid_plural "For %d Seconds"
|
||||||
msgstr[0] ""
|
msgstr[0] "За %d Секунда"
|
||||||
msgstr[1] ""
|
msgstr[1] "За %d Секунди"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Next break at %s"
|
msgid "Next break at %s"
|
||||||
msgstr ""
|
msgstr "Следваща почивка в %s"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "No Breaks Available"
|
msgid "No Breaks Available"
|
||||||
msgstr ""
|
msgstr "Няма налични почивки"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr ""
|
msgstr "Настройки"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Take a break now"
|
msgid "Take a break now"
|
||||||
msgstr ""
|
msgstr "Направете почивка сега"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Until restart"
|
msgid "Until restart"
|
||||||
msgstr ""
|
msgstr "До рестартиране"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr ""
|
msgstr "Изход"
|
||||||
|
|
||||||
# plugin/mediacontrol
|
# plugin/mediacontrol
|
||||||
msgid "Media Control"
|
msgid "Media Control"
|
||||||
|
|
|
@ -6,8 +6,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: 2018-02-01 11:34+0000\n"
|
"PO-Revision-Date: 2022-08-08 21:25+0000\n"
|
||||||
"Last-Translator: Joan Montané <joan@montane.cat>\n"
|
"Last-Translator: calbasi <joan@calbasi.net>\n"
|
||||||
"Language-Team: Catalan <https://hosted.weblate.org/projects/safe-eyes/"
|
"Language-Team: Catalan <https://hosted.weblate.org/projects/safe-eyes/"
|
||||||
"translations/ca/>\n"
|
"translations/ca/>\n"
|
||||||
"Language: ca\n"
|
"Language: ca\n"
|
||||||
|
@ -15,7 +15,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\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
|
# Short break
|
||||||
msgid "Tightly close your eyes"
|
msgid "Tightly close your eyes"
|
||||||
|
@ -55,31 +55,31 @@ msgstr "Reclineu-vos sobre la cadira i relaxeu-vos"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "show the about dialog"
|
msgid "show the about dialog"
|
||||||
msgstr ""
|
msgstr "Mostra la informació Naltros"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "disable the currently running safeeyes instance"
|
msgid "disable the currently running safeeyes instance"
|
||||||
msgstr ""
|
msgstr "Inhabilita la instància de safeeyes en funcionament"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "enable the currently running safeeyes instance"
|
msgid "enable the currently running safeeyes instance"
|
||||||
msgstr ""
|
msgstr "Habilita la instància de safeeyes en funcionament"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "quit the running safeeyes instance and exit"
|
msgid "quit the running safeeyes instance and exit"
|
||||||
msgstr ""
|
msgstr "Tanca de la instància de safeeyes en funcionament i surt"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "show the settings dialog"
|
msgid "show the settings dialog"
|
||||||
msgstr ""
|
msgstr "Mostra la finestra de preferències"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "start safeeyes in debug mode"
|
msgid "start safeeyes in debug mode"
|
||||||
msgstr ""
|
msgstr "Inicia safeeyes en mode de depuració"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "print the status of running safeeyes instance and exit"
|
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
|
# Status message
|
||||||
msgid "Safe Eyes is not running"
|
msgid "Safe Eyes is not running"
|
||||||
|
@ -139,11 +139,11 @@ msgstr "Durada d'una posposició (en minuts)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Show breaks in random order"
|
msgid "Show breaks in random order"
|
||||||
msgstr ""
|
msgstr "Mostra les pauses en ordre aleatori"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Strict break (No way to skip breaks)"
|
msgid "Strict break (No way to skip breaks)"
|
||||||
msgstr ""
|
msgstr "Pauses estrictes (sense possibilitat de saltar-se-les)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Allow postponing breaks"
|
msgid "Allow postponing breaks"
|
||||||
|
@ -167,99 +167,99 @@ msgstr ""
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Reset"
|
msgid "Reset"
|
||||||
msgstr ""
|
msgstr "Restablir"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Are you sure you want to reset all settings to default?"
|
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
|
# Settings dialog
|
||||||
msgid "Options"
|
msgid "Options"
|
||||||
msgstr ""
|
msgstr "Opcions"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Short Breaks"
|
msgid "Short Breaks"
|
||||||
msgstr ""
|
msgstr "Pauses curtes"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Long Breaks"
|
msgid "Long Breaks"
|
||||||
msgstr ""
|
msgstr "Pauses llargues"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr "Suprimeix"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Are you sure you want to delete this break?"
|
msgid "Are you sure you want to delete this break?"
|
||||||
msgstr ""
|
msgstr "De veritat que voleu suprimir aquesta pausa?"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "You can't undo this action."
|
msgid "You can't undo this action."
|
||||||
msgstr ""
|
msgstr "Aquesta acció no podrà revertir-se."
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Break"
|
msgid "Break"
|
||||||
msgstr ""
|
msgstr "Pausa"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Breaks"
|
msgid "Breaks"
|
||||||
msgstr ""
|
msgstr "Pauses"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Plugins"
|
msgid "Plugins"
|
||||||
msgstr ""
|
msgstr "Complements"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Type"
|
msgid "Type"
|
||||||
msgstr ""
|
msgstr "Tipus"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Short"
|
msgid "Short"
|
||||||
msgstr ""
|
msgstr "Curta"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Long"
|
msgid "Long"
|
||||||
msgstr ""
|
msgstr "Llarga"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Image"
|
msgid "Image"
|
||||||
msgstr ""
|
msgstr "Imatge"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Select"
|
msgid "Select"
|
||||||
msgstr ""
|
msgstr "Trieu"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Please select an image"
|
msgid "Please select an image"
|
||||||
msgstr ""
|
msgstr "Si us plau, trieu una imatge"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Duration"
|
msgid "Duration"
|
||||||
msgstr ""
|
msgstr "Durada"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Time to wait"
|
msgid "Time to wait"
|
||||||
msgstr ""
|
msgstr "Temps d'espera"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Override"
|
msgid "Override"
|
||||||
msgstr ""
|
msgstr "Sobreescriu"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Time (in seconds)"
|
msgid "Time (in seconds)"
|
||||||
msgstr ""
|
msgstr "Temps (en segons)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Time (in minutes)"
|
msgid "Time (in minutes)"
|
||||||
msgstr ""
|
msgstr "Temps (en minuts)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Break Settings"
|
msgid "Break Settings"
|
||||||
msgstr ""
|
msgstr "Preferències de la pausa"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Plugin Settings"
|
msgid "Plugin Settings"
|
||||||
msgstr ""
|
msgstr "Preferències del complement"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Plugin does not support %s desktop environment"
|
msgid "Plugin does not support %s desktop environment"
|
||||||
|
@ -283,15 +283,15 @@ msgstr ""
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "New Break"
|
msgid "New Break"
|
||||||
msgstr ""
|
msgstr "Nova Pausa"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr ""
|
msgstr "Suprimeix"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Discard"
|
msgid "Discard"
|
||||||
msgstr ""
|
msgstr "Descarta-ho"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Save"
|
msgid "Save"
|
||||||
|
@ -299,7 +299,7 @@ msgstr "Desa"
|
||||||
|
|
||||||
# plugin/audiblealert
|
# plugin/audiblealert
|
||||||
msgid "Audible Alert"
|
msgid "Audible Alert"
|
||||||
msgstr ""
|
msgstr "Alerta audible"
|
||||||
|
|
||||||
# plugin/audiblealert
|
# plugin/audiblealert
|
||||||
msgid "Play audible alert before and after breaks"
|
msgid "Play audible alert before and after breaks"
|
||||||
|
@ -315,7 +315,7 @@ msgstr ""
|
||||||
|
|
||||||
# plugin/donotdisturb
|
# plugin/donotdisturb
|
||||||
msgid "Do Not Disturb"
|
msgid "Do Not Disturb"
|
||||||
msgstr ""
|
msgstr "No molesteu"
|
||||||
|
|
||||||
# plugin/donotdisturb
|
# plugin/donotdisturb
|
||||||
msgid "Skip break if the active window is in fullscreen mode"
|
msgid "Skip break if the active window is in fullscreen mode"
|
||||||
|
@ -339,7 +339,7 @@ msgstr ""
|
||||||
|
|
||||||
# plugin/healthstats
|
# plugin/healthstats
|
||||||
msgid "Health Statistics"
|
msgid "Health Statistics"
|
||||||
msgstr ""
|
msgstr "Estadístiques de salut"
|
||||||
|
|
||||||
# plugin/healthstats
|
# plugin/healthstats
|
||||||
msgid "Show statistics based on how you use Safe Eyes"
|
msgid "Show statistics based on how you use Safe Eyes"
|
||||||
|
|
|
@ -6,8 +6,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: 2019-11-26 16:05+0000\n"
|
"PO-Revision-Date: 2023-10-31 16:04+0000\n"
|
||||||
"Last-Translator: Pavel Borecki <pavel.borecki@gmail.com>\n"
|
"Last-Translator: Kryštof Jelínek <krystof186@gmail.com>\n"
|
||||||
"Language-Team: Czech <https://hosted.weblate.org/projects/safe-eyes/"
|
"Language-Team: Czech <https://hosted.weblate.org/projects/safe-eyes/"
|
||||||
"translations/cs/>\n"
|
"translations/cs/>\n"
|
||||||
"Language: cs\n"
|
"Language: cs\n"
|
||||||
|
@ -15,7 +15,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\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 5.2-dev\n"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Tightly close your eyes"
|
msgid "Tightly close your eyes"
|
||||||
|
@ -23,15 +23,15 @@ msgstr "Zavřete oči"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Roll your eyes a few times to each side"
|
msgid "Roll your eyes a few times to each side"
|
||||||
msgstr "Zakroužete očima (několikrát na každou stranu)"
|
msgstr "Zakružte očima (několikrát na každou stranu)"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Rotate your eyes in clockwise direction"
|
msgid "Rotate your eyes in clockwise direction"
|
||||||
msgstr "Zakroužete očima ve směru hodinových ručiček"
|
msgstr "Zakružte očima ve směru hodinových ručiček"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Rotate your eyes in counterclockwise direction"
|
msgid "Rotate your eyes in counterclockwise direction"
|
||||||
msgstr "Zakroužete očima proti směru hodinových ručiček"
|
msgstr "Zakružte očima proti směru hodinových ručiček"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Blink your eyes"
|
msgid "Blink your eyes"
|
||||||
|
@ -140,7 +140,7 @@ msgstr "Odložit trvání (v minutách)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Show breaks in random order"
|
msgid "Show breaks in random order"
|
||||||
msgstr ""
|
msgstr "Zobrazovat přestávky v náhodném pořadí"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Strict break (No way to skip breaks)"
|
msgid "Strict break (No way to skip breaks)"
|
||||||
|
@ -276,7 +276,7 @@ msgstr "Nainstalujte si nástroj pro příkazový řádek „%s“"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Invalid cron expression '%s'"
|
msgid "Invalid cron expression '%s'"
|
||||||
msgstr ""
|
msgstr "Neplatný výraz pro plánovač (cron) „%s“"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Please add the resource %(resource)s to %(config_resource)s directory"
|
msgid "Please add the resource %(resource)s to %(config_resource)s directory"
|
||||||
|
@ -349,7 +349,7 @@ msgstr "Zobrazit zdravotní statistiky založené na používání Safe Eyes"
|
||||||
|
|
||||||
# plugin/healthstats
|
# plugin/healthstats
|
||||||
msgid "Statistics reset interval (cron expression)"
|
msgid "Statistics reset interval (cron expression)"
|
||||||
msgstr ""
|
msgstr "Interval vynulování statistik (výraz pro plánovač cron)"
|
||||||
|
|
||||||
# plugin/notification
|
# plugin/notification
|
||||||
msgid "Notification"
|
msgid "Notification"
|
||||||
|
|
|
@ -6,8 +6,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: 2021-03-07 09:50+0000\n"
|
"PO-Revision-Date: 2023-07-04 20:53+0000\n"
|
||||||
"Last-Translator: J. Lavoie <j.lavoie@net-c.ca>\n"
|
"Last-Translator: Sebastian Pipping <sebastian@pipping.org>\n"
|
||||||
"Language-Team: German <https://hosted.weblate.org/projects/safe-eyes/"
|
"Language-Team: German <https://hosted.weblate.org/projects/safe-eyes/"
|
||||||
"translations/de/>\n"
|
"translations/de/>\n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
|
@ -15,7 +15,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"X-Generator: Weblate 4.5.1\n"
|
"X-Generator: Weblate 5.0-dev\n"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Tightly close your eyes"
|
msgid "Tightly close your eyes"
|
||||||
|
@ -102,7 +102,10 @@ msgstr "Schließen"
|
||||||
msgid ""
|
msgid ""
|
||||||
"Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you "
|
"Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you "
|
||||||
"to take breaks while you're working long hours at the computer"
|
"to take breaks while you're working long hours at the computer"
|
||||||
msgstr "Beschreibung"
|
msgstr ""
|
||||||
|
"Safe Eyes schützt Ihre Augen vor Beschwerden (Asthenopie), indem es Sie "
|
||||||
|
"regelmäßig erinnert, Pausen zu machen, wenn Sie längere Zeit am Bildschirm "
|
||||||
|
"verbringen"
|
||||||
|
|
||||||
# About dialog
|
# About dialog
|
||||||
msgid "License"
|
msgid "License"
|
||||||
|
|
|
@ -6,8 +6,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: 2017-09-17 07:59-0400\n"
|
"POT-Creation-Date: 2017-09-17 07:59-0400\n"
|
||||||
"PO-Revision-Date: 2020-06-17 18:41+0000\n"
|
"PO-Revision-Date: 2021-07-04 07:32+0000\n"
|
||||||
"Last-Translator: Aanand Kainth <akainth015@gmail.com>\n"
|
"Last-Translator: J. Lavoie <j.lavoie@net-c.ca>\n"
|
||||||
"Language-Team: English (United States) <https://hosted.weblate.org/projects/"
|
"Language-Team: English (United States) <https://hosted.weblate.org/projects/"
|
||||||
"safe-eyes/translations/en_US/>\n"
|
"safe-eyes/translations/en_US/>\n"
|
||||||
"Language: en_US\n"
|
"Language: en_US\n"
|
||||||
|
@ -15,7 +15,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\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"
|
"Generated-By: pygettext.py 1.5\n"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
|
@ -277,7 +277,7 @@ msgstr "Please install the command-line tool '%s'"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Invalid cron expression '%s'"
|
msgid "Invalid cron expression '%s'"
|
||||||
msgstr ""
|
msgstr "Invalid cron expression “%s”"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Please add the resource %(resource)s to %(config_resource)s directory"
|
msgid "Please add the resource %(resource)s to %(config_resource)s directory"
|
||||||
|
|
|
@ -6,7 +6,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: 2017-09-17 07:59-0400\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 <jorgesumle@freakspot.net>\n"
|
"Last-Translator: Jorge Maldonado Ventura <jorgesumle@freakspot.net>\n"
|
||||||
"Language-Team: Esperanto <https://hosted.weblate.org/projects/safe-eyes/"
|
"Language-Team: Esperanto <https://hosted.weblate.org/projects/safe-eyes/"
|
||||||
"translations/eo/>\n"
|
"translations/eo/>\n"
|
||||||
|
@ -15,7 +15,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\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"
|
"Generated-By: pygettext.py 1.5\n"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
|
@ -44,7 +44,7 @@ msgstr "Fokusu malfermegan punkton"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Have some water"
|
msgid "Have some water"
|
||||||
msgstr "Trinku kelke da akvon"
|
msgstr "Trinku kelke da akvo"
|
||||||
|
|
||||||
# Long break
|
# Long break
|
||||||
msgid "Walk for a while"
|
msgid "Walk for a while"
|
||||||
|
|
|
@ -6,7 +6,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: 2021-04-15 12:26+0000\n"
|
"PO-Revision-Date: 2023-01-07 11:49+0000\n"
|
||||||
"Last-Translator: Porrumentzio <porrumentzio@riseup.net>\n"
|
"Last-Translator: Porrumentzio <porrumentzio@riseup.net>\n"
|
||||||
"Language-Team: Basque <https://hosted.weblate.org/projects/safe-eyes/"
|
"Language-Team: Basque <https://hosted.weblate.org/projects/safe-eyes/"
|
||||||
"translations/eu/>\n"
|
"translations/eu/>\n"
|
||||||
|
@ -15,7 +15,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"X-Generator: Weblate 4.6-dev\n"
|
"X-Generator: Weblate 4.15.1-dev\n"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Tightly close your eyes"
|
msgid "Tightly close your eyes"
|
||||||
|
@ -23,15 +23,15 @@ msgstr "Itxi begiak indarrez"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Roll your eyes a few times to each side"
|
msgid "Roll your eyes a few times to each side"
|
||||||
msgstr "Mugitu begiak alde bakoitzera pare bat aldiz"
|
msgstr "Mugitu begiak aldez alde"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Rotate your eyes in clockwise direction"
|
msgid "Rotate your eyes in clockwise direction"
|
||||||
msgstr "Biratu begiak erlojuaren noranzkoan"
|
msgstr "Biratu begiak erloju-orratzen noranzkoan"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Rotate your eyes in counterclockwise direction"
|
msgid "Rotate your eyes in counterclockwise direction"
|
||||||
msgstr "Biratu begiak erlojuaren aurkako noranzkoan"
|
msgstr "Biratu begiak erloju-orratzen kontrako noranzkoan"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Blink your eyes"
|
msgid "Blink your eyes"
|
||||||
|
@ -71,7 +71,7 @@ msgstr "itxi uneko safeeyes instantzia eta irten"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "show the settings dialog"
|
msgid "show the settings dialog"
|
||||||
msgstr "erakutsi ezarpenen elkarrizketa-koadroa"
|
msgstr "erakutsi ezarpenak"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "start safeeyes in debug mode"
|
msgid "start safeeyes in debug mode"
|
||||||
|
@ -90,8 +90,8 @@ msgid ""
|
||||||
"Safe Eyes is running without an RPC server. Turn it on to use command-line "
|
"Safe Eyes is running without an RPC server. Turn it on to use command-line "
|
||||||
"arguments."
|
"arguments."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Safe Eyes RPC zerbitzaririk gabe exekutatzen ari da. Piztu ezazu komando-"
|
"RPC zerbitzaririk gabe ari da exekutatzen Safe Eyes. Piztu zerbitzaria "
|
||||||
"lerroko argumentuak erabiltzeko."
|
"komando-lerroko argumentuak erabiltzeko."
|
||||||
|
|
||||||
# About dialog
|
# About dialog
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
|
@ -103,8 +103,8 @@ msgid ""
|
||||||
"Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you "
|
"Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you "
|
||||||
"to take breaks while you're working long hours at the computer"
|
"to take breaks while you're working long hours at the computer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Safe Eyes-ek zure begiak begi-neketik (astenopia) babesten ditu "
|
"Safe Eyes-ek begi-neketik (astenopiatik) babesten zaitu ordenagailuan ordu "
|
||||||
"ordenagailuan ordu luzez zabiltzanean atsedenaldiak hartzeaz gogoraraziz"
|
"luzez zabiltzanean etenaldiak egiteko gogoraraziz"
|
||||||
|
|
||||||
# About dialog
|
# About dialog
|
||||||
msgid "License"
|
msgid "License"
|
||||||
|
@ -120,19 +120,19 @@ msgstr "Atzeratu"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Break duration (in seconds)"
|
msgid "Break duration (in seconds)"
|
||||||
msgstr "Atsedenaldiaren iraupena (segundotan)"
|
msgstr "Etenaldiaren iraupena (segundotan)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Interval between two breaks (in minutes)"
|
msgid "Interval between two breaks (in minutes)"
|
||||||
msgstr "Bi atsedenaldien arteko tartea (minututan)"
|
msgstr "Bi etenaldiren arteko tartea (minututan)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Time to prepare for a break (in seconds)"
|
msgid "Time to prepare for a break (in seconds)"
|
||||||
msgstr "Atsedenaldirako prestatzeko denbora (segundotan)"
|
msgstr "Etenaldirako prestatzeko denbora (segundotan)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Keyboard shortcuts disabled period (in seconds)"
|
msgid "Keyboard shortcuts disabled period (in seconds)"
|
||||||
msgstr "Laster-teklak desgaitutako unea (segundotan)"
|
msgstr "Laster-teklak desgaitutako aldia (segundotan)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Postponement duration (in minutes)"
|
msgid "Postponement duration (in minutes)"
|
||||||
|
@ -140,15 +140,15 @@ msgstr "Atzerapenaren iraupena (minututan)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Show breaks in random order"
|
msgid "Show breaks in random order"
|
||||||
msgstr "Erakutsi atsedenaldiak ausazko ordenean"
|
msgstr "Erakutsi etenaldiak ausazko ordenan"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Strict break (No way to skip breaks)"
|
msgid "Strict break (No way to skip breaks)"
|
||||||
msgstr "Atsedenaldi zorrotza (saltatzeko modurik ez)"
|
msgstr "Etenaldi zorrotza (saltatzeko modurik ez)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Allow postponing breaks"
|
msgid "Allow postponing breaks"
|
||||||
msgstr "Baimendu atsedenaldiak atzeratzea"
|
msgstr "Baimendu etenaldiak atzeratzea"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Persist the internal state"
|
msgid "Persist the internal state"
|
||||||
|
@ -164,7 +164,9 @@ msgstr "RPC zerbitzaririk gabe, komandu-lineako komanduek ez dute funtzionatuko"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Long break interval must be a multiple of short break interval"
|
msgid "Long break interval must be a multiple of short break interval"
|
||||||
msgstr "Atsedenaldik luzeak, motzen multzoa izan behar du"
|
msgstr ""
|
||||||
|
"Etenaldi luzeen arteko tarteak motzen arteko tartearen multiploa izan behar "
|
||||||
|
"du"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Reset"
|
msgid "Reset"
|
||||||
|
@ -172,7 +174,7 @@ msgstr "Berrezarri"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Are you sure you want to reset all settings to default?"
|
msgid "Are you sure you want to reset all settings to default?"
|
||||||
msgstr "Ziur ezarpen guztiak lehenetsitakoetara berrezarri nahi dituzula?"
|
msgstr "Ziur ezarpen guztiak lehenetsietara berrezarri nahi dituzula?"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Options"
|
msgid "Options"
|
||||||
|
@ -180,11 +182,11 @@ msgstr "Aukerak"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Short Breaks"
|
msgid "Short Breaks"
|
||||||
msgstr "Atsedenaldi motzak"
|
msgstr "Etenaldi motzak"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Long Breaks"
|
msgid "Long Breaks"
|
||||||
msgstr "Atsedenaldi luzeak"
|
msgstr "Etenaldi luzeak"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
|
@ -192,7 +194,7 @@ msgstr "Ezabatu"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Are you sure you want to delete this break?"
|
msgid "Are you sure you want to delete this break?"
|
||||||
msgstr "Ziur atsedenaldi hau ezabatu nahi duzula?"
|
msgstr "Ziur etenaldi hau ezabatu nahi duzula?"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "You can't undo this action."
|
msgid "You can't undo this action."
|
||||||
|
@ -200,11 +202,11 @@ msgstr "Ekintza hau ezin da desegin."
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Break"
|
msgid "Break"
|
||||||
msgstr "Atsedenaldia"
|
msgstr "Etenaldia"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Breaks"
|
msgid "Breaks"
|
||||||
msgstr "Atsedenaldiak"
|
msgstr "Etenaldiak"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Plugins"
|
msgid "Plugins"
|
||||||
|
@ -256,7 +258,7 @@ msgstr "Denbora (minututan)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Break Settings"
|
msgid "Break Settings"
|
||||||
msgstr "Atsedenaldien ezarpenak"
|
msgstr "Etenaldien ezarpenak"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Plugin Settings"
|
msgid "Plugin Settings"
|
||||||
|
@ -284,7 +286,7 @@ msgstr "Gehitu %(resource)s baliabidea %(config_resource)s direktorioan"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "New Break"
|
msgid "New Break"
|
||||||
msgstr "Atsedenaldi berria"
|
msgstr "Etenaldi berria"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
|
@ -304,15 +306,15 @@ msgstr "Abisu entzungarria"
|
||||||
|
|
||||||
# plugin/audiblealert
|
# plugin/audiblealert
|
||||||
msgid "Play audible alert before and after breaks"
|
msgid "Play audible alert before and after breaks"
|
||||||
msgstr "Erreproduzitu abisu entzungarria atsedenaldien aurretik eta ondoren"
|
msgstr "Erreproduzitu abisu entzungarri bat etenaldien aurretik eta ondoren"
|
||||||
|
|
||||||
# plugin/audiblealert
|
# plugin/audiblealert
|
||||||
msgid "Play audible alert before breaks"
|
msgid "Play audible alert before breaks"
|
||||||
msgstr "Erreproduzitu abisu entzungarria atsedenaldien aurretik"
|
msgstr "Erreproduzitu abisu entzungarria etenaldien aurretik"
|
||||||
|
|
||||||
# plugin/audiblealert
|
# plugin/audiblealert
|
||||||
msgid "Play audible alert after breaks"
|
msgid "Play audible alert after breaks"
|
||||||
msgstr "Erreproduzitu abisu entzungarria atsedenaldien ondoren"
|
msgstr "Erreproduzitu abisu entzungarria etenaldien ondoren"
|
||||||
|
|
||||||
# plugin/donotdisturb
|
# plugin/donotdisturb
|
||||||
msgid "Do Not Disturb"
|
msgid "Do Not Disturb"
|
||||||
|
@ -320,11 +322,11 @@ msgstr "Ez molestatu"
|
||||||
|
|
||||||
# plugin/donotdisturb
|
# plugin/donotdisturb
|
||||||
msgid "Skip break if the active window is in fullscreen mode"
|
msgid "Skip break if the active window is in fullscreen mode"
|
||||||
msgstr "Saltatu atsedenaldia uneko leihoa pantaila osoan badago"
|
msgstr "Saltatu etenaldia leiho aktiboa pantaila osoan badago"
|
||||||
|
|
||||||
# plugin/donotdisturb
|
# plugin/donotdisturb
|
||||||
msgid "Do not interrupt these windows anytime"
|
msgid "Do not interrupt these windows anytime"
|
||||||
msgstr "Ez eten honako leihoetan edonola ere"
|
msgstr "Ez eten honako leihoetan inoiz ere"
|
||||||
|
|
||||||
# plugin/donotdisturb
|
# plugin/donotdisturb
|
||||||
msgid "Interrupt these windows regardless of their state"
|
msgid "Interrupt these windows regardless of their state"
|
||||||
|
@ -356,15 +358,15 @@ msgstr "Jakinarazpena"
|
||||||
|
|
||||||
# plugin/notification
|
# plugin/notification
|
||||||
msgid "Show a system notification before breaks"
|
msgid "Show a system notification before breaks"
|
||||||
msgstr "Erakutsi sistemako jakinarazpena atsedenaldien aurretik"
|
msgstr "Erakutsi sistemako jakinarazpen bat etenaldien aurretik"
|
||||||
|
|
||||||
# plugin/notification
|
# plugin/notification
|
||||||
msgid "Ready for a short break in %s seconds"
|
msgid "Ready for a short break in %s seconds"
|
||||||
msgstr "Prestatu %s segundo barru atsedenaldi motza egiteko"
|
msgstr "Prestatu %s segundo barru etenaldi motza egiteko"
|
||||||
|
|
||||||
# plugin/notification
|
# plugin/notification
|
||||||
msgid "Ready for a long break in %s seconds"
|
msgid "Ready for a long break in %s seconds"
|
||||||
msgstr "Prestatu %s segundo barru atsedenaldi luzea egiteko"
|
msgstr "Prestatu %s segundo barru etenaldi luzea egiteko"
|
||||||
|
|
||||||
# plugin/screensaver
|
# plugin/screensaver
|
||||||
msgid "Screensaver"
|
msgid "Screensaver"
|
||||||
|
@ -373,7 +375,7 @@ msgstr "Pantaila babeslea"
|
||||||
# plugin/screensaver
|
# plugin/screensaver
|
||||||
msgid "Lock the screen after long breaks by starting screensaver"
|
msgid "Lock the screen after long breaks by starting screensaver"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Blokeatu pantaila atsedenaldi luzeen ondoren pantaila-babeslea erakutsiz"
|
"Blokeatu pantaila etenaldi luzeen ondoren eta erakutsi pantaila-babeslea"
|
||||||
|
|
||||||
# plugin/screensaver
|
# plugin/screensaver
|
||||||
msgid "Custom screensaver command"
|
msgid "Custom screensaver command"
|
||||||
|
@ -381,7 +383,7 @@ msgstr "Pantaila-babeslearentzako komando pertsonalizatua"
|
||||||
|
|
||||||
# plugin/screensaver
|
# plugin/screensaver
|
||||||
msgid "Minimum seconds to skip without screensaver"
|
msgid "Minimum seconds to skip without screensaver"
|
||||||
msgstr "Pantaila-babeslerik gabe saltatzeko gutxieneko segundoak"
|
msgstr "Pantaila-babesle erakutsi gabe saltatzeko segundoak"
|
||||||
|
|
||||||
# plugin/screensaver
|
# plugin/screensaver
|
||||||
msgid "Lock screen"
|
msgid "Lock screen"
|
||||||
|
@ -397,18 +399,17 @@ msgstr "Pausatu Safe Eyes sistema inaktibo badago"
|
||||||
|
|
||||||
# plugin/smartpause
|
# plugin/smartpause
|
||||||
msgid "Minimum idle time to pause Safe Eyes (in seconds)"
|
msgid "Minimum idle time to pause Safe Eyes (in seconds)"
|
||||||
msgstr "Safe Eyes pausatzeko gutxieneko denbora inaktiboa (segundotan)"
|
msgstr "Safe Eyes pausatzeko pasa behar den denbora inaktiboa (segundotan)"
|
||||||
|
|
||||||
# plugin/smartpause
|
# plugin/smartpause
|
||||||
#, fuzzy
|
|
||||||
msgid "Interpret idle time equivalent to upcoming break duration as a break"
|
msgid "Interpret idle time equivalent to upcoming break duration as a break"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Interpretatu denbora inaktiboa hurrengo atsedenaldiaren iraupenaren "
|
"Tratatu denbora inaktiboa etenaldi gisa, inaktibo emandako denbora datorren "
|
||||||
"baliokide, atsedenaldi gisa"
|
"etenaldiaren iraupen berekoa izan bada"
|
||||||
|
|
||||||
# plugin/smartpause
|
# plugin/smartpause
|
||||||
msgid "Postpone the next break until the system becomes idle"
|
msgid "Postpone the next break until the system becomes idle"
|
||||||
msgstr "Atzeratu hurrengo atsedenaldia sistema inaktibo egon arte"
|
msgstr "Atzeratu hurrengo etenaldia sistema inaktibo egon arte"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Tray Icon"
|
msgid "Tray Icon"
|
||||||
|
@ -420,7 +421,7 @@ msgstr "Erakutsi erretiluko ikonoa jakinarazpenen eremuan"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Show next break time in tray icon"
|
msgid "Show next break time in tray icon"
|
||||||
msgstr "Erakutsi hurrengo atsedenaldia erretiluko ikonoan"
|
msgstr "Erakutsi hurrengo etenaldia erretiluko ikonoan"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Allow disabling Safe Eyes"
|
msgid "Allow disabling Safe Eyes"
|
||||||
|
@ -449,28 +450,28 @@ msgstr "Gaitu Safe Eyes"
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "For %d Hour"
|
msgid "For %d Hour"
|
||||||
msgid_plural "For %d Hours"
|
msgid_plural "For %d Hours"
|
||||||
msgstr[0] "Ordubeterako"
|
msgstr[0] "Ordu %dez"
|
||||||
msgstr[1] "%d ordurako"
|
msgstr[1] "%d orduz"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "For %d Minute"
|
msgid "For %d Minute"
|
||||||
msgid_plural "For %d Minutes"
|
msgid_plural "For %d Minutes"
|
||||||
msgstr[0] "Minutu baterako"
|
msgstr[0] "Minutu %dez"
|
||||||
msgstr[1] "%d minuturako"
|
msgstr[1] "%d minutuz"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "For %d Second"
|
msgid "For %d Second"
|
||||||
msgid_plural "For %d Seconds"
|
msgid_plural "For %d Seconds"
|
||||||
msgstr[0] "Segundo baterako"
|
msgstr[0] "Segundo %dez"
|
||||||
msgstr[1] "%d segundorako"
|
msgstr[1] "%d segundoz"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Next break at %s"
|
msgid "Next break at %s"
|
||||||
msgstr "Hurrengo atsedenaldia: %s"
|
msgstr "Hurrengo etenaldia: %s"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "No Breaks Available"
|
msgid "No Breaks Available"
|
||||||
msgstr "Atsedenaldirik ez erabilgarri"
|
msgstr "Etenaldirik ez erabilgarri"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
|
@ -478,7 +479,7 @@ msgstr "Ezarpenak"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Take a break now"
|
msgid "Take a break now"
|
||||||
msgstr "Hartu atsedenaldia orain"
|
msgstr "Egin orain etenaldia"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Until restart"
|
msgid "Until restart"
|
||||||
|
@ -486,7 +487,7 @@ msgstr "Berrabiarazi arte"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Utzi"
|
msgstr "Irten"
|
||||||
|
|
||||||
# plugin/mediacontrol
|
# plugin/mediacontrol
|
||||||
msgid "Media Control"
|
msgid "Media Control"
|
||||||
|
@ -494,7 +495,7 @@ msgstr "Multimediaren kontrola"
|
||||||
|
|
||||||
# plugin/mediacontrol
|
# plugin/mediacontrol
|
||||||
msgid "Pause media players from the break screen"
|
msgid "Pause media players from the break screen"
|
||||||
msgstr "Pausatu multimedia erreproduzitzaileak atsedenaldiaren pantailatik"
|
msgstr "Pausatu multimedia etenaldiaren pantailatik"
|
||||||
|
|
||||||
# plugin/mediacontrol
|
# plugin/mediacontrol
|
||||||
msgid "Pause media"
|
msgid "Pause media"
|
||||||
|
|
|
@ -6,8 +6,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: 2020-10-23 17:20+0000\n"
|
"PO-Revision-Date: 2022-07-07 10:18+0000\n"
|
||||||
"Last-Translator: mohammadbagher fakouri <mbfakourii@gmail.com>\n"
|
"Last-Translator: Danial Behzadi <dani.behzi@ubuntu.com>\n"
|
||||||
"Language-Team: Persian <https://hosted.weblate.org/projects/safe-eyes/"
|
"Language-Team: Persian <https://hosted.weblate.org/projects/safe-eyes/"
|
||||||
"translations/fa/>\n"
|
"translations/fa/>\n"
|
||||||
"Language: fa\n"
|
"Language: fa\n"
|
||||||
|
@ -15,7 +15,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n > 1;\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
|
# Short break
|
||||||
msgid "Tightly close your eyes"
|
msgid "Tightly close your eyes"
|
||||||
|
@ -27,11 +27,11 @@ msgstr "چندبار چشمانتان را به اطراف بچرخانید"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Rotate your eyes in clockwise direction"
|
msgid "Rotate your eyes in clockwise direction"
|
||||||
msgstr "چشمان خود را در جهت عقربه های ساعت بچرخانید"
|
msgstr "چشمانتان را ساعتگرد بچرخانید"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Rotate your eyes in counterclockwise direction"
|
msgid "Rotate your eyes in counterclockwise direction"
|
||||||
msgstr "چشم هایتان را در خلاف جهت عقربه های ساعت بچرخانید"
|
msgstr "چشمانتان را پادساعتگرد بچرخانید"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Blink your eyes"
|
msgid "Blink your eyes"
|
||||||
|
@ -59,39 +59,39 @@ msgstr "نشان دادن پنجره درباره"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "disable the currently running safeeyes instance"
|
msgid "disable the currently running safeeyes instance"
|
||||||
msgstr "غیرفعال کردن نمونه safeeyes درحال اجرا"
|
msgstr "از کار انداختن نمونهٔ محافظ چشم در حال اجرا"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "enable the currently running safeeyes instance"
|
msgid "enable the currently running safeeyes instance"
|
||||||
msgstr "فعال کردن نمونه safeeyes درحال اجرا"
|
msgstr "به کار انداختن نمونهٔ محافظ چشم در حال اجرا"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "quit the running safeeyes instance and exit"
|
msgid "quit the running safeeyes instance and exit"
|
||||||
msgstr "بستن و خروج از safeeyes در حال اجرا"
|
msgstr "بستن و خروج از نمونهٔ محافظ چشم در حال اجرا"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "show the settings dialog"
|
msgid "show the settings dialog"
|
||||||
msgstr "نشان دادن پنجره تنظیمات"
|
msgstr "نمایش گفتوگوی تنظیمات"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "start safeeyes in debug mode"
|
msgid "start safeeyes in debug mode"
|
||||||
msgstr "اجرا کردن safeeyes در حالت دیباگ"
|
msgstr "اجرای محافظ چشم در حالت رفع اشکال"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "print the status of running safeeyes instance and exit"
|
msgid "print the status of running safeeyes instance and exit"
|
||||||
msgstr "وضعیت اجرای safeeyes را چاپ کرده و از آن خارج شوید"
|
msgstr "چاپ وضعیت نمونهٔ محافظ چشم در جال اجرا و خروج"
|
||||||
|
|
||||||
# Status message
|
# Status message
|
||||||
msgid "Safe Eyes is not running"
|
msgid "Safe Eyes is not running"
|
||||||
msgstr "محافظ چشم در حال اجرا نیست"
|
msgstr "محافظ چشم اجرا نمیشود"
|
||||||
|
|
||||||
# RPC not enabled message
|
# RPC not enabled message
|
||||||
msgid ""
|
msgid ""
|
||||||
"Safe Eyes is running without an RPC server. Turn it on to use command-line "
|
"Safe Eyes is running without an RPC server. Turn it on to use command-line "
|
||||||
"arguments."
|
"arguments."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Safe Eyes بدون سرور RPC در حال اجرا است. برای استفاده از آرگومان های خط "
|
"محافظ چشم دارد بدون کارساز RPC اجرا میشود. برای استفاده از آرگومانهای خط "
|
||||||
"فرمان آن را روشن کنید."
|
"فرمان، روشنش کنید."
|
||||||
|
|
||||||
# About dialog
|
# About dialog
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
|
@ -102,19 +102,21 @@ msgstr "بستن"
|
||||||
msgid ""
|
msgid ""
|
||||||
"Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you "
|
"Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you "
|
||||||
"to take breaks while you're working long hours at the computer"
|
"to take breaks while you're working long hours at the computer"
|
||||||
msgstr "شرح"
|
msgstr ""
|
||||||
|
"محافظ چشم با یادآوردی استراحت هنگام کار طولانی با رایانه، از چشمانتان در "
|
||||||
|
"برابر خشتگی جشم (استنوپیا) محافظت میکند"
|
||||||
|
|
||||||
# About dialog
|
# About dialog
|
||||||
msgid "License"
|
msgid "License"
|
||||||
msgstr "مجوز"
|
msgstr "پروانه"
|
||||||
|
|
||||||
# Break screen
|
# Break screen
|
||||||
msgid "Skip"
|
msgid "Skip"
|
||||||
msgstr "رد کردن"
|
msgstr "پرش"
|
||||||
|
|
||||||
# Break screen
|
# Break screen
|
||||||
msgid "Postpone"
|
msgid "Postpone"
|
||||||
msgstr "بعدا"
|
msgstr "تعویق"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Break duration (in seconds)"
|
msgid "Break duration (in seconds)"
|
||||||
|
@ -122,31 +124,31 @@ msgstr "زمان استراحت (به ثانیه)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Interval between two breaks (in minutes)"
|
msgid "Interval between two breaks (in minutes)"
|
||||||
msgstr "بازه بین دو استراحت (به دقیقه)"
|
msgstr "بازهٔ بین دو استراحت (به دقیقه)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Time to prepare for a break (in seconds)"
|
msgid "Time to prepare for a break (in seconds)"
|
||||||
msgstr "زمان آماده شدن برای استراحت (در چند ثانیه)"
|
msgstr "زمان آمادگی برای استراحت (به ثانیه)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Keyboard shortcuts disabled period (in seconds)"
|
msgid "Keyboard shortcuts disabled period (in seconds)"
|
||||||
msgstr "میانبرهای صفحه کلید دوره غیرفعال شده (در چند ثانیه)"
|
msgstr "دورهٔ از کار افتادن میانبرهای صفحه کلید (به ثانیه)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Postponement duration (in minutes)"
|
msgid "Postponement duration (in minutes)"
|
||||||
msgstr "به تعویق انداختن مدت زمان (در چند دقیقه)"
|
msgstr "زمان تعویق (به دقیقه)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Show breaks in random order"
|
msgid "Show breaks in random order"
|
||||||
msgstr ""
|
msgstr "نمایش استراحتها به ترتیب کاتورهای"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Strict break (No way to skip breaks)"
|
msgid "Strict break (No way to skip breaks)"
|
||||||
msgstr "استراحت سخت (راهی برای جستجوی وقفه وجود ندارد)"
|
msgstr "استراحت قاطع ( بدون راهی برای پرش از استراحت)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Allow postponing breaks"
|
msgid "Allow postponing breaks"
|
||||||
msgstr "به تعویق انداختن وقفه ها اجازه دهید"
|
msgstr "اجازه به تعویق استراحتها"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Persist the internal state"
|
msgid "Persist the internal state"
|
||||||
|
@ -154,36 +156,35 @@ msgstr "ادامه وضعیت داخلی"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Use RPC server to receive runtime commands"
|
msgid "Use RPC server to receive runtime commands"
|
||||||
msgstr "برای دریافت دستورات زمان اجرا از سرور RPC استفاده کنید"
|
msgstr "استفاده از کارساز RPC برای دریافت دستورات زمان اجرا"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Without the RPC server, command-line commands may not work"
|
msgid "Without the RPC server, command-line commands may not work"
|
||||||
msgstr "بدون سرور RPC ، دستورات خط فرمان ممکن است کار نکنند"
|
msgstr "بدون کارساز RPC ممکن است دستورات خط فرمان نکنند"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Long break interval must be a multiple of short break interval"
|
msgid "Long break interval must be a multiple of short break interval"
|
||||||
msgstr "فاصله زمانی طولانی باید مضربی از وقفه کوتاه باشد"
|
msgstr "دورهٔ استراحت طولانی باید مضربی از دورههای استراحت کوتاه باشد"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Reset"
|
msgid "Reset"
|
||||||
msgstr "تنظیم مجدد"
|
msgstr "بازنشانی"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Are you sure you want to reset all settings to default?"
|
msgid "Are you sure you want to reset all settings to default?"
|
||||||
msgstr ""
|
msgstr "مطمئنید که میخواهید تمامی تنظیمات را به پیشگزیده بازنشانی کنید؟"
|
||||||
"آیا مطمئن هستید که می خواهید همه تنظیمات را به حالت پیش فرض بازنشانی کنید؟"
|
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Options"
|
msgid "Options"
|
||||||
msgstr "گزینه ها"
|
msgstr "گزینهها"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Short Breaks"
|
msgid "Short Breaks"
|
||||||
msgstr "وقفه های کوتاه"
|
msgstr "استراحتهای کوتاه"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Long Breaks"
|
msgid "Long Breaks"
|
||||||
msgstr "وقفه های طولانی"
|
msgstr "استراحتهای طولانی"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
|
@ -191,7 +192,7 @@ msgstr "حذف"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Are you sure you want to delete this break?"
|
msgid "Are you sure you want to delete this break?"
|
||||||
msgstr "آیا مطمئن هستید که می خواهید این وقفه را حذف کنید؟"
|
msgstr "مطمئنید که میخواهید این استراحت را حذف کنید؟"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "You can't undo this action."
|
msgid "You can't undo this action."
|
||||||
|
@ -203,15 +204,15 @@ msgstr "استراحت"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Breaks"
|
msgid "Breaks"
|
||||||
msgstr "می شکند"
|
msgstr "استراحتها"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Plugins"
|
msgid "Plugins"
|
||||||
msgstr "پلاگین ها"
|
msgstr "افزایهها"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Type"
|
msgid "Type"
|
||||||
msgstr "نوع"
|
msgstr "گونه"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Short"
|
msgid "Short"
|
||||||
|
@ -227,59 +228,59 @@ msgstr "تصویر"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Select"
|
msgid "Select"
|
||||||
msgstr "انتخاب کنید"
|
msgstr "گزینش"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Please select an image"
|
msgid "Please select an image"
|
||||||
msgstr "لطفاً تصویری انتخاب کنید"
|
msgstr "لطفاً تصویری برگزینید"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Duration"
|
msgid "Duration"
|
||||||
msgstr "مدت زمان"
|
msgstr "طول"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Time to wait"
|
msgid "Time to wait"
|
||||||
msgstr "وقت انتظار است"
|
msgstr "زمان انتظار"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Override"
|
msgid "Override"
|
||||||
msgstr "لغو کردن"
|
msgstr "پایمالی"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Time (in seconds)"
|
msgid "Time (in seconds)"
|
||||||
msgstr "زمان (در چند ثانیه)"
|
msgstr "زمان (به ثانیه)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Time (in minutes)"
|
msgid "Time (in minutes)"
|
||||||
msgstr "زمان (در چند دقیقه)"
|
msgstr "زمان (به دقیقه)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Break Settings"
|
msgid "Break Settings"
|
||||||
msgstr "شکستن تنظیمات"
|
msgstr "تنظیمات استراحت"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Plugin Settings"
|
msgid "Plugin Settings"
|
||||||
msgstr "تنظیمات پلاگین"
|
msgstr "تنظیمات افزایه"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Plugin does not support %s desktop environment"
|
msgid "Plugin does not support %s desktop environment"
|
||||||
msgstr "پلاگین پشتیبانی نمی کند %s محیط دسک تاپ"
|
msgstr "افزایه از محیط میزکار %s پشتیبانی نمیکند"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Please install the Python module '%s'"
|
msgid "Please install the Python module '%s'"
|
||||||
msgstr "لطفاً ماژول پایتون را نصب کنید '%s'"
|
msgstr "لطفاً پیمانهٔ %s پایتون را نصب کنید"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Please install the command-line tool '%s'"
|
msgid "Please install the command-line tool '%s'"
|
||||||
msgstr "لطفاً ابزار خط فرمان را نصب کنید '%s'"
|
msgstr "لطفاً ابزار خط فرمان %s را نصب کنید"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Invalid cron expression '%s'"
|
msgid "Invalid cron expression '%s'"
|
||||||
msgstr ""
|
msgstr "عبارت کرون نامعتبر «%s»"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Please add the resource %(resource)s to %(config_resource)s directory"
|
msgid "Please add the resource %(resource)s to %(config_resource)s directory"
|
||||||
msgstr "لطفا منبع را اضافه کنید %(resource) در %(config_resource)پوشه ها"
|
msgstr "لطفا منبع %(resource)s را به شاخهٔ %(config_resource)s بیفزایید"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "New Break"
|
msgid "New Break"
|
||||||
|
@ -303,15 +304,15 @@ msgstr "هشدار شنیدنی"
|
||||||
|
|
||||||
# plugin/audiblealert
|
# plugin/audiblealert
|
||||||
msgid "Play audible alert before and after breaks"
|
msgid "Play audible alert before and after breaks"
|
||||||
msgstr "هشدار صوتی را قبل و بعد از وقفه پخش کنید"
|
msgstr "پخش هشدار صوتی پیش و پس از استراحتها"
|
||||||
|
|
||||||
# plugin/audiblealert
|
# plugin/audiblealert
|
||||||
msgid "Play audible alert before breaks"
|
msgid "Play audible alert before breaks"
|
||||||
msgstr "هشدار صوتی را قبل از وقفه پخش کنید"
|
msgstr "پخش هشدار صوتی پیش از استراحتها"
|
||||||
|
|
||||||
# plugin/audiblealert
|
# plugin/audiblealert
|
||||||
msgid "Play audible alert after breaks"
|
msgid "Play audible alert after breaks"
|
||||||
msgstr "بعد از وقفه هشدار صوتی را پخش کنید"
|
msgstr "پخش هشدار صوتی پس از استراحتها"
|
||||||
|
|
||||||
# plugin/donotdisturb
|
# plugin/donotdisturb
|
||||||
msgid "Do Not Disturb"
|
msgid "Do Not Disturb"
|
||||||
|
@ -323,15 +324,15 @@ msgstr "اگر پنجره فعال در حالت تمام صفحه است ، ا
|
||||||
|
|
||||||
# plugin/donotdisturb
|
# plugin/donotdisturb
|
||||||
msgid "Do not interrupt these windows anytime"
|
msgid "Do not interrupt these windows anytime"
|
||||||
msgstr "هر وقت بخواهید این پنجره ها را قطع نکنید"
|
msgstr "این پنجرهها هرگز دچار وقفه نشوند"
|
||||||
|
|
||||||
# plugin/donotdisturb
|
# plugin/donotdisturb
|
||||||
msgid "Interrupt these windows regardless of their state"
|
msgid "Interrupt these windows regardless of their state"
|
||||||
msgstr "قطع این پنجره ها بدون توجه به وضعیت آنها"
|
msgstr "وقفه دادن این پنجرهها فارغ از وضعیتشان"
|
||||||
|
|
||||||
# plugin/donotdisturb
|
# plugin/donotdisturb
|
||||||
msgid "Switch the interruptible windows to normal mode"
|
msgid "Switch the interruptible windows to normal mode"
|
||||||
msgstr "پنجره های قطع شونده را به حالت عادی تغییر دهید"
|
msgstr "تغییر پنچرههای وقفهپذیر به حالت عادی"
|
||||||
|
|
||||||
# plugin/donotdisturb
|
# plugin/donotdisturb
|
||||||
msgid "Do not disturb while on battery"
|
msgid "Do not disturb while on battery"
|
||||||
|
@ -339,31 +340,31 @@ msgstr "در هنگام شارژ باتری مزاحم نشوید"
|
||||||
|
|
||||||
# plugin/healthstats
|
# plugin/healthstats
|
||||||
msgid "Health Statistics"
|
msgid "Health Statistics"
|
||||||
msgstr "آمار بهداشت"
|
msgstr "آمار سلامتی"
|
||||||
|
|
||||||
# plugin/healthstats
|
# plugin/healthstats
|
||||||
msgid "Show statistics based on how you use Safe Eyes"
|
msgid "Show statistics based on how you use Safe Eyes"
|
||||||
msgstr "آماری را براساس نحوه استفاده از Safe Eyes نشان دهید"
|
msgstr "نمایش آماری بر پایهٔ چگونگی استفادهتان از محافظ چشم"
|
||||||
|
|
||||||
# plugin/healthstats
|
# plugin/healthstats
|
||||||
msgid "Statistics reset interval (cron expression)"
|
msgid "Statistics reset interval (cron expression)"
|
||||||
msgstr ""
|
msgstr "بازهٔ بازنشانی آمار (عبارت کرون)"
|
||||||
|
|
||||||
# plugin/notification
|
# plugin/notification
|
||||||
msgid "Notification"
|
msgid "Notification"
|
||||||
msgstr "اطلاع"
|
msgstr "آگاهی"
|
||||||
|
|
||||||
# plugin/notification
|
# plugin/notification
|
||||||
msgid "Show a system notification before breaks"
|
msgid "Show a system notification before breaks"
|
||||||
msgstr "قبل از وقفه یک اعلان سیستم را نشان دهید"
|
msgstr "نمایش یک آگاهی سامانه پیش از استراحتها"
|
||||||
|
|
||||||
# plugin/notification
|
# plugin/notification
|
||||||
msgid "Ready for a short break in %s seconds"
|
msgid "Ready for a short break in %s seconds"
|
||||||
msgstr "آماده برای یک استراحت کوتاه در %s ثانیه"
|
msgstr "آماده برای استراحتی کوتاه در %s ثانیه"
|
||||||
|
|
||||||
# plugin/notification
|
# plugin/notification
|
||||||
msgid "Ready for a long break in %s seconds"
|
msgid "Ready for a long break in %s seconds"
|
||||||
msgstr "آماده برای یک استراحت طولانی در %s ثانیه"
|
msgstr "آماده برای استراحتی طولانی در %s ثانیه"
|
||||||
|
|
||||||
# plugin/screensaver
|
# plugin/screensaver
|
||||||
msgid "Screensaver"
|
msgid "Screensaver"
|
||||||
|
@ -371,7 +372,7 @@ msgstr "محافظ صفحه"
|
||||||
|
|
||||||
# plugin/screensaver
|
# plugin/screensaver
|
||||||
msgid "Lock the screen after long breaks by starting screensaver"
|
msgid "Lock the screen after long breaks by starting screensaver"
|
||||||
msgstr "با اسکرین سیور ، صفحه را پس از وقفه های طولانی قفل کن"
|
msgstr "قفل صفحه پس از استراحتهای طولانی با آغاز محافظ صفحه"
|
||||||
|
|
||||||
# plugin/screensaver
|
# plugin/screensaver
|
||||||
msgid "Custom screensaver command"
|
msgid "Custom screensaver command"
|
||||||
|
@ -379,7 +380,7 @@ msgstr "دستور محافظ صفحه نمایش سفارشی"
|
||||||
|
|
||||||
# plugin/screensaver
|
# plugin/screensaver
|
||||||
msgid "Minimum seconds to skip without screensaver"
|
msgid "Minimum seconds to skip without screensaver"
|
||||||
msgstr "حداقل ثانیه برای پرش بدون محافظ صفحه نمایش"
|
msgstr "کمینهٔ ثانیهها برای پرش بدون محافظ صفحه"
|
||||||
|
|
||||||
# plugin/screensaver
|
# plugin/screensaver
|
||||||
msgid "Lock screen"
|
msgid "Lock screen"
|
||||||
|
@ -391,73 +392,73 @@ msgstr "مکث هوشمند"
|
||||||
|
|
||||||
# plugin/smartpause
|
# plugin/smartpause
|
||||||
msgid "Pause Safe Eyes if the system is idle"
|
msgid "Pause Safe Eyes if the system is idle"
|
||||||
msgstr "اگر سیستم بیکار است ، Safe Eyes را مکث کنید"
|
msgstr "مکث محافظ چشم در صورت بیکاری سامانه"
|
||||||
|
|
||||||
# plugin/smartpause
|
# plugin/smartpause
|
||||||
msgid "Minimum idle time to pause Safe Eyes (in seconds)"
|
msgid "Minimum idle time to pause Safe Eyes (in seconds)"
|
||||||
msgstr "حداقل زمان بیکار برای مکث ایمن چشم ها (در چند ثانیه)"
|
msgstr "کمینهٔ زمان بیکاری برای مکث محافظ چشم (به ثانیه)"
|
||||||
|
|
||||||
# plugin/smartpause
|
# plugin/smartpause
|
||||||
msgid "Interpret idle time equivalent to upcoming break duration as a break"
|
msgid "Interpret idle time equivalent to upcoming break duration as a break"
|
||||||
msgstr "زمان بیکار معادل مدت وقفه آینده را به عنوان یک استراحت تفسیر کنید"
|
msgstr "وقفهٔ زمان بیکاری معادل زمان استراحت پیش رو به عنوان یک استراحت"
|
||||||
|
|
||||||
# plugin/smartpause
|
# plugin/smartpause
|
||||||
msgid "Postpone the next break until the system becomes idle"
|
msgid "Postpone the next break until the system becomes idle"
|
||||||
msgstr "وقفه بعدی را به تأخیر بیندازید تا سیستم بیکار شود"
|
msgstr "تعویق استراحت بعدی تا زمان بیکار شدن سامانه"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Tray Icon"
|
msgid "Tray Icon"
|
||||||
msgstr "Tray Icon"
|
msgstr "نقشک سینی"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Show a tray icon in the notification area"
|
msgid "Show a tray icon in the notification area"
|
||||||
msgstr "نماد تلاش مجدد را در قسمت اعلان نشان دهید"
|
msgstr "نمایش نقشک سینی در ناحیهٔ آگاهی"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Show next break time in tray icon"
|
msgid "Show next break time in tray icon"
|
||||||
msgstr "زمان استراحت بعدی را در نماد تلاش مجدد نشان دهید"
|
msgstr "نمایش زمان استراحت بعدی در نقشک سینی"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Allow disabling Safe Eyes"
|
msgid "Allow disabling Safe Eyes"
|
||||||
msgstr "اجازه دادن به غیرفعال کردن ایمن چشم ها"
|
msgstr "اجازه به از کار انداختن محافظ چشم"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "About"
|
msgid "About"
|
||||||
msgstr "در باره"
|
msgstr "درباره"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Disable Safe Eyes"
|
msgid "Disable Safe Eyes"
|
||||||
msgstr "غیر فعال سازی Safe Eyes"
|
msgstr "از کار انداختن محافظ چشم"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Disabled until %s"
|
msgid "Disabled until %s"
|
||||||
msgstr "غیرفعال تا %s"
|
msgstr "از کار افتاده تا %s"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Disabled until restart"
|
msgid "Disabled until restart"
|
||||||
msgstr "غیرفعال است تا راه اندازی مجدد"
|
msgstr "از کار افتاده تا آغاز دوباره"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Enable Safe Eyes"
|
msgid "Enable Safe Eyes"
|
||||||
msgstr "فعال سازی Safe Eyes"
|
msgstr "به کار انداختن محافظ چشم"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "For %d Hour"
|
msgid "For %d Hour"
|
||||||
msgid_plural "For %d Hours"
|
msgid_plural "For %d Hours"
|
||||||
msgstr[0] "به مدت %d ساعت ها"
|
msgstr[0] "برای ۱ ساعت"
|
||||||
msgstr[1] "به مدت %d ساعت"
|
msgstr[1] "برای %Id ساعت"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "For %d Minute"
|
msgid "For %d Minute"
|
||||||
msgid_plural "For %d Minutes"
|
msgid_plural "For %d Minutes"
|
||||||
msgstr[0] "برای %d دقیقه"
|
msgstr[0] "برای ۱ دقیقه"
|
||||||
msgstr[1] "برای %d دقیقه ها"
|
msgstr[1] "برای %Id دقیقه"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "For %d Second"
|
msgid "For %d Second"
|
||||||
msgid_plural "For %d Seconds"
|
msgid_plural "For %d Seconds"
|
||||||
msgstr[0] "برای %d ثانیه"
|
msgstr[0] "برای ۱ ثانیه"
|
||||||
msgstr[1] "برای %d ثانیه ها"
|
msgstr[1] "برای %dI ثانیه"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Next break at %s"
|
msgid "Next break at %s"
|
||||||
|
@ -465,7 +466,7 @@ msgstr "استراحت بعدی در %s"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "No Breaks Available"
|
msgid "No Breaks Available"
|
||||||
msgstr "هیچ وقفه ای موجود نیست"
|
msgstr "هیچ استراحتی موجود نیست"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
|
@ -473,23 +474,23 @@ msgstr "تنظیمات"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Take a break now"
|
msgid "Take a break now"
|
||||||
msgstr "کمی استراحت کن"
|
msgstr "اکنون استراحت کنید"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Until restart"
|
msgid "Until restart"
|
||||||
msgstr "تا راه اندازی مجدد"
|
msgstr "تا آغاز دوباره"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "ترک کن"
|
msgstr "خروج"
|
||||||
|
|
||||||
# plugin/mediacontrol
|
# plugin/mediacontrol
|
||||||
msgid "Media Control"
|
msgid "Media Control"
|
||||||
msgstr "کنترل رسانه"
|
msgstr "واپایش رسانه"
|
||||||
|
|
||||||
# plugin/mediacontrol
|
# plugin/mediacontrol
|
||||||
msgid "Pause media players from the break screen"
|
msgid "Pause media players from the break screen"
|
||||||
msgstr "توقف پخش کننده رسانه در توقف صفحه"
|
msgstr "مکث پخشکنندههای رسانه در صفحهٔ استراحت"
|
||||||
|
|
||||||
# plugin/mediacontrol
|
# plugin/mediacontrol
|
||||||
msgid "Pause media"
|
msgid "Pause media"
|
||||||
|
|
|
@ -6,7 +6,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \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 <ao@localizationlab.org>\n"
|
"Last-Translator: AO Localisation Lab <ao@localizationlab.org>\n"
|
||||||
"Language-Team: French <https://hosted.weblate.org/projects/safe-eyes/"
|
"Language-Team: French <https://hosted.weblate.org/projects/safe-eyes/"
|
||||||
"translations/fr/>\n"
|
"translations/fr/>\n"
|
||||||
|
@ -15,7 +15,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n > 1;\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
|
# Short break
|
||||||
msgid "Tightly close your eyes"
|
msgid "Tightly close your eyes"
|
||||||
|
@ -59,7 +59,7 @@ msgstr "afficher la boîte de dialogue À propos"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "disable the currently running safeeyes instance"
|
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
|
# Commandline arg description
|
||||||
msgid "enable the currently running safeeyes instance"
|
msgid "enable the currently running safeeyes instance"
|
||||||
|
@ -67,7 +67,7 @@ msgstr "activer l’instance de safeyes en cours"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "quit the running safeeyes instance and exit"
|
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
|
# Commandline arg description
|
||||||
msgid "show the settings dialog"
|
msgid "show the settings dialog"
|
||||||
|
@ -79,7 +79,7 @@ msgstr "démarrer safeeyes en mode de débogage"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "print the status of running safeeyes instance and exit"
|
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
|
# Status message
|
||||||
msgid "Safe Eyes is not running"
|
msgid "Safe Eyes is not running"
|
||||||
|
@ -103,7 +103,7 @@ msgid ""
|
||||||
"Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you "
|
"Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you "
|
||||||
"to take breaks while you're working long hours at the computer"
|
"to take breaks while you're working long hours at the computer"
|
||||||
msgstr ""
|
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 "
|
"rappelant de prendre des pauses lors de vos longues heures de travail sur un "
|
||||||
"ordinateur"
|
"ordinateur"
|
||||||
|
|
||||||
|
@ -203,7 +203,7 @@ msgstr "Voulez-vous vraiment supprimer cette pause ?"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "You can't undo this action."
|
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
|
# Settings dialog
|
||||||
msgid "Break"
|
msgid "Break"
|
||||||
|
@ -235,11 +235,11 @@ msgstr "Image"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Select"
|
msgid "Select"
|
||||||
msgstr "Choisir"
|
msgstr "Sélectionner"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Please select an image"
|
msgid "Please select an image"
|
||||||
msgstr "Veuillez choisir une image"
|
msgstr "Veuillez sélectionner une image"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Duration"
|
msgid "Duration"
|
||||||
|
@ -352,7 +352,7 @@ msgstr "Statistiques de santé"
|
||||||
|
|
||||||
# plugin/healthstats
|
# plugin/healthstats
|
||||||
msgid "Show statistics based on how you use Safe Eyes"
|
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
|
# plugin/healthstats
|
||||||
msgid "Statistics reset interval (cron expression)"
|
msgid "Statistics reset interval (cron expression)"
|
||||||
|
@ -376,7 +376,7 @@ msgstr "Préparez-vous à une pause longue dans %s secondes"
|
||||||
|
|
||||||
# plugin/screensaver
|
# plugin/screensaver
|
||||||
msgid "Screensaver"
|
msgid "Screensaver"
|
||||||
msgstr "Économiseur d'écran"
|
msgstr "Économiseur d’écran"
|
||||||
|
|
||||||
# plugin/screensaver
|
# plugin/screensaver
|
||||||
msgid "Lock the screen after long breaks by starting screensaver"
|
msgid "Lock the screen after long breaks by starting screensaver"
|
||||||
|
@ -407,7 +407,7 @@ msgstr "Mettre Safe Eyes en pause si le système est inactif"
|
||||||
# plugin/smartpause
|
# plugin/smartpause
|
||||||
msgid "Minimum idle time to pause Safe Eyes (in seconds)"
|
msgid "Minimum idle time to pause Safe Eyes (in seconds)"
|
||||||
msgstr ""
|
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
|
# plugin/smartpause
|
||||||
msgid "Interpret idle time equivalent to upcoming break duration as a break"
|
msgid "Interpret idle time equivalent to upcoming break duration as a break"
|
||||||
|
@ -479,7 +479,7 @@ msgstr "Prochaine pause à %s"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "No Breaks Available"
|
msgid "No Breaks Available"
|
||||||
msgstr "Aucune pause n'est prévue"
|
msgstr "Aucune pause n'est proposée"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
|
|
|
@ -6,7 +6,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \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.yaron@gmail.com>\n"
|
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
|
||||||
"Language-Team: Hebrew <https://hosted.weblate.org/projects/safe-eyes/"
|
"Language-Team: Hebrew <https://hosted.weblate.org/projects/safe-eyes/"
|
||||||
"translations/he/>\n"
|
"translations/he/>\n"
|
||||||
|
@ -15,7 +15,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\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
|
# Short break
|
||||||
msgid "Tightly close your eyes"
|
msgid "Tightly close your eyes"
|
||||||
|
@ -138,7 +138,7 @@ msgstr "משך עיכוב (בשניות)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Show breaks in random order"
|
msgid "Show breaks in random order"
|
||||||
msgstr ""
|
msgstr "להציג הפסקות בסדר אקראי"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Strict break (No way to skip breaks)"
|
msgid "Strict break (No way to skip breaks)"
|
||||||
|
@ -274,7 +274,7 @@ msgstr "נא להתקין את כלי שורת הפקודה ‚%s’"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Invalid cron expression '%s'"
|
msgid "Invalid cron expression '%s'"
|
||||||
msgstr ""
|
msgstr "ביטוי cron שגוי ‚%s’"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Please add the resource %(resource)s to %(config_resource)s directory"
|
msgid "Please add the resource %(resource)s to %(config_resource)s directory"
|
||||||
|
@ -346,7 +346,7 @@ msgstr "להציג סטטיסטיקה על אופן השימוש שלך בהגנ
|
||||||
|
|
||||||
# plugin/healthstats
|
# plugin/healthstats
|
||||||
msgid "Statistics reset interval (cron expression)"
|
msgid "Statistics reset interval (cron expression)"
|
||||||
msgstr ""
|
msgstr "הפרשים בין איפוסי סטטיסטיקה (ביטוי cron)"
|
||||||
|
|
||||||
# plugin/notification
|
# plugin/notification
|
||||||
msgid "Notification"
|
msgid "Notification"
|
||||||
|
|
|
@ -6,8 +6,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: 2021-02-24 07:50+0000\n"
|
"PO-Revision-Date: 2022-01-16 12:55+0000\n"
|
||||||
"Last-Translator: bortox <broto777@zoho.com>\n"
|
"Last-Translator: albanobattistella <albano_battistella@hotmail.com>\n"
|
||||||
"Language-Team: Italian <https://hosted.weblate.org/projects/safe-eyes/"
|
"Language-Team: Italian <https://hosted.weblate.org/projects/safe-eyes/"
|
||||||
"translations/it/>\n"
|
"translations/it/>\n"
|
||||||
"Language: it\n"
|
"Language: it\n"
|
||||||
|
@ -15,7 +15,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"X-Generator: Weblate 4.5\n"
|
"X-Generator: Weblate 4.10.1\n"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Tightly close your eyes"
|
msgid "Tightly close your eyes"
|
||||||
|
@ -90,8 +90,8 @@ msgid ""
|
||||||
"Safe Eyes is running without an RPC server. Turn it on to use command-line "
|
"Safe Eyes is running without an RPC server. Turn it on to use command-line "
|
||||||
"arguments."
|
"arguments."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Safe Eyes funziona senza un server RPC. Attivalo per utilizzare gli "
|
"Safe Eyes è in esecuzione senza un server RPC. Apri Safe Eyes per utilizzare "
|
||||||
"argomenti della riga di comando."
|
"la linea di comando."
|
||||||
|
|
||||||
# About dialog
|
# About dialog
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
|
@ -388,7 +388,7 @@ msgstr "Tempo minimo per il salto senza salvaschermo (in secondi)"
|
||||||
|
|
||||||
# plugin/screensaver
|
# plugin/screensaver
|
||||||
msgid "Lock screen"
|
msgid "Lock screen"
|
||||||
msgstr "Schermo bloccato"
|
msgstr "Blocca schermo"
|
||||||
|
|
||||||
# plugin/smartpause
|
# plugin/smartpause
|
||||||
msgid "Smart Pause"
|
msgid "Smart Pause"
|
||||||
|
|
|
@ -6,7 +6,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \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 <yogesh@karnatakaeducation.org.in>\n"
|
"Last-Translator: Yogesh <yogesh@karnatakaeducation.org.in>\n"
|
||||||
"Language-Team: Kannada <https://hosted.weblate.org/projects/safe-eyes/"
|
"Language-Team: Kannada <https://hosted.weblate.org/projects/safe-eyes/"
|
||||||
"translations/kn/>\n"
|
"translations/kn/>\n"
|
||||||
|
@ -15,11 +15,11 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0;\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
|
# Short break
|
||||||
msgid "Tightly close your eyes"
|
msgid "Tightly close your eyes"
|
||||||
msgstr ""
|
msgstr "ಕಣ್ಣನ್ನು ಗಟ್ಟಿಯಾಗಿ ಮುಚ್ಚಿರಿ"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Roll your eyes a few times to each side"
|
msgid "Roll your eyes a few times to each side"
|
||||||
|
@ -35,7 +35,7 @@ msgstr ""
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Blink your eyes"
|
msgid "Blink your eyes"
|
||||||
msgstr ""
|
msgstr "ಕಣ್ಣನ್ನು ಮಿಟುಕಿಸಿ"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Focus on a point in the far distance"
|
msgid "Focus on a point in the far distance"
|
||||||
|
@ -43,35 +43,35 @@ msgstr ""
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Have some water"
|
msgid "Have some water"
|
||||||
msgstr ""
|
msgstr "ಸ್ವಲ್ಪ ನೀರನ್ನು ಕುಡಿಯಿರಿ"
|
||||||
|
|
||||||
# Long break
|
# Long break
|
||||||
msgid "Walk for a while"
|
msgid "Walk for a while"
|
||||||
msgstr ""
|
msgstr "ಕೆಲ ಸಮಯ ನಡೆದಾಡಿ"
|
||||||
|
|
||||||
# Long break
|
# Long break
|
||||||
msgid "Lean back at your seat and relax"
|
msgid "Lean back at your seat and relax"
|
||||||
msgstr ""
|
msgstr "ನಿಮ್ಮ ಆಸನದ ಹಿಂಬದಿಗೆ ಹೊರಗಿ ವಿಶ್ರಮಿಸಿ"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "show the about dialog"
|
msgid "show the about dialog"
|
||||||
msgstr ""
|
msgstr "ಇದರ ಬಗ್ಗೆ ತೋರಿಸು"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "disable the currently running safeeyes instance"
|
msgid "disable the currently running safeeyes instance"
|
||||||
msgstr ""
|
msgstr "ನೆಡುಯುತ್ತಿರುವ ಸೇಫ್ಐಸ್ಅನ್ನು ನಿಶ್ಕ್ರಿಯ ಗೊಳಿಸು"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "enable the currently running safeeyes instance"
|
msgid "enable the currently running safeeyes instance"
|
||||||
msgstr ""
|
msgstr "ನೆಡುಯುತ್ತಿರುವ ಸೇಫ್ಐಸ್ಅನ್ನು ಸಕ್ರಿಯ ಗೊಳಿಸು"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "quit the running safeeyes instance and exit"
|
msgid "quit the running safeeyes instance and exit"
|
||||||
msgstr ""
|
msgstr "ನೆಡುಯುತ್ತಿರುವ ಸೇಫ್ಐಸ್ಅನ್ನು ತ್ಯಜಿಸು"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "show the settings dialog"
|
msgid "show the settings dialog"
|
||||||
msgstr ""
|
msgstr "ಸಿದ್ಧತೆಗಳನ್ನು ತೋರಿಸು"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "start safeeyes in debug mode"
|
msgid "start safeeyes in debug mode"
|
||||||
|
@ -83,7 +83,7 @@ msgstr "ಚಾಲನೆಯಲ್ಲಿರುವ ಸೇಫ್ಐಸ್ ಸ್ಥ
|
||||||
|
|
||||||
# Status message
|
# Status message
|
||||||
msgid "Safe Eyes is not running"
|
msgid "Safe Eyes is not running"
|
||||||
msgstr ""
|
msgstr "ಸೇಫ್ಐಸ್ ನೆಡುಯುತ್ತಿಲ್ಲ"
|
||||||
|
|
||||||
# RPC not enabled message
|
# RPC not enabled message
|
||||||
msgid ""
|
msgid ""
|
||||||
|
@ -95,7 +95,7 @@ msgstr ""
|
||||||
|
|
||||||
# About dialog
|
# About dialog
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr "ಮುಚ್ಚಿರಿ"
|
||||||
|
|
||||||
# Description in about dialog
|
# 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
|
# Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you to take breaks while you're working long hours at the computer
|
||||||
|
|
|
@ -6,8 +6,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: 2021-02-24 07:50+0000\n"
|
"PO-Revision-Date: 2023-02-17 05:35+0000\n"
|
||||||
"Last-Translator: Lee Yunseok <ironyunseok@protonmail.com>\n"
|
"Last-Translator: Yi Yunseok <ironyunseok@protonmail.com>\n"
|
||||||
"Language-Team: Korean <https://hosted.weblate.org/projects/safe-eyes/"
|
"Language-Team: Korean <https://hosted.weblate.org/projects/safe-eyes/"
|
||||||
"translations/ko/>\n"
|
"translations/ko/>\n"
|
||||||
"Language: ko\n"
|
"Language: ko\n"
|
||||||
|
@ -15,7 +15,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
"X-Generator: Weblate 4.5\n"
|
"X-Generator: Weblate 4.16-dev\n"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Tightly close your eyes"
|
msgid "Tightly close your eyes"
|
||||||
|
@ -346,7 +346,7 @@ msgstr "세이프 아이즈 사용에 기반한 통계 표시"
|
||||||
|
|
||||||
# plugin/healthstats
|
# plugin/healthstats
|
||||||
msgid "Statistics reset interval (cron expression)"
|
msgid "Statistics reset interval (cron expression)"
|
||||||
msgstr "통계 재설정 간격 (크론 표현식)"
|
msgstr "통계 초기화 간격 (크론 표현식)"
|
||||||
|
|
||||||
# plugin/notification
|
# plugin/notification
|
||||||
msgid "Notification"
|
msgid "Notification"
|
||||||
|
|
|
@ -6,7 +6,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \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 <epost@anotheragency.no>\n"
|
"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
|
||||||
"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/"
|
"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/"
|
||||||
"safe-eyes/translations/nb_NO/>\n"
|
"safe-eyes/translations/nb_NO/>\n"
|
||||||
|
@ -15,7 +15,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\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
|
# Short break
|
||||||
msgid "Tightly close your eyes"
|
msgid "Tightly close your eyes"
|
||||||
|
@ -163,7 +163,7 @@ msgstr "Uten RPC-tjeneren, vil ikke kommandolinje-argumenter virke"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Long break interval must be a multiple of short break interval"
|
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
|
# Settings dialog
|
||||||
msgid "Reset"
|
msgid "Reset"
|
||||||
|
|
|
@ -6,8 +6,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: 2020-04-03 10:36+0000\n"
|
"PO-Revision-Date: 2023-10-31 16:04+0000\n"
|
||||||
"Last-Translator: Michal Biesiada <blade-14@o2.pl>\n"
|
"Last-Translator: Eryk Michalak <gnu.ewm@protonmail.com>\n"
|
||||||
"Language-Team: Polish <https://hosted.weblate.org/projects/safe-eyes/"
|
"Language-Team: Polish <https://hosted.weblate.org/projects/safe-eyes/"
|
||||||
"translations/pl/>\n"
|
"translations/pl/>\n"
|
||||||
"Language: pl\n"
|
"Language: pl\n"
|
||||||
|
@ -16,7 +16,7 @@ msgstr ""
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
||||||
"|| n%100>=20) ? 1 : 2;\n"
|
"|| n%100>=20) ? 1 : 2;\n"
|
||||||
"X-Generator: Weblate 4.0-dev\n"
|
"X-Generator: Weblate 5.2-dev\n"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Tightly close your eyes"
|
msgid "Tightly close your eyes"
|
||||||
|
@ -141,7 +141,7 @@ msgstr "Czas przełożenia (w minutach)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Show breaks in random order"
|
msgid "Show breaks in random order"
|
||||||
msgstr ""
|
msgstr "Wyświetlaj przerwy w losowej kolejności"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Strict break (No way to skip breaks)"
|
msgid "Strict break (No way to skip breaks)"
|
||||||
|
@ -169,11 +169,11 @@ msgstr "Długa przerwa musi być poprzedzona kilkoma krótkimi"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Reset"
|
msgid "Reset"
|
||||||
msgstr "Zresetuj ustawienia"
|
msgstr "Resetuj"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Are you sure you want to reset all settings to default?"
|
msgid "Are you sure you want to reset all settings to default?"
|
||||||
msgstr "Czy jesteś pewien, że chcesz przywrócić ustawienia domyślne?"
|
msgstr "Czy chcesz przywrócić ustawienia domyślne?"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Options"
|
msgid "Options"
|
||||||
|
@ -193,11 +193,11 @@ msgstr "Usuń"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Are you sure you want to delete this break?"
|
msgid "Are you sure you want to delete this break?"
|
||||||
msgstr "Czy jesteś pewien, że chcesz usunąć tę przerwę?"
|
msgstr "Czy na pewno chcesz usunąć tę przerwę?"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "You can't undo this action."
|
msgid "You can't undo this action."
|
||||||
msgstr "Nie możesz cofnąć tej akcji."
|
msgstr "Nie można cofnąć tej operacji."
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Break"
|
msgid "Break"
|
||||||
|
@ -277,7 +277,7 @@ msgstr "Proszę zainstalować wiersz poleceń '%s'"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Invalid cron expression '%s'"
|
msgid "Invalid cron expression '%s'"
|
||||||
msgstr ""
|
msgstr "Nieprawidłowe wyrażenie cron '%s'"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Please add the resource %(resource)s to %(config_resource)s directory"
|
msgid "Please add the resource %(resource)s to %(config_resource)s directory"
|
||||||
|
@ -349,7 +349,7 @@ msgstr "Pokaż statystyki oparte o Safe Eyes"
|
||||||
|
|
||||||
# plugin/healthstats
|
# plugin/healthstats
|
||||||
msgid "Statistics reset interval (cron expression)"
|
msgid "Statistics reset interval (cron expression)"
|
||||||
msgstr ""
|
msgstr "Okres resetowania statystyk (wyrażenie cron)"
|
||||||
|
|
||||||
# plugin/notification
|
# plugin/notification
|
||||||
msgid "Notification"
|
msgid "Notification"
|
||||||
|
@ -480,7 +480,7 @@ msgstr "Ustawienia"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Take a break now"
|
msgid "Take a break now"
|
||||||
msgstr "Przerwa"
|
msgstr "Zrób sobie teraz przerwę"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Until restart"
|
msgid "Until restart"
|
||||||
|
|
|
@ -6,17 +6,17 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: 2021-03-11 12:02+0000\n"
|
"PO-Revision-Date: 2023-11-26 00:02+0000\n"
|
||||||
"Last-Translator: Dmitriy Q <krotesk@mail.ru>\n"
|
"Last-Translator: Almaz Mannanov <AlmazWorks@gmail.com>\n"
|
||||||
"Language-Team: Russian <https://hosted.weblate.org/projects/safe-eyes/"
|
"Language-Team: Russian <https://hosted.weblate.org/projects/safe-eyes/"
|
||||||
"translations/ru/>\n"
|
"translations/ru/>\n"
|
||||||
"Language: ru\n"
|
"Language: ru\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||||
"X-Generator: Weblate 4.5.2-dev\n"
|
"X-Generator: Weblate 5.2.1-rc\n"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Tightly close your eyes"
|
msgid "Tightly close your eyes"
|
||||||
|
@ -56,15 +56,15 @@ msgstr "Откиньтесь на спинку стула и расслабьт
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "show the about dialog"
|
msgid "show the about dialog"
|
||||||
msgstr "О программе"
|
msgstr "показать окно \"о программе\""
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "disable the currently running safeeyes instance"
|
msgid "disable the currently running safeeyes instance"
|
||||||
msgstr "Отключить Safe Eyes"
|
msgstr "отключить текущий запущенный экземпляр Safe Eyes"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "enable the currently running safeeyes instance"
|
msgid "enable the currently running safeeyes instance"
|
||||||
msgstr "Активировать Safe Eyes"
|
msgstr "активировать текущий запущенный экземпляр Safe Eyes"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "quit the running safeeyes instance and exit"
|
msgid "quit the running safeeyes instance and exit"
|
||||||
|
@ -72,7 +72,7 @@ msgstr "Закрыть Safe Eyes и выйти"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "show the settings dialog"
|
msgid "show the settings dialog"
|
||||||
msgstr "Настройки"
|
msgstr "показать окно настроек"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "start safeeyes in debug mode"
|
msgid "start safeeyes in debug mode"
|
||||||
|
@ -91,8 +91,8 @@ msgid ""
|
||||||
"Safe Eyes is running without an RPC server. Turn it on to use command-line "
|
"Safe Eyes is running without an RPC server. Turn it on to use command-line "
|
||||||
"arguments."
|
"arguments."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Safe Eyes работает без RPC-сервера. Включите его чтобы использовать "
|
"Программа Safe Eyes запущена без RPC сервера. Для использования аргументов "
|
||||||
"аргументы командной строки."
|
"командной строки запустите RPC сервер."
|
||||||
|
|
||||||
# About dialog
|
# About dialog
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
|
@ -103,7 +103,9 @@ msgstr "Закрыть"
|
||||||
msgid ""
|
msgid ""
|
||||||
"Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you "
|
"Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you "
|
||||||
"to take breaks while you're working long hours at the computer"
|
"to take breaks while you're working long hours at the computer"
|
||||||
msgstr "Описание"
|
msgstr ""
|
||||||
|
"Safe Eyes защищает ваши глаза от перенапряжения (астенопии), напоминая о "
|
||||||
|
"необходимости сделать перерыв во время долгих часов за ПК"
|
||||||
|
|
||||||
# About dialog
|
# About dialog
|
||||||
msgid "License"
|
msgid "License"
|
||||||
|
@ -143,7 +145,7 @@ msgstr "Показывать перерывы в случайном порядк
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Strict break (No way to skip breaks)"
|
msgid "Strict break (No way to skip breaks)"
|
||||||
msgstr "Обязательный перерыв (Невозможно отменить перерывы)"
|
msgstr "Обязательный перерыв (без возможности пропуска)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Allow postponing breaks"
|
msgid "Allow postponing breaks"
|
||||||
|
@ -155,11 +157,11 @@ msgstr "Сохранять внутреннее состояние"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Use RPC server to receive runtime commands"
|
msgid "Use RPC server to receive runtime commands"
|
||||||
msgstr "Используйте RPC-сервер для получения запущенных команд"
|
msgstr "Используйте RPC сервер для получения команд во время работы приложения"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Without the RPC server, command-line commands may not work"
|
msgid "Without the RPC server, command-line commands may not work"
|
||||||
msgstr "Команды из командной строки могут не работать без RPC сервера"
|
msgstr "Без RPC сервера команды из командной строки могут не сработать"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Long break interval must be a multiple of short break interval"
|
msgid "Long break interval must be a multiple of short break interval"
|
||||||
|
@ -232,7 +234,7 @@ msgstr "Выбрать"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Please select an image"
|
msgid "Please select an image"
|
||||||
msgstr "Пожалуйста выберите изображение"
|
msgstr "Пожалуйста, выберите изображение"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Duration"
|
msgid "Duration"
|
||||||
|
@ -268,11 +270,11 @@ msgstr "Дополнение не поддерживает окружение р
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Please install the Python module '%s'"
|
msgid "Please install the Python module '%s'"
|
||||||
msgstr "Пожалуйста установите модуль Python: %s"
|
msgstr "Пожалуйста, установите модуль Python: %s"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Please install the command-line tool '%s'"
|
msgid "Please install the command-line tool '%s'"
|
||||||
msgstr "Пожалуйста установите инструмент командной строки '%s'"
|
msgstr "Пожалуйста, установите инструмент командной строки '%s'"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Invalid cron expression '%s'"
|
msgid "Invalid cron expression '%s'"
|
||||||
|
@ -280,7 +282,7 @@ msgstr "Недопустимое выражение cron '%s'"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Please add the resource %(resource)s to %(config_resource)s directory"
|
msgid "Please add the resource %(resource)s to %(config_resource)s directory"
|
||||||
msgstr "Пожалуйста добавьте источник %(resource)s в папку %(config_resource)"
|
msgstr "Пожалуйста, добавьте источник %(resource)s в папку %(config_resource)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "New Break"
|
msgid "New Break"
|
||||||
|
@ -288,7 +290,7 @@ msgstr "Новый перерыв"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Удалить"
|
msgstr "Стереть"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Discard"
|
msgid "Discard"
|
||||||
|
@ -320,7 +322,7 @@ msgstr "Не беспокоить"
|
||||||
|
|
||||||
# plugin/donotdisturb
|
# plugin/donotdisturb
|
||||||
msgid "Skip break if the active window is in fullscreen mode"
|
msgid "Skip break if the active window is in fullscreen mode"
|
||||||
msgstr "Пропустить перерыв, если активое окно в полнооконном режиме"
|
msgstr "Пропустить перерыв, если активное окно в полноэкранном режиме"
|
||||||
|
|
||||||
# plugin/donotdisturb
|
# plugin/donotdisturb
|
||||||
msgid "Do not interrupt these windows anytime"
|
msgid "Do not interrupt these windows anytime"
|
||||||
|
@ -336,7 +338,7 @@ msgstr "Переключать прерываемые окна в нормаль
|
||||||
|
|
||||||
# plugin/donotdisturb
|
# plugin/donotdisturb
|
||||||
msgid "Do not disturb while on battery"
|
msgid "Do not disturb while on battery"
|
||||||
msgstr "Не прерывать на автономном питании"
|
msgstr "Не беспокоить при работе от батареи"
|
||||||
|
|
||||||
# plugin/healthstats
|
# plugin/healthstats
|
||||||
msgid "Health Statistics"
|
msgid "Health Statistics"
|
||||||
|
@ -344,7 +346,7 @@ msgstr "Статистика здоровья"
|
||||||
|
|
||||||
# plugin/healthstats
|
# plugin/healthstats
|
||||||
msgid "Show statistics based on how you use Safe Eyes"
|
msgid "Show statistics based on how you use Safe Eyes"
|
||||||
msgstr "Показывать статистику основанную на использовании Safe Eyes"
|
msgstr "Показывать статистику, основанную на использовании Safe Eyes"
|
||||||
|
|
||||||
# plugin/healthstats
|
# plugin/healthstats
|
||||||
msgid "Statistics reset interval (cron expression)"
|
msgid "Statistics reset interval (cron expression)"
|
||||||
|
@ -401,8 +403,8 @@ msgstr "Минимальное время простоя для приостан
|
||||||
# plugin/smartpause
|
# plugin/smartpause
|
||||||
msgid "Interpret idle time equivalent to upcoming break duration as a break"
|
msgid "Interpret idle time equivalent to upcoming break duration as a break"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Интерпретировать время простоя равное продолжительности предстоящего "
|
"Интерпретировать время простоя, равное продолжительности предстоящего "
|
||||||
"перерыва как перерыв"
|
"перерыва, как перерыв"
|
||||||
|
|
||||||
# plugin/smartpause
|
# plugin/smartpause
|
||||||
msgid "Postpone the next break until the system becomes idle"
|
msgid "Postpone the next break until the system becomes idle"
|
||||||
|
@ -422,7 +424,7 @@ msgstr "Показывать время до следующего перерыв
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Allow disabling Safe Eyes"
|
msgid "Allow disabling Safe Eyes"
|
||||||
msgstr "Разрешить запрет Safe Eyes"
|
msgstr "Разрешить выключение Safe Eyes"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "About"
|
msgid "About"
|
||||||
|
|
|
@ -456,6 +456,18 @@ msgstr ""
|
||||||
msgid "Take a break now"
|
msgid "Take a break now"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: plugins/trayicon
|
||||||
|
msgid "Any break"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: plugins/trayicon
|
||||||
|
msgid "Short break"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: plugins/trayicon
|
||||||
|
msgid "Long break"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Until restart"
|
msgid "Until restart"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
|
@ -6,8 +6,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: 2019-02-17 23:26+0000\n"
|
"PO-Revision-Date: 2023-08-10 19:53+0000\n"
|
||||||
"Last-Translator: Jose Riha <jose1711@gmail.com>\n"
|
"Last-Translator: Milan Šalka <salka.milan@googlemail.com>\n"
|
||||||
"Language-Team: Slovak <https://hosted.weblate.org/projects/safe-eyes/"
|
"Language-Team: Slovak <https://hosted.weblate.org/projects/safe-eyes/"
|
||||||
"translations/sk/>\n"
|
"translations/sk/>\n"
|
||||||
"Language: sk\n"
|
"Language: sk\n"
|
||||||
|
@ -15,7 +15,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\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 5.0-dev\n"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Tightly close your eyes"
|
msgid "Tightly close your eyes"
|
||||||
|
@ -90,6 +90,8 @@ msgid ""
|
||||||
"Safe Eyes is running without an RPC server. Turn it on to use command-line "
|
"Safe Eyes is running without an RPC server. Turn it on to use command-line "
|
||||||
"arguments."
|
"arguments."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Safe Eyes je spustený bez RPC serveru. Zapnite ho pre použitie argumentov v "
|
||||||
|
"príkazovom riadku."
|
||||||
|
|
||||||
# About dialog
|
# About dialog
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
|
@ -103,7 +105,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Safe Eyes vám pripomenie, aby ste si urobili prestávku počas dlhých hodín "
|
"Safe Eyes vám pripomenie, aby ste si urobili prestávku počas dlhých hodín "
|
||||||
"stravených za počítačom. Chráni tak vaše oči pred prílišným namáhaním "
|
"stravených za počítačom. Chráni tak vaše oči pred prílišným namáhaním "
|
||||||
"(asthenopiou)."
|
"(asthenopiou)"
|
||||||
|
|
||||||
# About dialog
|
# About dialog
|
||||||
msgid "License"
|
msgid "License"
|
||||||
|
@ -139,7 +141,7 @@ msgstr "Odložiť o (v minútach)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Show breaks in random order"
|
msgid "Show breaks in random order"
|
||||||
msgstr ""
|
msgstr "Ukazovať prestávky v náhodnom poradí"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Strict break (No way to skip breaks)"
|
msgid "Strict break (No way to skip breaks)"
|
||||||
|
@ -155,11 +157,11 @@ msgstr "Zachovať vnútorný stav"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Use RPC server to receive runtime commands"
|
msgid "Use RPC server to receive runtime commands"
|
||||||
msgstr ""
|
msgstr "Použiť RPC server na prijatie spúšťacích príkazov"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Without the RPC server, command-line commands may not work"
|
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
|
# Settings dialog
|
||||||
msgid "Long break interval must be a multiple of short break interval"
|
msgid "Long break interval must be a multiple of short break interval"
|
||||||
|
@ -275,7 +277,7 @@ msgstr "Prosím nainštalujte si nástroj '%s'"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Invalid cron expression '%s'"
|
msgid "Invalid cron expression '%s'"
|
||||||
msgstr ""
|
msgstr "Neplatný výraz pre cron '%s'"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Please add the resource %(resource)s to %(config_resource)s directory"
|
msgid "Please add the resource %(resource)s to %(config_resource)s directory"
|
||||||
|
@ -347,7 +349,7 @@ msgstr "Zobraziť štatistiky o tom, ako používate Safe Eyes"
|
||||||
|
|
||||||
# plugin/healthstats
|
# plugin/healthstats
|
||||||
msgid "Statistics reset interval (cron expression)"
|
msgid "Statistics reset interval (cron expression)"
|
||||||
msgstr ""
|
msgstr "Interval vynulovania štatistík (výraz pre plánovač cron)"
|
||||||
|
|
||||||
# plugin/notification
|
# plugin/notification
|
||||||
msgid "Notification"
|
msgid "Notification"
|
||||||
|
@ -403,7 +405,7 @@ msgstr "Započítaj čas, kedy počítač nie je používaný, do prestávky"
|
||||||
|
|
||||||
# plugin/smartpause
|
# plugin/smartpause
|
||||||
msgid "Postpone the next break until the system becomes idle"
|
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
|
#: plugins/trayicon
|
||||||
msgid "Tray Icon"
|
msgid "Tray Icon"
|
||||||
|
@ -419,7 +421,7 @@ msgstr "Zobraziť čas nasledujúcej prestávku v ikone"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Allow disabling Safe Eyes"
|
msgid "Allow disabling Safe Eyes"
|
||||||
msgstr ""
|
msgstr "Povoliť vypnutie Safe Eyes"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "About"
|
msgid "About"
|
||||||
|
@ -488,12 +490,12 @@ msgstr "Koniec"
|
||||||
|
|
||||||
# plugin/mediacontrol
|
# plugin/mediacontrol
|
||||||
msgid "Media Control"
|
msgid "Media Control"
|
||||||
msgstr ""
|
msgstr "Ovládanie médií"
|
||||||
|
|
||||||
# plugin/mediacontrol
|
# plugin/mediacontrol
|
||||||
msgid "Pause media players from the break screen"
|
msgid "Pause media players from the break screen"
|
||||||
msgstr ""
|
msgstr "Pozastaviť prehrávače médií z obrazovky prestávky"
|
||||||
|
|
||||||
# plugin/mediacontrol
|
# plugin/mediacontrol
|
||||||
msgid "Pause media"
|
msgid "Pause media"
|
||||||
msgstr ""
|
msgstr "Pozastaviť média"
|
||||||
|
|
|
@ -6,94 +6,97 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: \n"
|
"PO-Revision-Date: 2023-10-13 04:15+0000\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: Novak Urosevic <novak_urosevic@yahoo.com>\n"
|
||||||
"Language-Team: \n"
|
"Language-Team: Serbian <https://hosted.weblate.org/projects/safe-eyes/"
|
||||||
|
"translations/sr/>\n"
|
||||||
"Language: sr\n"
|
"Language: sr\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Generator: Poedit 2.3\n"
|
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||||
"%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
|
"X-Generator: Weblate 5.1-dev\n"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Tightly close your eyes"
|
msgid "Tightly close your eyes"
|
||||||
msgstr ""
|
msgstr "Чврсто затворите очи"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Roll your eyes a few times to each side"
|
msgid "Roll your eyes a few times to each side"
|
||||||
msgstr ""
|
msgstr "Колутајте очима „исцртавајући“ број 8 неколико пута"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Rotate your eyes in clockwise direction"
|
msgid "Rotate your eyes in clockwise direction"
|
||||||
msgstr ""
|
msgstr "Колутајте очи у круг у смеру казаљке на сату"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Rotate your eyes in counterclockwise direction"
|
msgid "Rotate your eyes in counterclockwise direction"
|
||||||
msgstr ""
|
msgstr "Колутајте очи у круг у смеру супротном од казаљке на сату"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Blink your eyes"
|
msgid "Blink your eyes"
|
||||||
msgstr ""
|
msgstr "Трепћите очима"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Focus on a point in the far distance"
|
msgid "Focus on a point in the far distance"
|
||||||
msgstr ""
|
msgstr "Усмерите поглед на тачку у даљини"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Have some water"
|
msgid "Have some water"
|
||||||
msgstr ""
|
msgstr "Попијте воду"
|
||||||
|
|
||||||
# Long break
|
# Long break
|
||||||
msgid "Walk for a while"
|
msgid "Walk for a while"
|
||||||
msgstr ""
|
msgstr "Протегните се"
|
||||||
|
|
||||||
# Long break
|
# Long break
|
||||||
msgid "Lean back at your seat and relax"
|
msgid "Lean back at your seat and relax"
|
||||||
msgstr ""
|
msgstr "Завалите се у фотељу и опустите се"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "show the about dialog"
|
msgid "show the about dialog"
|
||||||
msgstr ""
|
msgstr "Прикажи о нама прозор"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "disable the currently running safeeyes instance"
|
msgid "disable the currently running safeeyes instance"
|
||||||
msgstr ""
|
msgstr "Онемогућите тренутну сесију safeeyes-a"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "enable the currently running safeeyes instance"
|
msgid "enable the currently running safeeyes instance"
|
||||||
msgstr ""
|
msgstr "Омогућите тренутну сесију safeeyes-a"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "quit the running safeeyes instance and exit"
|
msgid "quit the running safeeyes instance and exit"
|
||||||
msgstr ""
|
msgstr "Искључите тренутну сесију safeeyes-а и затворите програм"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "show the settings dialog"
|
msgid "show the settings dialog"
|
||||||
msgstr ""
|
msgstr "Прикажи прозор са подешавањима"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "start safeeyes in debug mode"
|
msgid "start safeeyes in debug mode"
|
||||||
msgstr ""
|
msgstr "Покрените safeeyes у режиму за исправљање грешака"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "print the status of running safeeyes instance and exit"
|
msgid "print the status of running safeeyes instance and exit"
|
||||||
msgstr ""
|
msgstr "Одштампајте статус тренутне сесије safeeyes-a и напустите"
|
||||||
|
|
||||||
# Status message
|
# Status message
|
||||||
msgid "Safe Eyes is not running"
|
msgid "Safe Eyes is not running"
|
||||||
msgstr ""
|
msgstr "Safe Eyes није укључен"
|
||||||
|
|
||||||
# RPC not enabled message
|
# RPC not enabled message
|
||||||
msgid ""
|
msgid ""
|
||||||
"Safe Eyes is running without an RPC server. Turn it on to use command-line "
|
"Safe Eyes is running without an RPC server. Turn it on to use command-line "
|
||||||
"arguments."
|
"arguments."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Safe Eyes ради без RPC (Remote Procedure Call) сервера. Укључите га како "
|
||||||
|
"бисте користили командне-линије."
|
||||||
|
|
||||||
# About dialog
|
# About dialog
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr "Затворите"
|
||||||
|
|
||||||
# Description in about dialog
|
# 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
|
# Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you to take breaks while you're working long hours at the computer
|
||||||
|
@ -101,396 +104,405 @@ msgid ""
|
||||||
"Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you "
|
"Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you "
|
||||||
"to take breaks while you're working long hours at the computer"
|
"to take breaks while you're working long hours at the computer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Safe Eyes штити Ваше очи од напрезања (astenopija) подсећајући Вас да "
|
||||||
|
"правите паузе током вишесатне употребе компјутера"
|
||||||
|
|
||||||
# About dialog
|
# About dialog
|
||||||
msgid "License"
|
msgid "License"
|
||||||
msgstr ""
|
msgstr "Лиценца"
|
||||||
|
|
||||||
# Break screen
|
# Break screen
|
||||||
msgid "Skip"
|
msgid "Skip"
|
||||||
msgstr ""
|
msgstr "Прескочите"
|
||||||
|
|
||||||
# Break screen
|
# Break screen
|
||||||
msgid "Postpone"
|
msgid "Postpone"
|
||||||
msgstr ""
|
msgstr "Одложите"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Break duration (in seconds)"
|
msgid "Break duration (in seconds)"
|
||||||
msgstr ""
|
msgstr "Време трајања паузе (у секундама)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Interval between two breaks (in minutes)"
|
msgid "Interval between two breaks (in minutes)"
|
||||||
msgstr ""
|
msgstr "Временски период између две паузе (у минутима)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Time to prepare for a break (in seconds)"
|
msgid "Time to prepare for a break (in seconds)"
|
||||||
msgstr ""
|
msgstr "Време припреме за паузу (у секундама)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Keyboard shortcuts disabled period (in seconds)"
|
msgid "Keyboard shortcuts disabled period (in seconds)"
|
||||||
msgstr ""
|
msgstr "Временски период искључења пречица тастатуре (у секундама)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Postponement duration (in minutes)"
|
msgid "Postponement duration (in minutes)"
|
||||||
msgstr ""
|
msgstr "Дужина трајања Одлагања (у минутима)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Show breaks in random order"
|
msgid "Show breaks in random order"
|
||||||
msgstr ""
|
msgstr "Прикажите паузе насумичним редоследом"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Strict break (No way to skip breaks)"
|
msgid "Strict break (No way to skip breaks)"
|
||||||
msgstr ""
|
msgstr "Обавезна пауза (без могућности одлагања пауза)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Allow postponing breaks"
|
msgid "Allow postponing breaks"
|
||||||
msgstr ""
|
msgstr "Дозволи одлагање пауза"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Persist the internal state"
|
msgid "Persist the internal state"
|
||||||
msgstr ""
|
msgstr "Задржи интерни статус"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Use RPC server to receive runtime commands"
|
msgid "Use RPC server to receive runtime commands"
|
||||||
msgstr ""
|
msgstr "Користите RPC сервер како бисте примили runtime команде"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Without the RPC server, command-line commands may not work"
|
msgid "Without the RPC server, command-line commands may not work"
|
||||||
msgstr ""
|
msgstr "Без RPC сервера, унос путем командних-линија можда неће бити успешан"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Long break interval must be a multiple of short break interval"
|
msgid "Long break interval must be a multiple of short break interval"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Интервали између дугих пауза морају бити неколико пута дужи од интервала "
|
||||||
|
"између кратких пауза"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Reset"
|
msgid "Reset"
|
||||||
msgstr ""
|
msgstr "Поново покрените"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Are you sure you want to reset all settings to default?"
|
msgid "Are you sure you want to reset all settings to default?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Да ли сигурно желите да вратите сва подешавања на подразумевана подешавања?"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Options"
|
msgid "Options"
|
||||||
msgstr ""
|
msgstr "Опције"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Short Breaks"
|
msgid "Short Breaks"
|
||||||
msgstr ""
|
msgstr "Кратке Паузе"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Long Breaks"
|
msgid "Long Breaks"
|
||||||
msgstr ""
|
msgstr "Дуге Паузе"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr "Обришите"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Are you sure you want to delete this break?"
|
msgid "Are you sure you want to delete this break?"
|
||||||
msgstr ""
|
msgstr "Да ли сигурно желите да обришете ову паузу?"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "You can't undo this action."
|
msgid "You can't undo this action."
|
||||||
msgstr ""
|
msgstr "Не можете опозвати радњу."
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Break"
|
msgid "Break"
|
||||||
msgstr ""
|
msgstr "Пауза"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Breaks"
|
msgid "Breaks"
|
||||||
msgstr ""
|
msgstr "Паузе"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Plugins"
|
msgid "Plugins"
|
||||||
msgstr ""
|
msgstr "Додаци"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Type"
|
msgid "Type"
|
||||||
msgstr ""
|
msgstr "Укуцајте"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Short"
|
msgid "Short"
|
||||||
msgstr ""
|
msgstr "Кратка"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Long"
|
msgid "Long"
|
||||||
msgstr ""
|
msgstr "Дуга"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Image"
|
msgid "Image"
|
||||||
msgstr ""
|
msgstr "Слика"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Select"
|
msgid "Select"
|
||||||
msgstr ""
|
msgstr "Изаберите"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Please select an image"
|
msgid "Please select an image"
|
||||||
msgstr ""
|
msgstr "Молимо Вас изаберите слику"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Duration"
|
msgid "Duration"
|
||||||
msgstr ""
|
msgstr "Дужина трајања"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Time to wait"
|
msgid "Time to wait"
|
||||||
msgstr ""
|
msgstr "Време чекања"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Override"
|
msgid "Override"
|
||||||
msgstr ""
|
msgstr "Преписати"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Time (in seconds)"
|
msgid "Time (in seconds)"
|
||||||
msgstr ""
|
msgstr "Време (у секундама)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Time (in minutes)"
|
msgid "Time (in minutes)"
|
||||||
msgstr ""
|
msgstr "Време (у минутима)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Break Settings"
|
msgid "Break Settings"
|
||||||
msgstr ""
|
msgstr "Подешавање паузе"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Plugin Settings"
|
msgid "Plugin Settings"
|
||||||
msgstr ""
|
msgstr "Подешавање додатака"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Plugin does not support %s desktop environment"
|
msgid "Plugin does not support %s desktop environment"
|
||||||
msgstr ""
|
msgstr "Додатак не подржава % радну површину"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Please install the Python module '%s'"
|
msgid "Please install the Python module '%s'"
|
||||||
msgstr ""
|
msgstr "Молимо Вас, преузмите модул '%s' за Пајтон"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Please install the command-line tool '%s'"
|
msgid "Please install the command-line tool '%s'"
|
||||||
msgstr ""
|
msgstr "Молимо Вас, преузмите алатку командне-линије '%s'"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Invalid cron expression '%s'"
|
msgid "Invalid cron expression '%s'"
|
||||||
msgstr ""
|
msgstr "Неправилан формат за извршавање cron посла '%s'"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Please add the resource %(resource)s to %(config_resource)s directory"
|
msgid "Please add the resource %(resource)s to %(config_resource)s directory"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Молимо Вас, додајте ресурс %(resource)s у %(config_resource)s директоријум"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "New Break"
|
msgid "New Break"
|
||||||
msgstr ""
|
msgstr "Нова Пауза"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr ""
|
msgstr "Уклоните"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Discard"
|
msgid "Discard"
|
||||||
msgstr ""
|
msgstr "Одбаците"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Save"
|
msgid "Save"
|
||||||
msgstr ""
|
msgstr "Сачувајте"
|
||||||
|
|
||||||
# plugin/audiblealert
|
# plugin/audiblealert
|
||||||
msgid "Audible Alert"
|
msgid "Audible Alert"
|
||||||
msgstr ""
|
msgstr "Звучно Обавештење"
|
||||||
|
|
||||||
# plugin/audiblealert
|
# plugin/audiblealert
|
||||||
msgid "Play audible alert before and after breaks"
|
msgid "Play audible alert before and after breaks"
|
||||||
msgstr ""
|
msgstr "Пустите звучно обавештење пре и после пауза"
|
||||||
|
|
||||||
# plugin/audiblealert
|
# plugin/audiblealert
|
||||||
msgid "Play audible alert before breaks"
|
msgid "Play audible alert before breaks"
|
||||||
msgstr ""
|
msgstr "Пустите звучно обавештење пре пауза"
|
||||||
|
|
||||||
# plugin/audiblealert
|
# plugin/audiblealert
|
||||||
msgid "Play audible alert after breaks"
|
msgid "Play audible alert after breaks"
|
||||||
msgstr ""
|
msgstr "Пустите звучно овавештење након пауза"
|
||||||
|
|
||||||
# plugin/donotdisturb
|
# plugin/donotdisturb
|
||||||
msgid "Do Not Disturb"
|
msgid "Do Not Disturb"
|
||||||
msgstr ""
|
msgstr "Не Узнемиравај"
|
||||||
|
|
||||||
# plugin/donotdisturb
|
# plugin/donotdisturb
|
||||||
msgid "Skip break if the active window is in fullscreen mode"
|
msgid "Skip break if the active window is in fullscreen mode"
|
||||||
msgstr ""
|
msgstr "Прескочите паузу уколико је тренутни радни прозор у пуном екрану"
|
||||||
|
|
||||||
# plugin/donotdisturb
|
# plugin/donotdisturb
|
||||||
msgid "Do not interrupt these windows anytime"
|
msgid "Do not interrupt these windows anytime"
|
||||||
msgstr ""
|
msgstr "Никада не ометајте ове радне прозоре"
|
||||||
|
|
||||||
# plugin/donotdisturb
|
# plugin/donotdisturb
|
||||||
msgid "Interrupt these windows regardless of their state"
|
msgid "Interrupt these windows regardless of their state"
|
||||||
msgstr ""
|
msgstr "Ометајте ове радне прозоре без обзира на њихово стање"
|
||||||
|
|
||||||
# plugin/donotdisturb
|
# plugin/donotdisturb
|
||||||
msgid "Switch the interruptible windows to normal mode"
|
msgid "Switch the interruptible windows to normal mode"
|
||||||
msgstr ""
|
msgstr "Промените променљив радни прозор у нормалан режим"
|
||||||
|
|
||||||
# plugin/donotdisturb
|
# plugin/donotdisturb
|
||||||
msgid "Do not disturb while on battery"
|
msgid "Do not disturb while on battery"
|
||||||
msgstr ""
|
msgstr "Не Узнемиравај док компјутер ради са батерије"
|
||||||
|
|
||||||
# plugin/healthstats
|
# plugin/healthstats
|
||||||
msgid "Health Statistics"
|
msgid "Health Statistics"
|
||||||
msgstr ""
|
msgstr "Здравствена статистика"
|
||||||
|
|
||||||
# plugin/healthstats
|
# plugin/healthstats
|
||||||
msgid "Show statistics based on how you use Safe Eyes"
|
msgid "Show statistics based on how you use Safe Eyes"
|
||||||
msgstr ""
|
msgstr "Покажи статистику на основу Ваше употребе Safe Eyes-a"
|
||||||
|
|
||||||
# plugin/healthstats
|
# plugin/healthstats
|
||||||
msgid "Statistics reset interval (cron expression)"
|
msgid "Statistics reset interval (cron expression)"
|
||||||
msgstr ""
|
msgstr "Интервал ресетовања Података (cron послова)"
|
||||||
|
|
||||||
# plugin/notification
|
# plugin/notification
|
||||||
msgid "Notification"
|
msgid "Notification"
|
||||||
msgstr ""
|
msgstr "Обавештење"
|
||||||
|
|
||||||
# plugin/notification
|
# plugin/notification
|
||||||
msgid "Show a system notification before breaks"
|
msgid "Show a system notification before breaks"
|
||||||
msgstr ""
|
msgstr "Покажите системско обавештење пре почетка пауза"
|
||||||
|
|
||||||
# plugin/notification
|
# plugin/notification
|
||||||
msgid "Ready for a short break in %s seconds"
|
msgid "Ready for a short break in %s seconds"
|
||||||
msgstr ""
|
msgstr "Спремите се за кратку паузу у року од %s секунди"
|
||||||
|
|
||||||
# plugin/notification
|
# plugin/notification
|
||||||
msgid "Ready for a long break in %s seconds"
|
msgid "Ready for a long break in %s seconds"
|
||||||
msgstr ""
|
msgstr "Спремите се за дугу паузу у року од %s секунди"
|
||||||
|
|
||||||
# plugin/screensaver
|
# plugin/screensaver
|
||||||
msgid "Screensaver"
|
msgid "Screensaver"
|
||||||
msgstr ""
|
msgstr "Чувар екрана"
|
||||||
|
|
||||||
# plugin/screensaver
|
# plugin/screensaver
|
||||||
msgid "Lock the screen after long breaks by starting screensaver"
|
msgid "Lock the screen after long breaks by starting screensaver"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Закључајте екран за време дугих паузи тако што ћете укључити чувар екрана"
|
||||||
|
|
||||||
# plugin/screensaver
|
# plugin/screensaver
|
||||||
msgid "Custom screensaver command"
|
msgid "Custom screensaver command"
|
||||||
msgstr ""
|
msgstr "Команда за чувар екрана по жељи"
|
||||||
|
|
||||||
# plugin/screensaver
|
# plugin/screensaver
|
||||||
msgid "Minimum seconds to skip without screensaver"
|
msgid "Minimum seconds to skip without screensaver"
|
||||||
msgstr ""
|
msgstr "Најмањи број секунди за прескакање без чувара екрана"
|
||||||
|
|
||||||
# plugin/screensaver
|
# plugin/screensaver
|
||||||
msgid "Lock screen"
|
msgid "Lock screen"
|
||||||
msgstr ""
|
msgstr "Закључајте екран"
|
||||||
|
|
||||||
# plugin/smartpause
|
# plugin/smartpause
|
||||||
msgid "Smart Pause"
|
msgid "Smart Pause"
|
||||||
msgstr ""
|
msgstr "Паметна Пауза"
|
||||||
|
|
||||||
# plugin/smartpause
|
# plugin/smartpause
|
||||||
msgid "Pause Safe Eyes if the system is idle"
|
msgid "Pause Safe Eyes if the system is idle"
|
||||||
msgstr ""
|
msgstr "Зауставите Safe-Eyes уколико систем мирује"
|
||||||
|
|
||||||
# plugin/smartpause
|
# plugin/smartpause
|
||||||
msgid "Minimum idle time to pause Safe Eyes (in seconds)"
|
msgid "Minimum idle time to pause Safe Eyes (in seconds)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Најкраћи временски период потребан за заустављање Safe Eyes-a (у секундама)"
|
||||||
|
|
||||||
# plugin/smartpause
|
# plugin/smartpause
|
||||||
msgid "Interpret idle time equivalent to upcoming break duration as a break"
|
msgid "Interpret idle time equivalent to upcoming break duration as a break"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Протумачите време мировања еквивалентно трајању предстојеће паузе као паузу"
|
||||||
|
|
||||||
# plugin/smartpause
|
# plugin/smartpause
|
||||||
msgid "Postpone the next break until the system becomes idle"
|
msgid "Postpone the next break until the system becomes idle"
|
||||||
msgstr ""
|
msgstr "Одложите наредну паузу док систем не постане неактиван"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Tray Icon"
|
msgid "Tray Icon"
|
||||||
msgstr ""
|
msgstr "Иконица на панелу"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Show a tray icon in the notification area"
|
msgid "Show a tray icon in the notification area"
|
||||||
msgstr ""
|
msgstr "Покажите иконицу на панелу у Обавештењима"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Show next break time in tray icon"
|
msgid "Show next break time in tray icon"
|
||||||
msgstr ""
|
msgstr "Покажите време следеће паузе на иконици на панелу"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Allow disabling Safe Eyes"
|
msgid "Allow disabling Safe Eyes"
|
||||||
msgstr ""
|
msgstr "Дозволи онемогућавање Safe Eyes-a"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "About"
|
msgid "About"
|
||||||
msgstr ""
|
msgstr "О програму"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Disable Safe Eyes"
|
msgid "Disable Safe Eyes"
|
||||||
msgstr ""
|
msgstr "Онемогући Safe Eyes"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Disabled until %s"
|
msgid "Disabled until %s"
|
||||||
msgstr ""
|
msgstr "Онемогућено до %s"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Disabled until restart"
|
msgid "Disabled until restart"
|
||||||
msgstr ""
|
msgstr "Онемогућено до ресетовања"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Enable Safe Eyes"
|
msgid "Enable Safe Eyes"
|
||||||
msgstr ""
|
msgstr "Омогући Safe Eyes"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "For %d Hour"
|
msgid "For %d Hour"
|
||||||
msgid_plural "For %d Hours"
|
msgid_plural "For %d Hours"
|
||||||
msgstr[0] ""
|
msgstr[0] "сат"
|
||||||
msgstr[1] ""
|
msgstr[1] "сати"
|
||||||
msgstr[2] ""
|
msgstr[2] "сати"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "For %d Minute"
|
msgid "For %d Minute"
|
||||||
msgid_plural "For %d Minutes"
|
msgid_plural "For %d Minutes"
|
||||||
msgstr[0] ""
|
msgstr[0] "минут"
|
||||||
msgstr[1] ""
|
msgstr[1] "минута"
|
||||||
msgstr[2] ""
|
msgstr[2] "минута"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "For %d Second"
|
msgid "For %d Second"
|
||||||
msgid_plural "For %d Seconds"
|
msgid_plural "For %d Seconds"
|
||||||
msgstr[0] ""
|
msgstr[0] "секунда"
|
||||||
msgstr[1] ""
|
msgstr[1] "секунде"
|
||||||
msgstr[2] ""
|
msgstr[2] "секунди"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Next break at %s"
|
msgid "Next break at %s"
|
||||||
msgstr ""
|
msgstr "Наредна пауза је у %s"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "No Breaks Available"
|
msgid "No Breaks Available"
|
||||||
msgstr ""
|
msgstr "Нема доступних Пауза"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr ""
|
msgstr "Подешавања"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Take a break now"
|
msgid "Take a break now"
|
||||||
msgstr ""
|
msgstr "Сада направи паузу"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Until restart"
|
msgid "Until restart"
|
||||||
msgstr ""
|
msgstr "До ресетовања"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr ""
|
msgstr "Изађите"
|
||||||
|
|
||||||
# plugin/mediacontrol
|
# plugin/mediacontrol
|
||||||
msgid "Media Control"
|
msgid "Media Control"
|
||||||
msgstr ""
|
msgstr "Контрола медија"
|
||||||
|
|
||||||
# plugin/mediacontrol
|
# plugin/mediacontrol
|
||||||
msgid "Pause media players from the break screen"
|
msgid "Pause media players from the break screen"
|
||||||
msgstr ""
|
msgstr "Зауставите рад медијских плејера са екрана Паузе"
|
||||||
|
|
||||||
# plugin/mediacontrol
|
# plugin/mediacontrol
|
||||||
msgid "Pause media"
|
msgid "Pause media"
|
||||||
msgstr ""
|
msgstr "Паузирај медије"
|
||||||
|
|
|
@ -6,8 +6,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: 2020-09-28 07:40+0000\n"
|
"PO-Revision-Date: 2023-02-11 11:39+0000\n"
|
||||||
"Last-Translator: Mattias Münster <mattiasmun@gmail.com>\n"
|
"Last-Translator: Luna Jernberg <droidbittin@gmail.com>\n"
|
||||||
"Language-Team: Swedish <https://hosted.weblate.org/projects/safe-eyes/"
|
"Language-Team: Swedish <https://hosted.weblate.org/projects/safe-eyes/"
|
||||||
"translations/sv/>\n"
|
"translations/sv/>\n"
|
||||||
"Language: sv\n"
|
"Language: sv\n"
|
||||||
|
@ -15,7 +15,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"X-Generator: Weblate 4.3-dev\n"
|
"X-Generator: Weblate 4.16-dev\n"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Tightly close your eyes"
|
msgid "Tightly close your eyes"
|
||||||
|
@ -138,7 +138,7 @@ msgstr "Uppskjutningsvaraktighet (i minuter)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Show breaks in random order"
|
msgid "Show breaks in random order"
|
||||||
msgstr ""
|
msgstr "Visa avbrott i slumpmässig ordning"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Strict break (No way to skip breaks)"
|
msgid "Strict break (No way to skip breaks)"
|
||||||
|
@ -275,7 +275,7 @@ msgstr "Installera kommandoradsverktyget '%s'"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Invalid cron expression '%s'"
|
msgid "Invalid cron expression '%s'"
|
||||||
msgstr ""
|
msgstr "Ogiltigt cron uttryck '%s'"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Please add the resource %(resource)s to %(config_resource)s directory"
|
msgid "Please add the resource %(resource)s to %(config_resource)s directory"
|
||||||
|
@ -347,7 +347,7 @@ msgstr "Visa statistik baserat på hur du använder Safe Eyes"
|
||||||
|
|
||||||
# plugin/healthstats
|
# plugin/healthstats
|
||||||
msgid "Statistics reset interval (cron expression)"
|
msgid "Statistics reset interval (cron expression)"
|
||||||
msgstr ""
|
msgstr "Återställningsintervall för statistik (cron-uttryck)"
|
||||||
|
|
||||||
# plugin/notification
|
# plugin/notification
|
||||||
msgid "Notification"
|
msgid "Notification"
|
||||||
|
|
|
@ -6,17 +6,17 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: 2021-01-27 09:32+0000\n"
|
"PO-Revision-Date: 2024-02-15 13:01+0000\n"
|
||||||
"Last-Translator: Dmitriy Q <krotesk@mail.ru>\n"
|
"Last-Translator: Сергій <sergiy.goncharuk.1@gmail.com>\n"
|
||||||
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/safe-eyes/"
|
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/safe-eyes/"
|
||||||
"translations/uk/>\n"
|
"translations/uk/>\n"
|
||||||
"Language: uk\n"
|
"Language: uk\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||||
"X-Generator: Weblate 4.5-dev\n"
|
"X-Generator: Weblate 5.4-dev\n"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Tightly close your eyes"
|
msgid "Tightly close your eyes"
|
||||||
|
@ -48,7 +48,7 @@ msgstr "Випийте води"
|
||||||
|
|
||||||
# Long break
|
# Long break
|
||||||
msgid "Walk for a while"
|
msgid "Walk for a while"
|
||||||
msgstr "Трохи походіть"
|
msgstr "Прогуляйтесь"
|
||||||
|
|
||||||
# Long break
|
# Long break
|
||||||
msgid "Lean back at your seat and relax"
|
msgid "Lean back at your seat and relax"
|
||||||
|
@ -139,7 +139,7 @@ msgstr "Тривалість відкладення (в хвилинах)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Show breaks in random order"
|
msgid "Show breaks in random order"
|
||||||
msgstr ""
|
msgstr "Показувати перерви у випадковому порядку"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Strict break (No way to skip breaks)"
|
msgid "Strict break (No way to skip breaks)"
|
||||||
|
@ -196,7 +196,7 @@ msgstr "Ви упевнені, що хочете видалити цю пере
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "You can't undo this action."
|
msgid "You can't undo this action."
|
||||||
msgstr "Цю дію неможливо відмінити."
|
msgstr "Цю дію неможливо скасувати."
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Break"
|
msgid "Break"
|
||||||
|
@ -275,9 +275,8 @@ msgid "Please install the command-line tool '%s'"
|
||||||
msgstr "Будь ласка, встановіть засіб вказівкового рядка «%s»"
|
msgstr "Будь ласка, встановіть засіб вказівкового рядка «%s»"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
#, fuzzy
|
|
||||||
msgid "Invalid cron expression '%s'"
|
msgid "Invalid cron expression '%s'"
|
||||||
msgstr "Неприпустимий вираз cron '% s'"
|
msgstr "Неприпустимий вираз cron '%s'"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Please add the resource %(resource)s to %(config_resource)s directory"
|
msgid "Please add the resource %(resource)s to %(config_resource)s directory"
|
||||||
|
@ -290,7 +289,7 @@ msgstr "Нова перерва"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Видалити"
|
msgstr "Вилучити"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Discard"
|
msgid "Discard"
|
||||||
|
@ -351,7 +350,7 @@ msgstr "Показувати статистику на основі викори
|
||||||
|
|
||||||
# plugin/healthstats
|
# plugin/healthstats
|
||||||
msgid "Statistics reset interval (cron expression)"
|
msgid "Statistics reset interval (cron expression)"
|
||||||
msgstr ""
|
msgstr "Інтервал скидання статистики (вираз cron)"
|
||||||
|
|
||||||
# plugin/notification
|
# plugin/notification
|
||||||
msgid "Notification"
|
msgid "Notification"
|
||||||
|
|
|
@ -6,8 +6,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: 2018-08-26 03:45+0000\n"
|
"PO-Revision-Date: 2022-11-26 23:54+0000\n"
|
||||||
"Last-Translator: Hoàng Trần <hoangtk102@gmail.com>\n"
|
"Last-Translator: Minh P <phandinhminh@protonmail.ch>\n"
|
||||||
"Language-Team: Vietnamese <https://hosted.weblate.org/projects/safe-eyes/"
|
"Language-Team: Vietnamese <https://hosted.weblate.org/projects/safe-eyes/"
|
||||||
"translations/vi/>\n"
|
"translations/vi/>\n"
|
||||||
"Language: vi\n"
|
"Language: vi\n"
|
||||||
|
@ -15,7 +15,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
"X-Generator: Weblate 3.2-dev\n"
|
"X-Generator: Weblate 4.15-dev\n"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Tightly close your eyes"
|
msgid "Tightly close your eyes"
|
||||||
|
@ -79,7 +79,7 @@ msgstr "Chạy Safe Eyes trong chế độ gỡ rối"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "print the status of running safeeyes instance and exit"
|
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
|
# Status message
|
||||||
msgid "Safe Eyes is not running"
|
msgid "Safe Eyes is not running"
|
||||||
|
@ -90,6 +90,8 @@ msgid ""
|
||||||
"Safe Eyes is running without an RPC server. Turn it on to use command-line "
|
"Safe Eyes is running without an RPC server. Turn it on to use command-line "
|
||||||
"arguments."
|
"arguments."
|
||||||
msgstr ""
|
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
|
# About dialog
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
|
@ -139,7 +141,7 @@ msgstr "Thời gian tạm hoãn (bằng phút)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Show breaks in random order"
|
msgid "Show breaks in random order"
|
||||||
msgstr ""
|
msgstr "Hiển thị theo thứ tự ngẫu nhiên"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Strict break (No way to skip breaks)"
|
msgid "Strict break (No way to skip breaks)"
|
||||||
|
@ -151,15 +153,15 @@ msgstr "Cho phép tạm hoãn nghỉ ngơi"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Persist the internal state"
|
msgid "Persist the internal state"
|
||||||
msgstr "Persist the internal state"
|
msgstr "Duy trì nội trạng thái"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Use RPC server to receive runtime commands"
|
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
|
# Settings dialog
|
||||||
msgid "Without the RPC server, command-line commands may not work"
|
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
|
# Settings dialog
|
||||||
msgid "Long break interval must be a multiple of short break interval"
|
msgid "Long break interval must be a multiple of short break interval"
|
||||||
|
@ -167,11 +169,11 @@ msgstr "Thời gian nghỉ dài phải là bội số của thời gian nghỉ n
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Reset"
|
msgid "Reset"
|
||||||
msgstr ""
|
msgstr "Đặt lại"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Are you sure you want to reset all settings to default?"
|
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
|
# Settings dialog
|
||||||
msgid "Options"
|
msgid "Options"
|
||||||
|
@ -187,15 +189,15 @@ msgstr "Nghỉ ngơi dài"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr "Xóa"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Are you sure you want to delete this break?"
|
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
|
# Settings dialog
|
||||||
msgid "You can't undo this action."
|
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
|
# Settings dialog
|
||||||
msgid "Break"
|
msgid "Break"
|
||||||
|
@ -239,7 +241,7 @@ msgstr "Thời gian"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Time to wait"
|
msgid "Time to wait"
|
||||||
msgstr ""
|
msgstr "Thời gian chờ"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Override"
|
msgid "Override"
|
||||||
|
@ -275,7 +277,7 @@ msgstr "Vui lòng cài đặt công cụ dòng lệnh (command-line tool) '%s'"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Invalid cron expression '%s'"
|
msgid "Invalid cron expression '%s'"
|
||||||
msgstr ""
|
msgstr "Biểu thức cron '%s' không hợp lệ"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Please add the resource %(resource)s to %(config_resource)s directory"
|
msgid "Please add the resource %(resource)s to %(config_resource)s directory"
|
||||||
|
@ -303,15 +305,15 @@ msgstr "Thông báo âm thanh"
|
||||||
|
|
||||||
# plugin/audiblealert
|
# plugin/audiblealert
|
||||||
msgid "Play audible alert before and after breaks"
|
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
|
# plugin/audiblealert
|
||||||
msgid "Play audible alert before breaks"
|
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
|
# plugin/audiblealert
|
||||||
msgid "Play audible alert after breaks"
|
msgid "Play audible alert after breaks"
|
||||||
msgstr ""
|
msgstr "Phát âm thanh cảnh báo sau khi nghỉ giải lao"
|
||||||
|
|
||||||
# plugin/donotdisturb
|
# plugin/donotdisturb
|
||||||
msgid "Do Not Disturb"
|
msgid "Do Not Disturb"
|
||||||
|
@ -336,7 +338,7 @@ msgstr "Chuyển các cửa sổ có thể ngắt được sang chế độ bìn
|
||||||
|
|
||||||
# plugin/donotdisturb
|
# plugin/donotdisturb
|
||||||
msgid "Do not disturb while on battery"
|
msgid "Do not disturb while on battery"
|
||||||
msgstr ""
|
msgstr "Không làm phiền khi đang sử dụng pin"
|
||||||
|
|
||||||
# plugin/healthstats
|
# plugin/healthstats
|
||||||
msgid "Health Statistics"
|
msgid "Health Statistics"
|
||||||
|
@ -348,7 +350,7 @@ msgstr "Hiện thống kê dựa trên việc bạn sử dụng Safe Eyes như t
|
||||||
|
|
||||||
# plugin/healthstats
|
# plugin/healthstats
|
||||||
msgid "Statistics reset interval (cron expression)"
|
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
|
# plugin/notification
|
||||||
msgid "Notification"
|
msgid "Notification"
|
||||||
|
@ -384,7 +386,7 @@ msgstr "Số giây thối thiểu để bỏ qua mà không có màn hình chờ
|
||||||
|
|
||||||
# plugin/screensaver
|
# plugin/screensaver
|
||||||
msgid "Lock screen"
|
msgid "Lock screen"
|
||||||
msgstr ""
|
msgstr "Khóa màn hình"
|
||||||
|
|
||||||
# plugin/smartpause
|
# plugin/smartpause
|
||||||
msgid "Smart Pause"
|
msgid "Smart Pause"
|
||||||
|
@ -406,7 +408,7 @@ msgstr ""
|
||||||
|
|
||||||
# plugin/smartpause
|
# plugin/smartpause
|
||||||
msgid "Postpone the next break until the system becomes idle"
|
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
|
#: plugins/trayicon
|
||||||
msgid "Tray Icon"
|
msgid "Tray Icon"
|
||||||
|
@ -422,7 +424,7 @@ msgstr "Hiện thời gian nghỉ tiếp theo ở biểu tượng khay"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Allow disabling Safe Eyes"
|
msgid "Allow disabling Safe Eyes"
|
||||||
msgstr ""
|
msgstr "Cho phép tắt Safe Eyes"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "About"
|
msgid "About"
|
||||||
|
@ -485,12 +487,12 @@ msgstr "Thoát"
|
||||||
|
|
||||||
# plugin/mediacontrol
|
# plugin/mediacontrol
|
||||||
msgid "Media Control"
|
msgid "Media Control"
|
||||||
msgstr ""
|
msgstr "Kiểm soát phương tiện"
|
||||||
|
|
||||||
# plugin/mediacontrol
|
# plugin/mediacontrol
|
||||||
msgid "Pause media players from the break screen"
|
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
|
# plugin/mediacontrol
|
||||||
msgid "Pause media"
|
msgid "Pause media"
|
||||||
msgstr ""
|
msgstr "Tạm dừng media"
|
||||||
|
|
|
@ -6,8 +6,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: 2021-03-07 09:50+0000\n"
|
"PO-Revision-Date: 2024-02-21 10:01+0000\n"
|
||||||
"Last-Translator: Eric <spice2wolf@gmail.com>\n"
|
"Last-Translator: aerowolf <aerowolf@tom.com>\n"
|
||||||
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
|
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
|
||||||
"safe-eyes/translations/zh_Hans/>\n"
|
"safe-eyes/translations/zh_Hans/>\n"
|
||||||
"Language: zh_CN\n"
|
"Language: zh_CN\n"
|
||||||
|
@ -15,23 +15,23 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
"X-Generator: Weblate 4.5.1\n"
|
"X-Generator: Weblate 5.5-dev\n"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Tightly close your eyes"
|
msgid "Tightly close your eyes"
|
||||||
msgstr "闭上您的眼睛休息一会"
|
msgstr "闭上眼睛休息一下"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Roll your eyes a few times to each side"
|
msgid "Roll your eyes a few times to each side"
|
||||||
msgstr "左右滚动您的眼珠"
|
msgstr "左右转动眼球"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Rotate your eyes in clockwise direction"
|
msgid "Rotate your eyes in clockwise direction"
|
||||||
msgstr "顺时针方向转动您的眼珠"
|
msgstr "顺时针方向转动眼球"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Rotate your eyes in counterclockwise direction"
|
msgid "Rotate your eyes in counterclockwise direction"
|
||||||
msgstr "逆时针方向转动您的眼珠"
|
msgstr "逆时针方向转动眼球"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Blink your eyes"
|
msgid "Blink your eyes"
|
||||||
|
@ -39,11 +39,11 @@ msgstr "眨眨眼"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Focus on a point in the far distance"
|
msgid "Focus on a point in the far distance"
|
||||||
msgstr "望远:将视线聚焦到远处物体上"
|
msgstr "远眺:看看尽可能远的远处"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Have some water"
|
msgid "Have some water"
|
||||||
msgstr "喝一点水"
|
msgstr "喝点水吧"
|
||||||
|
|
||||||
# Long break
|
# Long break
|
||||||
msgid "Walk for a while"
|
msgid "Walk for a while"
|
||||||
|
@ -51,7 +51,7 @@ msgstr "站起来走走"
|
||||||
|
|
||||||
# Long break
|
# Long break
|
||||||
msgid "Lean back at your seat and relax"
|
msgid "Lean back at your seat and relax"
|
||||||
msgstr "靠在椅背上休息一会"
|
msgstr "靠在椅背上休息一下"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "show the about dialog"
|
msgid "show the about dialog"
|
||||||
|
@ -59,15 +59,15 @@ msgstr "显示“关于”对话框"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "disable the currently running safeeyes instance"
|
msgid "disable the currently running safeeyes instance"
|
||||||
msgstr "禁用当前正在运行的Safe Eyes"
|
msgstr "暂停当前正在运行的Safe Eyes"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "enable the currently running safeeyes instance"
|
msgid "enable the currently running safeeyes instance"
|
||||||
msgstr "启用当前正在运行的Safe Eyes"
|
msgstr "恢复当前正在运行的Safe Eyes"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "quit the running safeeyes instance and exit"
|
msgid "quit the running safeeyes instance and exit"
|
||||||
msgstr "退出正在运行的Safe Eeyes"
|
msgstr "退出Safe Eeyes"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "show the settings dialog"
|
msgid "show the settings dialog"
|
||||||
|
@ -79,17 +79,17 @@ msgstr "以调试模式运行Safe Eyes"
|
||||||
|
|
||||||
# Commandline arg description
|
# Commandline arg description
|
||||||
msgid "print the status of running safeeyes instance and exit"
|
msgid "print the status of running safeeyes instance and exit"
|
||||||
msgstr "打印Safe Eyes运行状态后退出"
|
msgstr "显示Safe Eyes运行状态后退出"
|
||||||
|
|
||||||
# Status message
|
# Status message
|
||||||
msgid "Safe Eyes is not running"
|
msgid "Safe Eyes is not running"
|
||||||
msgstr "Safe Eyes尚未运行"
|
msgstr "Safe Eyes 没有运行"
|
||||||
|
|
||||||
# RPC not enabled message
|
# RPC not enabled message
|
||||||
msgid ""
|
msgid ""
|
||||||
"Safe Eyes is running without an RPC server. Turn it on to use command-line "
|
"Safe Eyes is running without an RPC server. Turn it on to use command-line "
|
||||||
"arguments."
|
"arguments."
|
||||||
msgstr "Safe Eyes 正在没有RPC服务器的情况下运行。打开它以使用命令行参数。"
|
msgstr "Safe Eyes 正在没有RPC服务器的情况下运行。打开RPC服务器可以使用命令行参数。"
|
||||||
|
|
||||||
# About dialog
|
# About dialog
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
|
@ -106,7 +106,7 @@ msgstr ""
|
||||||
|
|
||||||
# About dialog
|
# About dialog
|
||||||
msgid "License"
|
msgid "License"
|
||||||
msgstr "许可证"
|
msgstr "许可"
|
||||||
|
|
||||||
# Break screen
|
# Break screen
|
||||||
msgid "Skip"
|
msgid "Skip"
|
||||||
|
@ -142,7 +142,7 @@ msgstr "以随机顺序显示休息"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Strict break (No way to skip breaks)"
|
msgid "Strict break (No way to skip breaks)"
|
||||||
msgstr "坚持休息(无法跳过)"
|
msgstr "坚持休息(不允许跳过)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Allow postponing breaks"
|
msgid "Allow postponing breaks"
|
||||||
|
@ -150,7 +150,7 @@ msgstr "允许推迟休息"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Persist the internal state"
|
msgid "Persist the internal state"
|
||||||
msgstr "维持内部状态"
|
msgstr "支持内部状态"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Use RPC server to receive runtime commands"
|
msgid "Use RPC server to receive runtime commands"
|
||||||
|
@ -414,11 +414,11 @@ msgstr "在通知区域显示托盘图标"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Show next break time in tray icon"
|
msgid "Show next break time in tray icon"
|
||||||
msgstr "在托盘图标上显示下次休息时间"
|
msgstr "在托盘图标中显示下次休息时间"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Allow disabling Safe Eyes"
|
msgid "Allow disabling Safe Eyes"
|
||||||
msgstr "允许禁用Safe Eyes"
|
msgstr "允许暂停Safe Eyes"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "About"
|
msgid "About"
|
||||||
|
@ -426,19 +426,19 @@ msgstr "关于"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Disable Safe Eyes"
|
msgid "Disable Safe Eyes"
|
||||||
msgstr "禁用 Safe Eyes"
|
msgstr "暂停 Safe Eyes"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Disabled until %s"
|
msgid "Disabled until %s"
|
||||||
msgstr "禁用软件直到 %s"
|
msgstr "暂停,直到 %s"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Disabled until restart"
|
msgid "Disabled until restart"
|
||||||
msgstr "禁用软件直到重启"
|
msgstr "暂停,直到重启"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Enable Safe Eyes"
|
msgid "Enable Safe Eyes"
|
||||||
msgstr "启用 Safe Eyes"
|
msgstr "恢复 Safe Eyes"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "For %d Hour"
|
msgid "For %d Hour"
|
||||||
|
@ -457,7 +457,7 @@ msgstr[0] "%d 秒"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "Next break at %s"
|
msgid "Next break at %s"
|
||||||
msgstr "下次休息在 %s"
|
msgstr "下次休息将在 %s"
|
||||||
|
|
||||||
#: plugins/trayicon
|
#: plugins/trayicon
|
||||||
msgid "No Breaks Available"
|
msgid "No Breaks Available"
|
||||||
|
|
|
@ -6,7 +6,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: 2021-01-06 13:14+0000\n"
|
"PO-Revision-Date: 2024-01-30 14:01+0000\n"
|
||||||
"Last-Translator: 麋悟BigELK176 <bigelk176@gmail.com>\n"
|
"Last-Translator: 麋悟BigELK176 <bigelk176@gmail.com>\n"
|
||||||
"Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/"
|
"Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/"
|
||||||
"safe-eyes/translations/zh_Hant/>\n"
|
"safe-eyes/translations/zh_Hant/>\n"
|
||||||
|
@ -15,7 +15,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
"X-Generator: Weblate 4.4.1-dev\n"
|
"X-Generator: Weblate 5.4-dev\n"
|
||||||
|
|
||||||
# Short break
|
# Short break
|
||||||
msgid "Tightly close your eyes"
|
msgid "Tightly close your eyes"
|
||||||
|
@ -136,7 +136,7 @@ msgstr "推遲休息時長(分鐘)"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Show breaks in random order"
|
msgid "Show breaks in random order"
|
||||||
msgstr ""
|
msgstr "顯示休息隨機順序"
|
||||||
|
|
||||||
# Settings dialog
|
# Settings dialog
|
||||||
msgid "Strict break (No way to skip breaks)"
|
msgid "Strict break (No way to skip breaks)"
|
||||||
|
|
|
@ -77,6 +77,7 @@
|
||||||
"version": "0.0.3",
|
"version": "0.0.3",
|
||||||
"settings": {
|
"settings": {
|
||||||
"show_time_in_tray": false,
|
"show_time_in_tray": false,
|
||||||
|
"show_long_time_in_tray": false,
|
||||||
"allow_disabling": true,
|
"allow_disabling": true,
|
||||||
"disable_options": [{
|
"disable_options": [{
|
||||||
"time": 30,
|
"time": 30,
|
||||||
|
@ -103,7 +104,6 @@
|
||||||
"version": "0.0.3",
|
"version": "0.0.3",
|
||||||
"settings": {
|
"settings": {
|
||||||
"idle_time": 5,
|
"idle_time": 5,
|
||||||
"interpret_idle_as_break": false,
|
|
||||||
"postpone_if_active": false
|
"postpone_if_active": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -121,7 +121,7 @@
|
||||||
"enabled": false,
|
"enabled": false,
|
||||||
"version": "0.0.2",
|
"version": "0.0.2",
|
||||||
"settings": {
|
"settings": {
|
||||||
"statistics_reset_interval": 24
|
"statistics_reset_cron": "0 0 * * *"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -96,7 +96,7 @@ class SafeEyesCore:
|
||||||
self.scheduled_next_break_timestamp = int(next_break_time)
|
self.scheduled_next_break_timestamp = int(next_break_time)
|
||||||
utility.start_thread(self.__scheduler_job)
|
utility.start_thread(self.__scheduler_job)
|
||||||
|
|
||||||
def stop(self):
|
def stop(self, is_resting=False):
|
||||||
"""
|
"""
|
||||||
Stop Safe Eyes if it is running.
|
Stop Safe Eyes if it is running.
|
||||||
"""
|
"""
|
||||||
|
@ -110,7 +110,7 @@ class SafeEyesCore:
|
||||||
self.waiting_condition.acquire()
|
self.waiting_condition.acquire()
|
||||||
self.running = False
|
self.running = False
|
||||||
if self.context['state'] != State.QUIT:
|
if self.context['state'] != State.QUIT:
|
||||||
self.context['state'] = State.STOPPED
|
self.context['state'] = State.RESTING if (is_resting) else State.STOPPED
|
||||||
self.waiting_condition.notify_all()
|
self.waiting_condition.notify_all()
|
||||||
self.waiting_condition.release()
|
self.waiting_condition.release()
|
||||||
|
|
||||||
|
@ -131,7 +131,17 @@ class SafeEyesCore:
|
||||||
logging.debug("Postpone the break for %d seconds", self.postpone_duration)
|
logging.debug("Postpone the break for %d seconds", self.postpone_duration)
|
||||||
self.context['postponed'] = True
|
self.context['postponed'] = True
|
||||||
|
|
||||||
def take_break(self):
|
def get_break_time(self, break_type = None):
|
||||||
|
"""
|
||||||
|
Returns the next break time
|
||||||
|
"""
|
||||||
|
break_obj = self.break_queue.get_break(break_type)
|
||||||
|
if not break_obj:
|
||||||
|
return False
|
||||||
|
time = self.scheduled_next_break_time + datetime.timedelta(minutes=break_obj.time - self.break_queue.get_break().time)
|
||||||
|
return time
|
||||||
|
|
||||||
|
def take_break(self, break_type = None):
|
||||||
"""
|
"""
|
||||||
Calling this method stops the scheduler and show the next break screen
|
Calling this method stops the scheduler and show the next break screen
|
||||||
"""
|
"""
|
||||||
|
@ -139,15 +149,15 @@ class SafeEyesCore:
|
||||||
return
|
return
|
||||||
if not self.context['state'] == State.WAITING:
|
if not self.context['state'] == State.WAITING:
|
||||||
return
|
return
|
||||||
utility.start_thread(self.__take_break)
|
utility.start_thread(self.__take_break, break_type=break_type)
|
||||||
|
|
||||||
def has_breaks(self):
|
def has_breaks(self, break_type = None):
|
||||||
"""
|
"""
|
||||||
Check whether Safe Eyes has breaks or not.
|
Check whether Safe Eyes has breaks or not. Use the break_type to check for either short or long break.
|
||||||
"""
|
"""
|
||||||
return not self.break_queue.is_empty()
|
return not self.break_queue.is_empty(break_type)
|
||||||
|
|
||||||
def __take_break(self):
|
def __take_break(self, break_type = None):
|
||||||
"""
|
"""
|
||||||
Show the next break screen
|
Show the next break screen
|
||||||
"""
|
"""
|
||||||
|
@ -164,9 +174,11 @@ class SafeEyesCore:
|
||||||
self.running = False
|
self.running = False
|
||||||
self.waiting_condition.notify_all()
|
self.waiting_condition.notify_all()
|
||||||
self.waiting_condition.release()
|
self.waiting_condition.release()
|
||||||
time.sleep(1) # Wait for 1 sec to ensure the sceduler is dead
|
time.sleep(1) # Wait for 1 sec to ensure the scheduler is dead
|
||||||
self.running = True
|
self.running = True
|
||||||
|
|
||||||
|
if break_type is not None and self.break_queue.get_break().type != break_type:
|
||||||
|
self.break_queue.next(break_type)
|
||||||
utility.execute_main_thread(self.__fire_start_break)
|
utility.execute_main_thread(self.__fire_start_break)
|
||||||
|
|
||||||
def __scheduler_job(self):
|
def __scheduler_job(self):
|
||||||
|
@ -176,32 +188,33 @@ class SafeEyesCore:
|
||||||
if not self.running:
|
if not self.running:
|
||||||
return
|
return
|
||||||
|
|
||||||
self.context['state'] = State.WAITING
|
|
||||||
# Convert to seconds
|
|
||||||
time_to_wait = self.break_queue.get_break().time * 60
|
|
||||||
current_time = datetime.datetime.now()
|
current_time = datetime.datetime.now()
|
||||||
current_timestamp = current_time.timestamp()
|
current_timestamp = current_time.timestamp()
|
||||||
|
|
||||||
|
if self.context['state'] == State.RESTING and self.paused_time > -1:
|
||||||
|
# Safe Eyes was resting
|
||||||
|
paused_duration = int(current_timestamp - self.paused_time)
|
||||||
|
self.paused_time = -1
|
||||||
|
if paused_duration > self.break_queue.get_break(BreakType.LONG_BREAK).duration:
|
||||||
|
logging.info('Skip next long break due to the pause %ds longer than break duration', paused_duration)
|
||||||
|
# Skip the next long break
|
||||||
|
self.break_queue.reset()
|
||||||
|
|
||||||
if self.context['postponed']:
|
if self.context['postponed']:
|
||||||
# Previous break was postponed
|
# Previous break was postponed
|
||||||
logging.info('Prepare for postponed break')
|
logging.info('Prepare for postponed break')
|
||||||
time_to_wait = self.postpone_duration
|
time_to_wait = self.postpone_duration
|
||||||
self.context['postponed'] = False
|
self.context['postponed'] = False
|
||||||
|
elif current_timestamp < self.scheduled_next_break_timestamp:
|
||||||
elif self.paused_time > -1 and self.break_queue.is_long_break():
|
# Non-standard break was set.
|
||||||
# Safe Eyes was paused earlier and next break is long
|
|
||||||
paused_duration = int(current_timestamp - self.paused_time)
|
|
||||||
self.paused_time = -1
|
|
||||||
if paused_duration > self.break_queue.get_break().duration:
|
|
||||||
logging.info('Skip next long break due to the pause longer than break duration')
|
|
||||||
# Skip the next long break
|
|
||||||
self.break_queue.next()
|
|
||||||
|
|
||||||
if current_timestamp < self.scheduled_next_break_timestamp:
|
|
||||||
time_to_wait = round(self.scheduled_next_break_timestamp - current_timestamp)
|
time_to_wait = round(self.scheduled_next_break_timestamp - current_timestamp)
|
||||||
self.scheduled_next_break_timestamp = -1
|
self.scheduled_next_break_timestamp = -1
|
||||||
|
else:
|
||||||
|
# Use next break, convert to seconds
|
||||||
|
time_to_wait = self.break_queue.get_break().time * 60
|
||||||
|
|
||||||
self.scheduled_next_break_time = current_time + datetime.timedelta(seconds=time_to_wait)
|
self.scheduled_next_break_time = current_time + datetime.timedelta(seconds=time_to_wait)
|
||||||
|
self.context['state'] = State.WAITING
|
||||||
utility.execute_main_thread(self.__fire_on_update_next_break, self.scheduled_next_break_time)
|
utility.execute_main_thread(self.__fire_on_update_next_break, self.scheduled_next_break_time)
|
||||||
|
|
||||||
# Wait for the pre break warning period
|
# Wait for the pre break warning period
|
||||||
|
@ -244,8 +257,9 @@ class SafeEyesCore:
|
||||||
utility.execute_main_thread(self.__fire_start_break)
|
utility.execute_main_thread(self.__fire_start_break)
|
||||||
|
|
||||||
def __fire_start_break(self):
|
def __fire_start_break(self):
|
||||||
|
break_obj = self.break_queue.get_break()
|
||||||
# Show the break screen
|
# Show the break screen
|
||||||
if not self.on_start_break.fire(self.break_queue.get_break()):
|
if not self.on_start_break.fire(break_obj):
|
||||||
# Plugins want to ignore this break
|
# Plugins want to ignore this break
|
||||||
self.__start_next_break()
|
self.__start_next_break()
|
||||||
return
|
return
|
||||||
|
@ -258,7 +272,7 @@ class SafeEyesCore:
|
||||||
# Wait in user thread
|
# Wait in user thread
|
||||||
utility.start_thread(self.__postpone_break)
|
utility.start_thread(self.__postpone_break)
|
||||||
else:
|
else:
|
||||||
self.start_break.fire(self.break_queue.get_break())
|
self.start_break.fire(break_obj)
|
||||||
utility.start_thread(self.__start_break)
|
utility.start_thread(self.__start_break)
|
||||||
|
|
||||||
def __start_break(self):
|
def __start_break(self):
|
||||||
|
|
|
@ -33,7 +33,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.</property>
|
along with this program. If not, see <https://www.gnu.org/licenses/>.</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GtkWindow" id="window_about">
|
<object class="GtkWindow" id="window_about">
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
|
@ -71,7 +71,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.</pro
|
||||||
<property name="valign">center</property>
|
<property name="valign">center</property>
|
||||||
<property name="margin_top">10</property>
|
<property name="margin_top">10</property>
|
||||||
<property name="margin_bottom">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>
|
<property name="justify">center</property>
|
||||||
<attributes>
|
<attributes>
|
||||||
<attribute name="style" value="normal"/>
|
<attribute name="style" value="normal"/>
|
||||||
|
@ -135,14 +135,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.</pro
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLinkButton" id="btn_url">
|
<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="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="focus_on_click">False</property>
|
<property name="focus_on_click">False</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
<property name="halign">center</property>
|
<property name="halign">center</property>
|
||||||
<property name="relief">none</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>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
|
|
@ -84,7 +84,6 @@ class BreakQueue:
|
||||||
self.__current_break = None
|
self.__current_break = None
|
||||||
self.__current_long = 0
|
self.__current_long = 0
|
||||||
self.__current_short = 0
|
self.__current_short = 0
|
||||||
self.__shorts_taken = 0
|
|
||||||
self.__short_break_time = config.get('short_break_interval')
|
self.__short_break_time = config.get('short_break_interval')
|
||||||
self.__long_break_time = config.get('long_break_interval')
|
self.__long_break_time = config.get('long_break_interval')
|
||||||
self.__is_random_order = config.get('random_order')
|
self.__is_random_order = config.get('random_order')
|
||||||
|
@ -113,19 +112,43 @@ class BreakQueue:
|
||||||
while brk != current_break and brk.name != last_break:
|
while brk != current_break and brk.name != last_break:
|
||||||
brk = self.next()
|
brk = self.next()
|
||||||
|
|
||||||
def get_break(self):
|
def get_break(self, break_type = None):
|
||||||
if self.__current_break is None:
|
if self.__current_break is None:
|
||||||
self.__current_break = self.next()
|
self.__current_break = self.next()
|
||||||
return self.__current_break
|
|
||||||
|
if break_type is None or self.__current_break.type == break_type:
|
||||||
|
return self.__current_break
|
||||||
|
|
||||||
|
if break_type == BreakType.LONG_BREAK:
|
||||||
|
if self.__long_queue is None:
|
||||||
|
return None;
|
||||||
|
return self.__long_queue[self.__current_long]
|
||||||
|
|
||||||
|
if self.__short_queue is None:
|
||||||
|
return None;
|
||||||
|
return self.__short_queue[self.__current_short]
|
||||||
|
|
||||||
def is_long_break(self):
|
def is_long_break(self):
|
||||||
return self.__current_break is not None and self.__current_break.type == BreakType.LONG_BREAK
|
return self.__current_break is not None and self.__current_break.type == BreakType.LONG_BREAK
|
||||||
|
|
||||||
def next(self):
|
def next(self, break_type = None):
|
||||||
break_obj = None
|
break_obj = None
|
||||||
shorts = self.__short_queue
|
shorts = self.__short_queue
|
||||||
longs = self.__long_queue
|
longs = self.__long_queue
|
||||||
|
|
||||||
|
# Reset break that has just ended
|
||||||
|
if self.is_long_break():
|
||||||
|
self.__current_break.time = self.__long_break_time
|
||||||
|
if self.__current_long == 0 and self.__is_random_order:
|
||||||
|
# Shuffle queue
|
||||||
|
self.__build_longs()
|
||||||
|
elif self.__current_break:
|
||||||
|
# Reduce the break time from the next long break (default)
|
||||||
|
if longs:
|
||||||
|
longs[self.__current_long].time -= shorts[self.__current_short].time
|
||||||
|
if self.__current_short == 0 and self.__is_random_order:
|
||||||
|
self.__build_shorts()
|
||||||
|
|
||||||
if self.is_empty():
|
if self.is_empty():
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -133,27 +156,11 @@ class BreakQueue:
|
||||||
break_obj = self.__next_long()
|
break_obj = self.__next_long()
|
||||||
elif longs is None:
|
elif longs is None:
|
||||||
break_obj = self.__next_short()
|
break_obj = self.__next_short()
|
||||||
elif longs[self.__current_long].time <= shorts[self.__current_short].time:
|
elif break_type == BreakType.LONG_BREAK or longs[self.__current_long].time <= shorts[self.__current_short].time:
|
||||||
break_obj = self.__next_long()
|
break_obj = self.__next_long()
|
||||||
else:
|
else:
|
||||||
break_obj = self.__next_short()
|
break_obj = self.__next_short()
|
||||||
|
|
||||||
# Shorts and longs exist -> set cycle on every long
|
|
||||||
if break_obj.type == BreakType.LONG_BREAK:
|
|
||||||
self.context['new_cycle'] = True
|
|
||||||
self.__shorts_taken = 0
|
|
||||||
# Only shorts exist -> set cycle when enough short breaks pass
|
|
||||||
elif self.__shorts_taken == self.__cycle_len:
|
|
||||||
self.context['new_cycle'] = True
|
|
||||||
self.__shorts_taken = 0
|
|
||||||
else:
|
|
||||||
self.context['new_cycle'] = False
|
|
||||||
|
|
||||||
if self.__current_break is not None:
|
|
||||||
# Reset the time of long breaks
|
|
||||||
if self.__current_break.type == BreakType.LONG_BREAK:
|
|
||||||
self.__current_break.time = self.__long_break_time
|
|
||||||
|
|
||||||
self.__current_break = break_obj
|
self.__current_break = break_obj
|
||||||
self.context['session']['break'] = self.__current_break.name
|
self.context['session']['break'] = self.__current_break.name
|
||||||
|
|
||||||
|
@ -162,30 +169,30 @@ class BreakQueue:
|
||||||
def reset(self):
|
def reset(self):
|
||||||
for break_object in self.__short_queue:
|
for break_object in self.__short_queue:
|
||||||
break_object.time = self.__short_break_time
|
break_object.time = self.__short_break_time
|
||||||
|
|
||||||
for break_object in self.__long_queue:
|
for break_object in self.__long_queue:
|
||||||
break_object.time = self.__long_break_time
|
break_object.time = self.__long_break_time
|
||||||
|
|
||||||
def is_empty(self):
|
def is_empty(self, break_type = None):
|
||||||
return self.__short_queue is None and self.__long_queue is None
|
"""
|
||||||
|
Check if the given break type is empty or not. If the break_type is None, check for both short and long breaks.
|
||||||
|
"""
|
||||||
|
if break_type == BreakType.SHORT_BREAK:
|
||||||
|
return self.__short_queue is None
|
||||||
|
elif break_type == BreakType.LONG_BREAK:
|
||||||
|
return self.__long_queue is None
|
||||||
|
else:
|
||||||
|
return self.__short_queue is None and self.__long_queue is None
|
||||||
|
|
||||||
def __next_short(self):
|
def __next_short(self):
|
||||||
longs = self.__long_queue
|
longs = self.__long_queue
|
||||||
shorts = self.__short_queue
|
shorts = self.__short_queue
|
||||||
break_obj = shorts[self.__current_short]
|
break_obj = shorts[self.__current_short]
|
||||||
self.context['break_type'] = 'short'
|
self.context['break_type'] = 'short'
|
||||||
# Reduce the break time from the next long break (default)
|
|
||||||
if longs:
|
|
||||||
longs[self.__current_long].time -= shorts[self.__current_short].time
|
|
||||||
|
|
||||||
# Update the index to next
|
# Update the index to next
|
||||||
self.__current_short = (self.__current_short + 1) % len(shorts)
|
self.__current_short = (self.__current_short + 1) % len(shorts)
|
||||||
|
|
||||||
# Shuffle queue
|
|
||||||
if self.__current_short == 0 and self.__is_random_order:
|
|
||||||
self.__build_shorts()
|
|
||||||
|
|
||||||
self.__shorts_taken += 1
|
|
||||||
return break_obj
|
return break_obj
|
||||||
|
|
||||||
def __next_long(self):
|
def __next_long(self):
|
||||||
|
@ -196,10 +203,6 @@ class BreakQueue:
|
||||||
# Update the index to next
|
# Update the index to next
|
||||||
self.__current_long = (self.__current_long + 1) % len(longs)
|
self.__current_long = (self.__current_long + 1) % len(longs)
|
||||||
|
|
||||||
# Shuffle queue
|
|
||||||
if self.__current_long == 0 and self.__is_random_order:
|
|
||||||
self.__build_longs()
|
|
||||||
|
|
||||||
return break_obj
|
return break_obj
|
||||||
|
|
||||||
def __build_queue(self, break_type, break_configs, break_time, break_duration):
|
def __build_queue(self, break_type, break_configs, break_time, break_duration):
|
||||||
|
@ -255,12 +258,13 @@ class State(Enum):
|
||||||
"""
|
"""
|
||||||
Possible states of Safe Eyes.
|
Possible states of Safe Eyes.
|
||||||
"""
|
"""
|
||||||
START = 0,
|
START = 0, # Starting scheduler
|
||||||
WAITING = 1,
|
WAITING = 1, # User is working (waiting for next break)
|
||||||
PRE_BREAK = 2,
|
PRE_BREAK = 2, # Preparing for break
|
||||||
BREAK = 3,
|
BREAK = 3, # Break
|
||||||
STOPPED = 4,
|
STOPPED = 4, # Disabled
|
||||||
QUIT = 5
|
QUIT = 5, # Quitting
|
||||||
|
RESTING = 6 # Resting (natural break)
|
||||||
|
|
||||||
|
|
||||||
class EventHook:
|
class EventHook:
|
||||||
|
@ -304,6 +308,8 @@ class Config:
|
||||||
# self.__force_upgrade = ['long_breaks', 'short_breaks']
|
# self.__force_upgrade = ['long_breaks', 'short_breaks']
|
||||||
|
|
||||||
if init:
|
if init:
|
||||||
|
# if create_startup_entry finds a broken autostart symlink, it will repair it
|
||||||
|
utility.create_startup_entry(force=False)
|
||||||
if self.__user_config is None:
|
if self.__user_config is None:
|
||||||
utility.initialize_safeeyes()
|
utility.initialize_safeeyes()
|
||||||
self.__user_config = self.__system_config
|
self.__user_config = self.__system_config
|
||||||
|
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 649 B After Width: | Height: | Size: 649 B |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 640 B After Width: | Height: | Size: 640 B |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 902 B After Width: | Height: | Size: 902 B |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 894 B After Width: | Height: | Size: 894 B |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
2
safeeyes/platform/safeeyes.desktop → safeeyes/platform/io.github.slgobinath.SafeEyes.desktop
Executable file → Normal file
|
@ -25,7 +25,7 @@ Comment[tr]=Gözünüzü yorgunluğa karşı koruyun
|
||||||
Comment[uk]=Захистіть свої очі від втоми
|
Comment[uk]=Захистіть свої очі від втоми
|
||||||
Comment[vi]=Bảo vệ đôi mắt của bạn khỏi sự mệt mỏi
|
Comment[vi]=Bảo vệ đôi mắt của bạn khỏi sự mệt mỏi
|
||||||
Exec=env GDK_BACKEND=x11 safeeyes
|
Exec=env GDK_BACKEND=x11 safeeyes
|
||||||
Icon=safeeyes
|
Icon=io.github.slgobinath.SafeEyes
|
||||||
Terminal=false
|
Terminal=false
|
||||||
Type=Application
|
Type=Application
|
||||||
Categories=Utility;
|
Categories=Utility;
|
|
@ -0,0 +1,55 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<component type="desktop-application">
|
||||||
|
<id>io.github.slgobinath.SafeEyes</id>
|
||||||
|
|
||||||
|
<name>Safe Eyes</name>
|
||||||
|
<developer_name>Gobinath</developer_name>
|
||||||
|
<summary>A Free and Open Source tool for Linux users to reduce and prevent repetitive strain
|
||||||
|
injury (RSI).</summary>
|
||||||
|
|
||||||
|
<metadata_license>CC0-1.0</metadata_license>
|
||||||
|
<project_license>GPL-3.0</project_license>
|
||||||
|
|
||||||
|
<categories>
|
||||||
|
<category>Utility</category>
|
||||||
|
<category>Accessibility</category>
|
||||||
|
</categories>
|
||||||
|
|
||||||
|
<description>
|
||||||
|
<p>
|
||||||
|
Protect your eyes from eye strain using this simple and beautiful, yet extensible break
|
||||||
|
reminder
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Features:
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Remind you to take breaks with exercises to reduce RSI, Disable keyboard during breaks,
|
||||||
|
Notification before and after breaks, Smart pause if system is idle, Multi-screen
|
||||||
|
support, Customizable user interface, RPC API to control externally, Command-line
|
||||||
|
arguments to control the running instance, Customizable using plug-ins
|
||||||
|
</p>
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<launchable type="desktop-id">io.github.slgobinath.SafeEyes.desktop</launchable>
|
||||||
|
<screenshots>
|
||||||
|
<screenshot type="default">
|
||||||
|
<image>https://slgobinath.github.io/SafeEyes/assets/screenshots/safeeyes_1.png</image>
|
||||||
|
</screenshot>
|
||||||
|
<screenshot>
|
||||||
|
<image>https://slgobinath.github.io/SafeEyes/assets/screenshots/safeeyes_3.png</image>
|
||||||
|
</screenshot>
|
||||||
|
<screenshot>
|
||||||
|
<image>https://slgobinath.github.io/SafeEyes/assets/screenshots/safeeyes_6.png</image>
|
||||||
|
</screenshot>
|
||||||
|
</screenshots>
|
||||||
|
|
||||||
|
<url type="homepage">https://slgobinath.github.io/SafeEyes/</url>
|
||||||
|
|
||||||
|
<releases>
|
||||||
|
<release version="2.1.6" date="2023-06-04" />
|
||||||
|
</releases>
|
||||||
|
|
||||||
|
<content_rating type="oars-1.1" />
|
||||||
|
|
||||||
|
</component>
|
|
@ -27,18 +27,28 @@ A plugin must have the following directory structure:
|
||||||
The plugin.py can have following methods but all are optional:
|
The plugin.py can have following methods but all are optional:
|
||||||
- description()
|
- description()
|
||||||
If a custom description has to be displayed, use this function
|
If a custom description has to be displayed, use this function
|
||||||
- on_init(context, safeeyes_config, plugin_config)
|
- init(context, safeeyes_config, plugin_config)
|
||||||
Initialize the plugin. Will be called after loading and after every changes in configuration
|
Initialize the plugin. Will be called after loading and after every changes in configuration
|
||||||
- on_start()
|
- on_start()
|
||||||
Executes when Safe Eyes is enabled
|
Executes when Safe Eyes is enabled
|
||||||
- on_stop()
|
- on_stop()
|
||||||
Executes when Safe Eyes is disabled
|
Executes when Safe Eyes is disabled
|
||||||
|
- on_exit()
|
||||||
|
Executes before Safe Eyes exits
|
||||||
|
- on_pre_break(break_obj)
|
||||||
|
Executes at the start of the prepare time for a break
|
||||||
|
- on_start_break(break_obj)
|
||||||
|
Executes when a break starts
|
||||||
|
- on_stop_break()
|
||||||
|
Executes when a break stops
|
||||||
|
- on_countdown(countdown, seconds)
|
||||||
|
Executes every second throughout a break
|
||||||
|
- update_next_break(break_obj, break_time)
|
||||||
|
Executes when the next break changes
|
||||||
- enable()
|
- enable()
|
||||||
Executes once the plugin.py is loaded as a module
|
Executes once the plugin.py is loaded as a module
|
||||||
- disable()
|
- disable()
|
||||||
Executes if the plugin is disabled at the runtime by the user
|
Executes if the plugin is disabled at the runtime by the user
|
||||||
- on_exit()
|
|
||||||
Executes before Safe Eyes exits
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import importlib
|
import importlib
|
||||||
|
@ -84,8 +94,12 @@ class PluginManager:
|
||||||
for plugin in config.get('plugins'):
|
for plugin in config.get('plugins'):
|
||||||
try:
|
try:
|
||||||
self.__load_plugin(plugin)
|
self.__load_plugin(plugin)
|
||||||
except BaseException:
|
except BaseException as e:
|
||||||
logging.error('Error in loading the plugin: %s', plugin['id'])
|
traceback_wanted = logging.getLogger().getEffectiveLevel() == logging.DEBUG
|
||||||
|
if traceback_wanted:
|
||||||
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
|
logging.error('Error in loading the plugin %s: %s', plugin['id'], e)
|
||||||
continue
|
continue
|
||||||
# Initialize the plugins
|
# Initialize the plugins
|
||||||
for plugin in self.__plugins_on_init:
|
for plugin in self.__plugins_on_init:
|
||||||
|
|
|
@ -80,16 +80,15 @@ def is_active_window_skipped_xorg(pre_break):
|
||||||
# Extract the process name
|
# Extract the process name
|
||||||
process_names = re.findall('"(.+?)"', stdout)
|
process_names = re.findall('"(.+?)"', stdout)
|
||||||
if process_names:
|
if process_names:
|
||||||
process = process_names[1].lower()
|
process_name = process_names[1].lower()
|
||||||
if process in skip_break_window_classes:
|
if _window_class_matches(process_name, skip_break_window_classes):
|
||||||
return True
|
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:
|
if is_fullscreen and unfullscreen_allowed and not pre_break:
|
||||||
try:
|
try:
|
||||||
active_window.unfullscreen()
|
active_window.unfullscreen()
|
||||||
except BaseException:
|
except BaseException as e:
|
||||||
logging.error(
|
logging.error('Error in unfullscreen the window ' + process_name, exc_info=e)
|
||||||
'Error in unfullscreen the window ' + process)
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
return is_fullscreen
|
return is_fullscreen
|
||||||
|
@ -97,6 +96,10 @@ def is_active_window_skipped_xorg(pre_break):
|
||||||
return False
|
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():
|
def is_on_battery():
|
||||||
"""
|
"""
|
||||||
Check if the computer is running on battery.
|
Check if the computer is running on battery.
|
||||||
|
@ -131,12 +134,16 @@ def init(ctx, safeeyes_config, plugin_config):
|
||||||
global dnd_while_on_battery
|
global dnd_while_on_battery
|
||||||
logging.debug('Initialize Skip Fullscreen plugin')
|
logging.debug('Initialize Skip Fullscreen plugin')
|
||||||
context = ctx
|
context = ctx
|
||||||
skip_break_window_classes = plugin_config['skip_break_windows'].split()
|
skip_break_window_classes = _normalize_window_classes(plugin_config['skip_break_windows'])
|
||||||
take_break_window_classes = plugin_config['take_break_windows'].split()
|
take_break_window_classes = _normalize_window_classes(plugin_config['take_break_windows'])
|
||||||
unfullscreen_allowed = plugin_config['unfullscreen']
|
unfullscreen_allowed = plugin_config['unfullscreen']
|
||||||
dnd_while_on_battery = plugin_config['while_on_battery']
|
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):
|
def on_pre_break(break_obj):
|
||||||
"""
|
"""
|
||||||
Lifecycle method executes before the pre-break period.
|
Lifecycle method executes before the pre-break period.
|
||||||
|
|
|
@ -19,22 +19,6 @@
|
||||||
import datetime
|
import datetime
|
||||||
from safeeyes import utility
|
from safeeyes import utility
|
||||||
|
|
||||||
def _get_next_reset_time(current_time, statistics_reset_cron):
|
|
||||||
import croniter
|
|
||||||
try:
|
|
||||||
cron = croniter.croniter(statistics_reset_cron, current_time)
|
|
||||||
return cron.get_next(datetime.datetime)
|
|
||||||
except:
|
|
||||||
# Error in getting the next reset time
|
|
||||||
return None
|
|
||||||
|
|
||||||
def validate(plugin_config, plugin_settings):
|
def validate(plugin_config, plugin_settings):
|
||||||
if not utility.module_exist("croniter"):
|
if not utility.module_exist("croniter"):
|
||||||
return _("Please install the Python module '%s'") % "croniter"
|
return _("Please install the Python module '%s'") % "croniter"
|
||||||
|
|
||||||
# Validate the cron expression
|
|
||||||
statistics_reset_cron = plugin_settings.get('statistics_reset_cron', '0 0 * * *')
|
|
||||||
if _get_next_reset_time(datetime.datetime.now(), statistics_reset_cron) is None:
|
|
||||||
return _("Invalid cron expression '%s'") % statistics_reset_cron
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
|
@ -25,199 +25,156 @@ import datetime
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
context = None
|
context = None
|
||||||
no_of_skipped_breaks = 0
|
|
||||||
no_of_breaks = 0
|
|
||||||
no_of_cycles = -1
|
|
||||||
session = None
|
session = None
|
||||||
safe_eyes_start_time = datetime.datetime.now()
|
statistics_reset_cron = None
|
||||||
total_idle_time = 0
|
default_statistics_reset_cron = '0 0 * * *' # Every midnight
|
||||||
last_screen_time = -1
|
|
||||||
statistics_reset_cron = '0 0 * * *' # Every midnight
|
|
||||||
time_to_reset_break = datetime.datetime.now()
|
|
||||||
next_reset_time = None
|
next_reset_time = None
|
||||||
enabled = True
|
start_time = None
|
||||||
|
|
||||||
def init(ctx, safeeyes_config, plugin_config):
|
def init(ctx, safeeyes_config, plugin_config):
|
||||||
"""
|
"""
|
||||||
Initialize the plugin.
|
Initialize the plugin.
|
||||||
"""
|
"""
|
||||||
global enabled
|
|
||||||
global context
|
global context
|
||||||
global session
|
global session
|
||||||
global no_of_skipped_breaks
|
|
||||||
global no_of_breaks
|
|
||||||
global no_of_cycles
|
|
||||||
global statistics_reset_cron
|
global statistics_reset_cron
|
||||||
global safe_eyes_start_time
|
|
||||||
global total_idle_time
|
|
||||||
global last_screen_time
|
|
||||||
global next_reset_time
|
|
||||||
|
|
||||||
logging.debug('Initialize Health Stats plugin')
|
logging.debug('Initialize Health Stats plugin')
|
||||||
context = ctx
|
context = ctx
|
||||||
statistics_reset_cron = plugin_config.get('statistics_reset_cron', '0 0 * * *')
|
statistics_reset_cron = plugin_config.get('statistics_reset_cron', default_statistics_reset_cron)
|
||||||
# Compute the next reset time
|
|
||||||
next_reset_time = _get_next_reset_time(datetime.datetime.now(), statistics_reset_cron)
|
|
||||||
enabled = next_reset_time is not None
|
|
||||||
|
|
||||||
if not enabled:
|
|
||||||
# There is an error in the cron expression
|
|
||||||
logging.error("Error in parsing the cron expression `" + statistics_reset_cron + "`. Health Stats plugin is disabled.")
|
|
||||||
return
|
|
||||||
|
|
||||||
if session is None:
|
if session is None:
|
||||||
# Read the session
|
# Read the session
|
||||||
session = context['session']['plugin'].get('healthstats', None)
|
defaults = {
|
||||||
if session is None:
|
'breaks': 0,
|
||||||
session = {'no_of_skipped_breaks': 0,
|
'skipped_breaks': 0,
|
||||||
'no_of_breaks': 0,
|
'screen_time': 0,
|
||||||
'no_of_cycles': -1,
|
'total_breaks': 0,
|
||||||
'safe_eyes_start_time': safe_eyes_start_time.strftime("%Y-%m-%d %H:%M:%S"),
|
'total_skipped_breaks': 0,
|
||||||
'total_idle_time': 0,
|
'total_screen_time': 0,
|
||||||
'last_screen_time': -1,
|
'total_resets': 0,
|
||||||
'next_reset_time': next_reset_time.strftime("%Y-%m-%d %H:%M:%S")}
|
}
|
||||||
context['session']['plugin']['healthstats'] = session
|
|
||||||
no_of_skipped_breaks = session.get('no_of_skipped_breaks', 0)
|
session = context['session']['plugin'].get('healthstats', {}) | defaults
|
||||||
no_of_breaks = session.get('no_of_breaks', 0)
|
if 'no_of_breaks' in session:
|
||||||
no_of_cycles = session.get('no_of_cycles', -1)
|
# Ignore old format session.
|
||||||
total_idle_time = session.get('total_idle_time', 0)
|
session = defaults
|
||||||
last_screen_time = session.get('last_screen_time', -1)
|
context['session']['plugin']['healthstats'] = session
|
||||||
str_time = session.get('safe_eyes_start_time', None)
|
|
||||||
str_next_reset_time = session.get('next_reset_time', None)
|
_get_next_reset_time()
|
||||||
if str_time:
|
|
||||||
safe_eyes_start_time = datetime.datetime.strptime(str_time, "%Y-%m-%d %H:%M:%S")
|
|
||||||
if str_next_reset_time:
|
|
||||||
next_reset_time = datetime.datetime.strptime(str_time, "%Y-%m-%d %H:%M:%S")
|
|
||||||
|
|
||||||
_reset_stats()
|
|
||||||
|
|
||||||
|
|
||||||
def on_stop_break():
|
def on_stop_break():
|
||||||
"""
|
# Check if break was skipped.
|
||||||
After the break, check if it is skipped.
|
global session
|
||||||
"""
|
|
||||||
# Check if the plugin is enabled
|
|
||||||
if not enabled:
|
|
||||||
return
|
|
||||||
|
|
||||||
global no_of_skipped_breaks
|
|
||||||
if context['skipped']:
|
if context['skipped']:
|
||||||
no_of_skipped_breaks += 1
|
session['skipped_breaks'] += 1
|
||||||
session['no_of_skipped_breaks'] = no_of_skipped_breaks
|
|
||||||
|
# Screen time is starting again.
|
||||||
|
on_start()
|
||||||
|
|
||||||
|
|
||||||
|
def on_start_break(break_obj):
|
||||||
|
global session
|
||||||
|
session['breaks'] += 1
|
||||||
|
|
||||||
|
# Screen time has stoped.
|
||||||
|
on_stop()
|
||||||
|
|
||||||
|
|
||||||
|
def on_stop():
|
||||||
|
global start_time
|
||||||
|
_reset_stats()
|
||||||
|
if start_time:
|
||||||
|
screen_time = datetime.datetime.now() - start_time
|
||||||
|
session['screen_time'] += round(screen_time.total_seconds())
|
||||||
|
start_time = None
|
||||||
|
|
||||||
|
|
||||||
def get_widget_title(break_obj):
|
def get_widget_title(break_obj):
|
||||||
"""
|
"""
|
||||||
Return the widget title.
|
Return the widget title.
|
||||||
"""
|
"""
|
||||||
# Check if the plugin is enabled
|
|
||||||
if not enabled:
|
|
||||||
return ""
|
|
||||||
|
|
||||||
global no_of_breaks
|
|
||||||
global no_of_cycles
|
|
||||||
no_of_breaks += 1
|
|
||||||
if context['new_cycle']:
|
|
||||||
no_of_cycles += 1
|
|
||||||
session['no_of_breaks'] = no_of_breaks
|
|
||||||
session['no_of_cycles'] = no_of_cycles
|
|
||||||
session['safe_eyes_start_time'] = safe_eyes_start_time.strftime("%Y-%m-%d %H:%M:%S")
|
|
||||||
session['total_idle_time'] = total_idle_time
|
|
||||||
session['last_screen_time'] = last_screen_time
|
|
||||||
return _('Health Statistics')
|
return _('Health Statistics')
|
||||||
|
|
||||||
|
|
||||||
def _reset_stats():
|
def _reset_stats():
|
||||||
global no_of_breaks
|
global session
|
||||||
global no_of_cycles
|
|
||||||
global safe_eyes_start_time
|
|
||||||
global total_idle_time
|
|
||||||
global no_of_skipped_breaks
|
|
||||||
global last_screen_time
|
|
||||||
global next_reset_time
|
|
||||||
|
|
||||||
# Check if the reset time has passed
|
# Check if the reset time has passed
|
||||||
current_time = datetime.datetime.now()
|
if next_reset_time and datetime.datetime.now() >= next_reset_time:
|
||||||
total_duration_sec = (current_time - safe_eyes_start_time).total_seconds()
|
logging.info("Resetting the health statistics")
|
||||||
if current_time >= next_reset_time:
|
|
||||||
logging.debug("Resetting the health statistics")
|
|
||||||
# Reset statistics
|
|
||||||
if safe_eyes_start_time < next_reset_time:
|
|
||||||
# Safe Eyes is running even before the reset time
|
|
||||||
# Consider the reset time as the new start time
|
|
||||||
safe_eyes_start_time = next_reset_time
|
|
||||||
total_duration_sec = (current_time - safe_eyes_start_time).total_seconds()
|
|
||||||
|
|
||||||
# Update the next_reset_time
|
# Update the next_reset_time
|
||||||
next_reset_time = _get_next_reset_time(current_time, statistics_reset_cron)
|
_get_next_reset_time()
|
||||||
|
|
||||||
last_screen_time = round((total_duration_sec - total_idle_time) / 60)
|
# Reset statistics
|
||||||
total_idle_time = 0
|
session['total_breaks'] += session['breaks']
|
||||||
no_of_breaks = 0
|
session['total_skipped_breaks'] += session['skipped_breaks']
|
||||||
no_of_cycles = 0
|
session['total_screen_time'] += session['screen_time']
|
||||||
no_of_skipped_breaks = 0
|
session['total_resets'] += 1
|
||||||
session['no_of_breaks'] = 0
|
session['breaks'] = 0
|
||||||
session['no_of_cycles'] = 0
|
session['skipped_breaks'] = 0
|
||||||
session['no_of_skipped_breaks'] = 0
|
session['screen_time'] = 0
|
||||||
session['safe_eyes_start_time'] = safe_eyes_start_time.strftime("%Y-%m-%d %H:%M:%S")
|
|
||||||
session['total_idle_time'] = total_idle_time
|
|
||||||
session['last_screen_time'] = last_screen_time
|
|
||||||
session['next_reset_time'] = next_reset_time.strftime("%Y-%m-%d %H:%M:%S")
|
|
||||||
|
|
||||||
return total_duration_sec
|
|
||||||
|
|
||||||
|
|
||||||
def get_widget_content(break_obj):
|
def get_widget_content(break_obj):
|
||||||
"""
|
"""
|
||||||
Return the statistics.
|
Return the statistics.
|
||||||
"""
|
"""
|
||||||
# Check if the plugin is enabled
|
global next_reset_time
|
||||||
if not enabled:
|
resets = session['total_resets']
|
||||||
return ""
|
if session['screen_time'] > 21600 or (session['breaks'] and session['skipped_breaks'] / session['breaks']) >= 0.2:
|
||||||
|
|
||||||
total_duration_sec = _reset_stats()
|
|
||||||
screen_time = round((total_duration_sec - total_idle_time) / 60)
|
|
||||||
hours, minutes = divmod(screen_time, 60)
|
|
||||||
time_format = '{:02d}:{:02d}'.format(hours, minutes)
|
|
||||||
if hours > 6 or round((no_of_skipped_breaks / no_of_breaks), 1) >= 0.2:
|
|
||||||
# Unhealthy behavior -> Red broken heart
|
# Unhealthy behavior -> Red broken heart
|
||||||
heart = '💔️'
|
heart = '💔️'
|
||||||
else:
|
else:
|
||||||
# Healthy behavior -> Green heart
|
# Healthy behavior -> Green heart
|
||||||
heart = '💚'
|
heart = '💚'
|
||||||
if last_screen_time < 0:
|
|
||||||
screen_time_diff = ''
|
content = [
|
||||||
else:
|
heart,
|
||||||
hrs_diff, mins_diff = divmod(abs(screen_time - last_screen_time), 60)
|
f"BREAKS: {session['breaks']}",
|
||||||
symbol = ''
|
f"SKIPPED: {session['skipped_breaks']}",
|
||||||
if screen_time > last_screen_time:
|
f"SCREEN TIME: {_format_interval(session['screen_time'])}",
|
||||||
symbol = '+'
|
]
|
||||||
elif screen_time < last_screen_time:
|
|
||||||
symbol = '-'
|
if resets:
|
||||||
screen_time_diff = ' ( {}{:02d}:{:02d} )'.format(symbol, hrs_diff, mins_diff)
|
content[1] += f" [{round(session['total_breaks'] / resets, 1)}]"
|
||||||
return "{}\tBREAKS: {}\tSKIPPED: {}\tCYCLES: {}\tSCREEN TIME: {}{}".format(heart, no_of_breaks, no_of_skipped_breaks, no_of_cycles, time_format, screen_time_diff)
|
content[2] += f" [{round(session['total_skipped_breaks'] / resets, 1)}]"
|
||||||
|
content[3] += f" [{_format_interval(session['total_screen_time'] / resets)}]"
|
||||||
|
|
||||||
|
content = "\t".join(content)
|
||||||
|
if resets:
|
||||||
|
content += f"\n\t[] = average of {resets} reset(s)"
|
||||||
|
if next_reset_time is None:
|
||||||
|
content += f"\n\tSettings error in statistics reset interval: {statistics_reset_cron}"
|
||||||
|
return content
|
||||||
|
|
||||||
|
|
||||||
def on_start():
|
def on_start():
|
||||||
"""
|
"""
|
||||||
Add the idle period to the total idle time.
|
Track the start time.
|
||||||
"""
|
"""
|
||||||
# Check if the plugin is enabled
|
global start_time
|
||||||
if not enabled:
|
|
||||||
return ""
|
|
||||||
|
|
||||||
_reset_stats()
|
_reset_stats()
|
||||||
global total_idle_time
|
start_time = datetime.datetime.now()
|
||||||
# idle_period is provided by Smart Pause plugin
|
|
||||||
total_idle_time += context.get('idle_period', 0)
|
|
||||||
session['total_idle_time'] = total_idle_time
|
def _get_next_reset_time():
|
||||||
|
global next_reset_time
|
||||||
|
global session
|
||||||
|
|
||||||
def _get_next_reset_time(current_time, statistics_reset_cron):
|
|
||||||
try:
|
try:
|
||||||
cron = croniter.croniter(statistics_reset_cron, current_time)
|
cron = croniter.croniter(statistics_reset_cron, datetime.datetime.now())
|
||||||
next_time = cron.get_next(datetime.datetime)
|
next_reset_time = cron.get_next(datetime.datetime)
|
||||||
logging.debug("Health stats will be reset at " + next_time.strftime("%Y-%m-%d %H:%M:%S"))
|
session['next_reset_time'] = next_reset_time.strftime("%Y-%m-%d %H:%M:%S")
|
||||||
return next_time
|
logging.debug("Health stats will be reset at " + session['next_reset_time'])
|
||||||
except:
|
except:
|
||||||
# Error in getting the next reset time
|
logging.error("Error in statistics reset expression: " + statistics_reset_cron)
|
||||||
return None
|
next_reset_time = None
|
||||||
|
|
||||||
|
|
||||||
|
def _format_interval(seconds):
|
||||||
|
screen_time = round(seconds / 60)
|
||||||
|
hours, minutes = divmod(screen_time, 60)
|
||||||
|
return '{:02d}:{:02d}'.format(hours, minutes)
|
||||||
|
|
|
@ -60,7 +60,7 @@ def on_pre_break(break_obj):
|
||||||
else:
|
else:
|
||||||
message += (_('Ready for a long break in %s seconds') % warning_time)
|
message += (_('Ready for a long break in %s seconds') % warning_time)
|
||||||
|
|
||||||
notification = Notify.Notification.new('Safe Eyes', message, icon='safeeyes_enabled')
|
notification = Notify.Notification.new('Safe Eyes', message, icon='io.github.slgobinath.SafeEyes-enabled')
|
||||||
try:
|
try:
|
||||||
notification.show()
|
notification.show()
|
||||||
except BaseException:
|
except BaseException:
|
||||||
|
|
|
@ -20,12 +20,6 @@
|
||||||
"max": 3600,
|
"max": 3600,
|
||||||
"min": 5
|
"min": 5
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"id": "interpret_idle_as_break",
|
|
||||||
"label": "Interpret idle time equivalent to upcoming break duration as a break",
|
|
||||||
"type": "BOOL",
|
|
||||||
"default": false
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"id": "postpone_if_active",
|
"id": "postpone_if_active",
|
||||||
"label": "Postpone the next break until the system becomes idle",
|
"label": "Postpone the next break until the system becomes idle",
|
||||||
|
|
|
@ -23,6 +23,8 @@ def validate(plugin_config, plugin_settings):
|
||||||
command = None
|
command = None
|
||||||
if utility.DESKTOP_ENVIRONMENT == "gnome" and utility.IS_WAYLAND:
|
if utility.DESKTOP_ENVIRONMENT == "gnome" and utility.IS_WAYLAND:
|
||||||
command = "dbus-send"
|
command = "dbus-send"
|
||||||
|
elif utility.DESKTOP_ENVIRONMENT == "sway":
|
||||||
|
command = "swayidle"
|
||||||
else:
|
else:
|
||||||
command = "xprintidle"
|
command = "xprintidle"
|
||||||
if not utility.command_exist(command):
|
if not utility.command_exist(command):
|
||||||
|
|
|
@ -35,17 +35,58 @@ idle_condition = threading.Condition()
|
||||||
lock = threading.Lock()
|
lock = threading.Lock()
|
||||||
active = False
|
active = False
|
||||||
idle_time = 0
|
idle_time = 0
|
||||||
enable_safe_eyes = None
|
enable_safeeyes = None
|
||||||
disable_safe_eyes = None
|
disable_safeeyes = None
|
||||||
smart_pause_activated = False
|
smart_pause_activated = False
|
||||||
idle_start_time = None
|
idle_start_time = None
|
||||||
next_break_time = None
|
next_break_time = None
|
||||||
next_break_duration = 0
|
next_break_duration = 0
|
||||||
short_break_interval = 0
|
short_break_interval = 0
|
||||||
waiting_time = 2
|
waiting_time = 2
|
||||||
interpret_idle_as_break = False
|
|
||||||
is_wayland_and_gnome = 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():
|
def __gnome_wayland_idle_time():
|
||||||
"""
|
"""
|
||||||
|
@ -76,6 +117,8 @@ def __system_idle_time():
|
||||||
try:
|
try:
|
||||||
if is_wayland_and_gnome:
|
if is_wayland_and_gnome:
|
||||||
return __gnome_wayland_idle_time()
|
return __gnome_wayland_idle_time()
|
||||||
|
elif use_swayidle:
|
||||||
|
return __swayidle_idle_time()
|
||||||
# Convert to seconds
|
# Convert to seconds
|
||||||
return int(subprocess.check_output(['xprintidle']).decode('utf-8')) / 1000
|
return int(subprocess.check_output(['xprintidle']).decode('utf-8')) / 1000
|
||||||
except BaseException:
|
except BaseException:
|
||||||
|
@ -106,29 +149,29 @@ def init(ctx, safeeyes_config, plugin_config):
|
||||||
Initialize the plugin.
|
Initialize the plugin.
|
||||||
"""
|
"""
|
||||||
global context
|
global context
|
||||||
global enable_safe_eyes
|
global enable_safeeyes
|
||||||
global disable_safe_eyes
|
global disable_safeeyes
|
||||||
global postpone
|
global postpone
|
||||||
global idle_time
|
global idle_time
|
||||||
global short_break_interval
|
global short_break_interval
|
||||||
global long_break_duration
|
global long_break_duration
|
||||||
global waiting_time
|
global waiting_time
|
||||||
global interpret_idle_as_break
|
|
||||||
global postpone_if_active
|
global postpone_if_active
|
||||||
global is_wayland_and_gnome
|
global is_wayland_and_gnome
|
||||||
|
global use_swayidle
|
||||||
logging.debug('Initialize Smart Pause plugin')
|
logging.debug('Initialize Smart Pause plugin')
|
||||||
context = ctx
|
context = ctx
|
||||||
enable_safe_eyes = context['api']['enable_safeeyes']
|
enable_safeeyes = context['api']['enable_safeeyes']
|
||||||
disable_safe_eyes = context['api']['disable_safeeyes']
|
disable_safeeyes = context['api']['disable_safeeyes']
|
||||||
postpone = context['api']['postpone']
|
postpone = context['api']['postpone']
|
||||||
idle_time = plugin_config['idle_time']
|
idle_time = plugin_config['idle_time']
|
||||||
interpret_idle_as_break = plugin_config['interpret_idle_as_break']
|
|
||||||
postpone_if_active = plugin_config['postpone_if_active']
|
postpone_if_active = plugin_config['postpone_if_active']
|
||||||
short_break_interval = safeeyes_config.get(
|
short_break_interval = safeeyes_config.get(
|
||||||
'short_break_interval') * 60 # Convert to seconds
|
'short_break_interval') * 60 # Convert to seconds
|
||||||
long_break_duration = safeeyes_config.get('long_break_duration')
|
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
|
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']
|
is_wayland_and_gnome = context['desktop'] == 'gnome' and context['is_wayland']
|
||||||
|
use_swayidle = context['desktop'] == 'sway'
|
||||||
|
|
||||||
|
|
||||||
def __start_idle_monitor():
|
def __start_idle_monitor():
|
||||||
|
@ -151,29 +194,25 @@ def __start_idle_monitor():
|
||||||
smart_pause_activated = True
|
smart_pause_activated = True
|
||||||
idle_start_time = datetime.datetime.now() - datetime.timedelta(seconds=system_idle_time)
|
idle_start_time = datetime.datetime.now() - datetime.timedelta(seconds=system_idle_time)
|
||||||
logging.info('Pause Safe Eyes due to system idle')
|
logging.info('Pause Safe Eyes due to system idle')
|
||||||
disable_safe_eyes(None)
|
disable_safeeyes(None, True)
|
||||||
elif system_idle_time < idle_time and context['state'] == State.STOPPED and idle_start_time is not None:
|
elif system_idle_time < idle_time and context['state'] == State.RESTING and idle_start_time is not None:
|
||||||
logging.info('Resume Safe Eyes due to user activity')
|
logging.info('Resume Safe Eyes due to user activity')
|
||||||
smart_pause_activated = False
|
smart_pause_activated = False
|
||||||
idle_period = (datetime.datetime.now() - idle_start_time)
|
idle_period = (datetime.datetime.now() - idle_start_time)
|
||||||
idle_seconds = idle_period.total_seconds()
|
idle_seconds = idle_period.total_seconds()
|
||||||
context['idle_period'] = idle_seconds
|
context['idle_period'] = idle_seconds
|
||||||
if interpret_idle_as_break and idle_seconds >= next_break_duration:
|
if idle_seconds < short_break_interval:
|
||||||
# User is idle for break duration and wants to consider it as a break
|
|
||||||
logging.debug("Idle for %d seconds, long break %d", idle_seconds, long_break_duration)
|
|
||||||
enable_safe_eyes(-1, idle_seconds >= long_break_duration)
|
|
||||||
elif idle_seconds < short_break_interval:
|
|
||||||
# Credit back the idle time
|
# Credit back the idle time
|
||||||
if next_break_time is not None:
|
if next_break_time is not None:
|
||||||
# This method runs in a thread since the start.
|
# This method runs in a thread since the start.
|
||||||
# It may run before next_break is initialized in the update_next_break method
|
# It may run before next_break is initialized in the update_next_break method
|
||||||
next_break = next_break_time + idle_period
|
next_break = next_break_time + idle_period
|
||||||
enable_safe_eyes(next_break.timestamp())
|
enable_safeeyes(next_break.timestamp())
|
||||||
else:
|
else:
|
||||||
enable_safe_eyes()
|
enable_safeeyes()
|
||||||
else:
|
else:
|
||||||
# User is idle for more than the time between two breaks
|
# User is idle for more than the time between two breaks
|
||||||
enable_safe_eyes()
|
enable_safeeyes()
|
||||||
|
|
||||||
|
|
||||||
def on_start():
|
def on_start():
|
||||||
|
@ -199,6 +238,8 @@ def on_stop():
|
||||||
smart_pause_activated = False
|
smart_pause_activated = False
|
||||||
return
|
return
|
||||||
logging.debug('Stop Smart Pause plugin')
|
logging.debug('Stop Smart Pause plugin')
|
||||||
|
if use_swayidle:
|
||||||
|
__stop_swayidle_monitor()
|
||||||
__set_active(False)
|
__set_active(False)
|
||||||
idle_condition.acquire()
|
idle_condition.acquire()
|
||||||
idle_condition.notify_all()
|
idle_condition.notify_all()
|
||||||
|
|
|
@ -18,6 +18,12 @@
|
||||||
"type": "BOOL",
|
"type": "BOOL",
|
||||||
"default": false
|
"default": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "show_long_time_in_tray",
|
||||||
|
"label": "Show only long breaks for tray icon time",
|
||||||
|
"type": "BOOL",
|
||||||
|
"default": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "allow_disabling",
|
"id": "allow_disabling",
|
||||||
"label": "Allow disabling Safe Eyes",
|
"label": "Allow disabling Safe Eyes",
|
||||||
|
@ -48,4 +54,4 @@
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,10 +17,16 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
|
from safeeyes.model import BreakType
|
||||||
import gi
|
import gi
|
||||||
gi.require_version('Gtk', '3.0')
|
gi.require_version('Gtk', '3.0')
|
||||||
gi.require_version('AppIndicator3', '0.1')
|
try:
|
||||||
from gi.repository import AppIndicator3 as appindicator
|
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
|
from gi.repository import Gtk
|
||||||
import logging
|
import logging
|
||||||
from safeeyes import utility
|
from safeeyes import utility
|
||||||
|
@ -47,10 +53,11 @@ class TrayIcon:
|
||||||
self.on_show_settings = context['api']['show_settings']
|
self.on_show_settings = context['api']['show_settings']
|
||||||
self.on_show_about = context['api']['show_about']
|
self.on_show_about = context['api']['show_about']
|
||||||
self.quit = context['api']['quit']
|
self.quit = context['api']['quit']
|
||||||
self.on_enable = context['api']['enable_safeeyes']
|
self.enable_safeeyes = context['api']['enable_safeeyes']
|
||||||
self.on_disable = context['api']['disable_safeeyes']
|
self.disable_safeeyes = context['api']['disable_safeeyes']
|
||||||
self.take_break = context['api']['take_break']
|
self.take_break = context['api']['take_break']
|
||||||
self.has_breaks = context['api']['has_breaks']
|
self.has_breaks = context['api']['has_breaks']
|
||||||
|
self.get_break_time = context['api']['get_break_time']
|
||||||
self.plugin_config = plugin_config
|
self.plugin_config = plugin_config
|
||||||
self.date_time = None
|
self.date_time = None
|
||||||
self.active = True
|
self.active = True
|
||||||
|
@ -62,7 +69,7 @@ class TrayIcon:
|
||||||
|
|
||||||
# Construct the tray icon
|
# Construct the tray icon
|
||||||
self.indicator = appindicator.Indicator.new(
|
self.indicator = appindicator.Indicator.new(
|
||||||
APPINDICATOR_ID, "safeeyes_enabled", appindicator.IndicatorCategory.APPLICATION_STATUS)
|
APPINDICATOR_ID, "io.github.slgobinath.SafeEyes-enabled", appindicator.IndicatorCategory.APPLICATION_STATUS)
|
||||||
self.indicator.set_status(appindicator.IndicatorStatus.ACTIVE)
|
self.indicator.set_status(appindicator.IndicatorStatus.ACTIVE)
|
||||||
|
|
||||||
# Construct the context menu
|
# Construct the context menu
|
||||||
|
@ -71,7 +78,7 @@ class TrayIcon:
|
||||||
# Next break info menu item
|
# Next break info menu item
|
||||||
self.item_info = Gtk.ImageMenuItem()
|
self.item_info = Gtk.ImageMenuItem()
|
||||||
img_timer = Gtk.Image()
|
img_timer = Gtk.Image()
|
||||||
img_timer.set_from_icon_name("safeeyes_timer", 16)
|
img_timer.set_from_icon_name("io.github.slgobinath.SafeEyes-timer", 16)
|
||||||
self.item_info.set_image(img_timer)
|
self.item_info.set_image(img_timer)
|
||||||
|
|
||||||
self.item_separator = Gtk.SeparatorMenuItem()
|
self.item_separator = Gtk.SeparatorMenuItem()
|
||||||
|
@ -80,10 +87,8 @@ class TrayIcon:
|
||||||
self.item_enable.connect('activate', self.on_enable_clicked)
|
self.item_enable.connect('activate', self.on_enable_clicked)
|
||||||
|
|
||||||
self.item_disable = Gtk.MenuItem()
|
self.item_disable = Gtk.MenuItem()
|
||||||
self.item_disable.connect('activate', self.on_disable_clicked)
|
|
||||||
|
|
||||||
self.sub_menu_disable = Gtk.Menu()
|
self.sub_menu_disable = Gtk.Menu()
|
||||||
self.sub_menu_items = []
|
self.sub_menu_disable_items = []
|
||||||
|
|
||||||
# Read disable options and build the sub menu
|
# Read disable options and build the sub menu
|
||||||
for disable_option in plugin_config['disable_options']:
|
for disable_option in plugin_config['disable_options']:
|
||||||
|
@ -111,7 +116,7 @@ class TrayIcon:
|
||||||
# Create submenu
|
# Create submenu
|
||||||
sub_menu_item = Gtk.MenuItem()
|
sub_menu_item = Gtk.MenuItem()
|
||||||
sub_menu_item.connect('activate', self.on_disable_clicked, time_in_minutes)
|
sub_menu_item.connect('activate', self.on_disable_clicked, time_in_minutes)
|
||||||
self.sub_menu_items.append([sub_menu_item, label, disable_option['time']])
|
self.sub_menu_disable_items.append([sub_menu_item, label, disable_option['time']])
|
||||||
self.sub_menu_disable.append(sub_menu_item)
|
self.sub_menu_disable.append(sub_menu_item)
|
||||||
|
|
||||||
# Disable until restart submenu
|
# Disable until restart submenu
|
||||||
|
@ -122,9 +127,21 @@ class TrayIcon:
|
||||||
# Add the sub menu to the enable/disable menu
|
# Add the sub menu to the enable/disable menu
|
||||||
self.item_disable.set_submenu(self.sub_menu_disable)
|
self.item_disable.set_submenu(self.sub_menu_disable)
|
||||||
|
|
||||||
# Settings menu item
|
# Manual break menu item
|
||||||
self.item_manual_break = Gtk.MenuItem()
|
self.item_manual_break = Gtk.MenuItem()
|
||||||
self.item_manual_break.connect('activate', self.on_manual_break_clicked)
|
|
||||||
|
self.sub_menu_manual_next_break = Gtk.MenuItem()
|
||||||
|
self.sub_menu_manual_next_break.connect('activate', self.on_manual_break_clicked, None)
|
||||||
|
self.sub_menu_manual_next_short_break = Gtk.MenuItem()
|
||||||
|
self.sub_menu_manual_next_short_break.connect('activate', self.on_manual_break_clicked, BreakType.SHORT_BREAK)
|
||||||
|
self.sub_menu_manual_next_long_break = Gtk.MenuItem()
|
||||||
|
self.sub_menu_manual_next_long_break.connect('activate', self.on_manual_break_clicked, BreakType.LONG_BREAK)
|
||||||
|
|
||||||
|
self.sub_menu_manual_break = Gtk.Menu()
|
||||||
|
self.sub_menu_manual_break.append(self.sub_menu_manual_next_break)
|
||||||
|
self.sub_menu_manual_break.append(self.sub_menu_manual_next_short_break)
|
||||||
|
self.sub_menu_manual_break.append(self.sub_menu_manual_next_long_break)
|
||||||
|
self.item_manual_break.set_submenu(self.sub_menu_manual_break)
|
||||||
|
|
||||||
# Settings menu item
|
# Settings menu item
|
||||||
self.item_settings = Gtk.MenuItem()
|
self.item_settings = Gtk.MenuItem()
|
||||||
|
@ -177,7 +194,7 @@ class TrayIcon:
|
||||||
"""
|
"""
|
||||||
Update the text of menu items based on the selected language.
|
Update the text of menu items based on the selected language.
|
||||||
"""
|
"""
|
||||||
for entry in self.sub_menu_items:
|
for entry in self.sub_menu_disable_items:
|
||||||
# print(self.context['locale'].ngettext('For %d Hour', 'For %d Hours', 1) % 1)
|
# print(self.context['locale'].ngettext('For %d Hour', 'For %d Hours', 1) % 1)
|
||||||
entry[0].set_label(self.context['locale'].ngettext(entry[1][0], entry[1][1], entry[2]) % entry[2])
|
entry[0].set_label(self.context['locale'].ngettext(entry[1][0], entry[1][1], entry[2]) % entry[2])
|
||||||
|
|
||||||
|
@ -190,24 +207,27 @@ class TrayIcon:
|
||||||
if self.active:
|
if self.active:
|
||||||
if self.date_time:
|
if self.date_time:
|
||||||
self.__set_next_break_info()
|
self.__set_next_break_info()
|
||||||
self.indicator.set_icon("safeeyes_enabled")
|
self.indicator.set_icon("io.github.slgobinath.SafeEyes-enabled")
|
||||||
else:
|
else:
|
||||||
if self.wakeup_time:
|
if self.wakeup_time:
|
||||||
self.item_info.set_label(_('Disabled until %s') % utility.format_time(self.wakeup_time))
|
self.item_info.set_label(_('Disabled until %s') % utility.format_time(self.wakeup_time))
|
||||||
else:
|
else:
|
||||||
self.item_info.set_label(_('Disabled until restart'))
|
self.item_info.set_label(_('Disabled until restart'))
|
||||||
self.indicator.set_label('', '')
|
self.indicator.set_label('', '')
|
||||||
self.indicator.set_icon("safeeyes_disabled")
|
self.indicator.set_icon("io.github.slgobinath.SafeEyes-disabled")
|
||||||
else:
|
else:
|
||||||
self.item_info.set_label(_('No Breaks Available'))
|
self.item_info.set_label(_('No breaks available'))
|
||||||
self.indicator.set_label('', '')
|
self.indicator.set_label('', '')
|
||||||
self.indicator.set_icon("safeeyes_disabled")
|
self.indicator.set_icon("io.github.slgobinath.SafeEyes-disabled")
|
||||||
self.item_info.set_sensitive(breaks_found and self.active)
|
self.item_info.set_sensitive(breaks_found and self.active)
|
||||||
self.item_enable.set_sensitive(breaks_found and not self.active)
|
self.item_enable.set_sensitive(breaks_found and not self.active)
|
||||||
self.item_disable.set_sensitive(breaks_found and self.active)
|
self.item_disable.set_sensitive(breaks_found and self.active)
|
||||||
self.item_manual_break.set_sensitive(breaks_found and self.active)
|
self.item_manual_break.set_sensitive(breaks_found and self.active)
|
||||||
|
|
||||||
self.item_manual_break.set_label(_('Take a break now'))
|
self.item_manual_break.set_label(_('Take a break now'))
|
||||||
|
self.sub_menu_manual_next_break.set_label(_('Any break'))
|
||||||
|
self.sub_menu_manual_next_short_break.set_label(_('Short break'))
|
||||||
|
self.sub_menu_manual_next_long_break.set_label(_('Long break'))
|
||||||
self.item_settings.set_label(_('Settings'))
|
self.item_settings.set_label(_('Settings'))
|
||||||
self.item_about.set_label(_('About'))
|
self.item_about.set_label(_('About'))
|
||||||
self.item_quit.set_label(_('Quit'))
|
self.item_quit.set_label(_('Quit'))
|
||||||
|
@ -263,13 +283,25 @@ class TrayIcon:
|
||||||
"""
|
"""
|
||||||
A private method to be called within this class to update the next break information using self.dateTime.
|
A private method to be called within this class to update the next break information using self.dateTime.
|
||||||
"""
|
"""
|
||||||
formatted_time = utility.format_time(self.date_time)
|
formatted_time = utility.format_time(self.get_break_time())
|
||||||
message = _('Next break at %s') % (formatted_time)
|
long_time = self.get_break_time(BreakType.LONG_BREAK)
|
||||||
|
|
||||||
|
if long_time:
|
||||||
|
long_time = utility.format_time(long_time)
|
||||||
|
if long_time == formatted_time:
|
||||||
|
message = _('Next long break at %s') % (long_time)
|
||||||
|
else:
|
||||||
|
message = _('Next breaks at %s/%s') % (formatted_time, long_time)
|
||||||
|
else:
|
||||||
|
message = _('Next break at %s') % (formatted_time)
|
||||||
|
|
||||||
# Update the menu item label
|
# Update the menu item label
|
||||||
utility.execute_main_thread(self.item_info.set_label, message)
|
utility.execute_main_thread(self.item_info.set_label, message)
|
||||||
|
|
||||||
# Update the tray icon label
|
# Update the tray icon label
|
||||||
if self.plugin_config.get('show_time_in_tray', False):
|
if self.plugin_config.get('show_time_in_tray', False):
|
||||||
self.indicator.set_label(formatted_time, '')
|
show_long = long_time and self.plugin_config.get('show_long_time_in_tray', False)
|
||||||
|
self.indicator.set_label(long_time if show_long else formatted_time, '')
|
||||||
else:
|
else:
|
||||||
self.indicator.set_label('', '')
|
self.indicator.set_label('', '')
|
||||||
|
|
||||||
|
@ -277,7 +309,11 @@ class TrayIcon:
|
||||||
"""
|
"""
|
||||||
Trigger a break manually.
|
Trigger a break manually.
|
||||||
"""
|
"""
|
||||||
self.take_break()
|
if len(args) > 1:
|
||||||
|
break_type = args[1]
|
||||||
|
self.take_break(break_type)
|
||||||
|
else:
|
||||||
|
self.take_break()
|
||||||
|
|
||||||
def on_enable_clicked(self, *args):
|
def on_enable_clicked(self, *args):
|
||||||
"""
|
"""
|
||||||
|
@ -288,7 +324,7 @@ class TrayIcon:
|
||||||
if not self.active:
|
if not self.active:
|
||||||
with self.lock:
|
with self.lock:
|
||||||
self.enable_ui()
|
self.enable_ui()
|
||||||
self.on_enable()
|
self.enable_safeeyes()
|
||||||
# Notify all schedulers
|
# Notify all schedulers
|
||||||
self.idle_condition.acquire()
|
self.idle_condition.acquire()
|
||||||
self.idle_condition.notify_all()
|
self.idle_condition.notify_all()
|
||||||
|
@ -306,13 +342,13 @@ class TrayIcon:
|
||||||
time_to_wait = args[1]
|
time_to_wait = args[1]
|
||||||
if time_to_wait <= 0:
|
if time_to_wait <= 0:
|
||||||
info = _('Disabled until restart')
|
info = _('Disabled until restart')
|
||||||
self.on_disable(info)
|
self.disable_safeeyes(info)
|
||||||
self.wakeup_time = None
|
self.wakeup_time = None
|
||||||
self.item_info.set_label(info)
|
self.item_info.set_label(info)
|
||||||
else:
|
else:
|
||||||
self.wakeup_time = datetime.datetime.now() + datetime.timedelta(minutes=time_to_wait)
|
self.wakeup_time = datetime.datetime.now() + datetime.timedelta(minutes=time_to_wait)
|
||||||
info = _('Disabled until %s') % utility.format_time(self.wakeup_time)
|
info = _('Disabled until %s') % utility.format_time(self.wakeup_time)
|
||||||
self.on_disable(info)
|
self.disable_safeeyes(info)
|
||||||
self.item_info.set_label(info)
|
self.item_info.set_label(info)
|
||||||
utility.start_thread(self.__schedule_resume, time_minutes=time_to_wait)
|
utility.start_thread(self.__schedule_resume, time_minutes=time_to_wait)
|
||||||
|
|
||||||
|
@ -337,7 +373,7 @@ class TrayIcon:
|
||||||
if self.active:
|
if self.active:
|
||||||
logging.info('Disable Safe Eyes')
|
logging.info('Disable Safe Eyes')
|
||||||
self.active = False
|
self.active = False
|
||||||
self.indicator.set_icon("safeeyes_disabled")
|
self.indicator.set_icon("io.github.slgobinath.SafeEyes-disabled")
|
||||||
self.item_info.set_label(_('Disabled until restart'))
|
self.item_info.set_label(_('Disabled until restart'))
|
||||||
self.indicator.set_label('', '')
|
self.indicator.set_label('', '')
|
||||||
self.item_info.set_sensitive(False)
|
self.item_info.set_sensitive(False)
|
||||||
|
@ -352,7 +388,7 @@ class TrayIcon:
|
||||||
if not self.active:
|
if not self.active:
|
||||||
logging.info('Enable Safe Eyes')
|
logging.info('Enable Safe Eyes')
|
||||||
self.active = True
|
self.active = True
|
||||||
self.indicator.set_icon("safeeyes_enabled")
|
self.indicator.set_icon("io.github.slgobinath.SafeEyes-enabled")
|
||||||
self.item_info.set_sensitive(True)
|
self.item_info.set_sensitive(True)
|
||||||
self.item_enable.set_sensitive(False)
|
self.item_enable.set_sensitive(False)
|
||||||
self.item_disable.set_sensitive(True)
|
self.item_disable.set_sensitive(True)
|
||||||
|
@ -373,9 +409,9 @@ class TrayIcon:
|
||||||
def start_animation(self):
|
def start_animation(self):
|
||||||
if not self.active or not self.animate:
|
if not self.active or not self.animate:
|
||||||
return
|
return
|
||||||
utility.execute_main_thread(lambda: self.indicator.set_icon("safeeyes_disabled"))
|
utility.execute_main_thread(lambda: self.indicator.set_icon("io.github.slgobinath.SafeEyes-disabled"))
|
||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
utility.execute_main_thread(lambda: self.indicator.set_icon("safeeyes_enabled"))
|
utility.execute_main_thread(lambda: self.indicator.set_icon("io.github.slgobinath.SafeEyes-enabled"))
|
||||||
if self.animate and self.active:
|
if self.animate and self.active:
|
||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
if self.animate and self.active:
|
if self.animate and self.active:
|
||||||
|
@ -384,9 +420,9 @@ class TrayIcon:
|
||||||
def stop_animation(self):
|
def stop_animation(self):
|
||||||
self.animate = False
|
self.animate = False
|
||||||
if self.active:
|
if self.active:
|
||||||
utility.execute_main_thread(lambda: self.indicator.set_icon("safeeyes_enabled"))
|
utility.execute_main_thread(lambda: self.indicator.set_icon("io.github.slgobinath.SafeEyes-enabled"))
|
||||||
else:
|
else:
|
||||||
utility.execute_main_thread(lambda: self.indicator.set_icon("safeeyes_disabled"))
|
utility.execute_main_thread(lambda: self.indicator.set_icon("io.github.slgobinath.SafeEyes-disabled"))
|
||||||
|
|
||||||
def init(ctx, safeeyes_cfg, plugin_config):
|
def init(ctx, safeeyes_cfg, plugin_config):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -40,7 +40,7 @@ from safeeyes.ui.settings_dialog import SettingsDialog
|
||||||
gi.require_version('Gtk', '3.0')
|
gi.require_version('Gtk', '3.0')
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
|
|
||||||
SAFE_EYES_VERSION = "2.1.3"
|
SAFE_EYES_VERSION = "2.1.6"
|
||||||
|
|
||||||
|
|
||||||
class SafeEyes:
|
class SafeEyes:
|
||||||
|
@ -93,10 +93,10 @@ class SafeEyes:
|
||||||
self.safe_eyes_core.on_stop_break += self.stop_break
|
self.safe_eyes_core.on_stop_break += self.stop_break
|
||||||
self.safe_eyes_core.on_update_next_break += self.update_next_break
|
self.safe_eyes_core.on_update_next_break += self.update_next_break
|
||||||
self.safe_eyes_core.initialize(self.config)
|
self.safe_eyes_core.initialize(self.config)
|
||||||
self.context['api']['take_break'] = lambda: utility.execute_main_thread(
|
self.context['api']['take_break'] = self.take_break
|
||||||
self.safe_eyes_core.take_break)
|
|
||||||
self.context['api']['has_breaks'] = self.safe_eyes_core.has_breaks
|
self.context['api']['has_breaks'] = self.safe_eyes_core.has_breaks
|
||||||
self.context['api']['postpone'] = self.safe_eyes_core.postpone
|
self.context['api']['postpone'] = self.safe_eyes_core.postpone
|
||||||
|
self.context['api']['get_break_time'] = self.safe_eyes_core.get_break_time
|
||||||
self.plugins_manager.init(self.context, self.config)
|
self.plugins_manager.init(self.context, self.config)
|
||||||
atexit.register(self.persist_session)
|
atexit.register(self.persist_session)
|
||||||
|
|
||||||
|
@ -158,7 +158,7 @@ class SafeEyes:
|
||||||
if self.active:
|
if self.active:
|
||||||
logging.info("Stop Safe Eyes due to system suspend")
|
logging.info("Stop Safe Eyes due to system suspend")
|
||||||
self.plugins_manager.stop()
|
self.plugins_manager.stop()
|
||||||
self.safe_eyes_core.stop()
|
self.safe_eyes_core.stop(True)
|
||||||
else:
|
else:
|
||||||
# Resume from sleep
|
# Resume from sleep
|
||||||
if self.active and self.safe_eyes_core.has_breaks():
|
if self.active and self.safe_eyes_core.has_breaks():
|
||||||
|
@ -239,14 +239,14 @@ class SafeEyes:
|
||||||
self.safe_eyes_core.start(scheduled_next_break_time, reset_breaks)
|
self.safe_eyes_core.start(scheduled_next_break_time, reset_breaks)
|
||||||
self.plugins_manager.start()
|
self.plugins_manager.start()
|
||||||
|
|
||||||
def disable_safeeyes(self, status=None):
|
def disable_safeeyes(self, status=None, is_resting = False):
|
||||||
"""
|
"""
|
||||||
Listen to tray icon disable action and send the signal to core.
|
Listen to tray icon disable action and send the signal to core.
|
||||||
"""
|
"""
|
||||||
if self.active:
|
if self.active:
|
||||||
self.active = False
|
self.active = False
|
||||||
self.plugins_manager.stop()
|
self.plugins_manager.stop()
|
||||||
self.safe_eyes_core.stop()
|
self.safe_eyes_core.stop(is_resting)
|
||||||
if status is None:
|
if status is None:
|
||||||
status = _('Disabled until restart')
|
status = _('Disabled until restart')
|
||||||
self._status = status
|
self._status = status
|
||||||
|
@ -295,11 +295,11 @@ class SafeEyes:
|
||||||
self.plugins_manager.stop_break()
|
self.plugins_manager.stop_break()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def take_break(self):
|
def take_break(self, break_type = None):
|
||||||
"""
|
"""
|
||||||
Take a break now.
|
Take a break now.
|
||||||
"""
|
"""
|
||||||
self.safe_eyes_core.take_break()
|
utility.execute_main_thread(self.safe_eyes_core.take_break, break_type)
|
||||||
|
|
||||||
def status(self):
|
def status(self):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -41,7 +41,7 @@ class BreakScreen:
|
||||||
This class reads the break_screen.glade and build the user interface.
|
This class reads the break_screen.glade and build the user interface.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, context, on_skip, on_postpone, style_sheet_path):
|
def __init__(self, context, on_skipped, on_postponed, style_sheet_path):
|
||||||
self.context = context
|
self.context = context
|
||||||
self.count_labels = []
|
self.count_labels = []
|
||||||
self.display = Display()
|
self.display = Display()
|
||||||
|
@ -50,8 +50,8 @@ class BreakScreen:
|
||||||
self.is_pretified = False
|
self.is_pretified = False
|
||||||
self.keycode_shortcut_postpone = 65
|
self.keycode_shortcut_postpone = 65
|
||||||
self.keycode_shortcut_skip = 9
|
self.keycode_shortcut_skip = 9
|
||||||
self.on_postpone = on_postpone
|
self.on_postponed = on_postponed
|
||||||
self.on_skip = on_skip
|
self.on_skipped = on_skipped
|
||||||
self.shortcut_disable_time = 2
|
self.shortcut_disable_time = 2
|
||||||
self.strict_break = False
|
self.strict_break = False
|
||||||
self.windows = []
|
self.windows = []
|
||||||
|
@ -77,8 +77,8 @@ class BreakScreen:
|
||||||
Skip the break from the break screen
|
Skip the break from the break screen
|
||||||
"""
|
"""
|
||||||
logging.info("User skipped the break")
|
logging.info("User skipped the break")
|
||||||
# Must call on_skip before close to lock screen before closing the break screen
|
# Must call on_skipped before close to lock screen before closing the break screen
|
||||||
self.on_skip()
|
self.on_skipped()
|
||||||
self.close()
|
self.close()
|
||||||
|
|
||||||
def postpone_break(self):
|
def postpone_break(self):
|
||||||
|
@ -86,7 +86,7 @@ class BreakScreen:
|
||||||
Postpone the break from the break screen
|
Postpone the break from the break screen
|
||||||
"""
|
"""
|
||||||
logging.info("User postponed the break")
|
logging.info("User postponed the break")
|
||||||
self.on_postpone()
|
self.on_postponed()
|
||||||
self.close()
|
self.close()
|
||||||
|
|
||||||
def on_window_delete(self, *args):
|
def on_window_delete(self, *args):
|
||||||
|
|
|
@ -21,7 +21,6 @@ This module contains utility functions for Safe Eyes and its plugins.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import errno
|
import errno
|
||||||
import imp
|
|
||||||
import inspect
|
import inspect
|
||||||
import importlib
|
import importlib
|
||||||
import json
|
import json
|
||||||
|
@ -51,10 +50,11 @@ BIN_DIRECTORY = os.path.dirname(os.path.realpath(__file__))
|
||||||
HOME_DIRECTORY = os.environ.get('HOME') or os.path.expanduser('~')
|
HOME_DIRECTORY = os.environ.get('HOME') or os.path.expanduser('~')
|
||||||
CONFIG_DIRECTORY = os.path.join(os.environ.get(
|
CONFIG_DIRECTORY = os.path.join(os.environ.get(
|
||||||
'XDG_CONFIG_HOME') or os.path.join(HOME_DIRECTORY, '.config'), 'safeeyes')
|
'XDG_CONFIG_HOME') or os.path.join(HOME_DIRECTORY, '.config'), 'safeeyes')
|
||||||
|
STYLE_SHEET_DIRECTORY = os.path.join(CONFIG_DIRECTORY, 'style')
|
||||||
CONFIG_FILE_PATH = os.path.join(CONFIG_DIRECTORY, 'safeeyes.json')
|
CONFIG_FILE_PATH = os.path.join(CONFIG_DIRECTORY, 'safeeyes.json')
|
||||||
CONFIG_RESOURCE = os.path.join(CONFIG_DIRECTORY, 'resource')
|
CONFIG_RESOURCE = os.path.join(CONFIG_DIRECTORY, 'resource')
|
||||||
SESSION_FILE_PATH = os.path.join(CONFIG_DIRECTORY, 'session.json')
|
SESSION_FILE_PATH = os.path.join(CONFIG_DIRECTORY, 'session.json')
|
||||||
STYLE_SHEET_PATH = os.path.join(CONFIG_DIRECTORY, 'style/safeeyes_style.css')
|
STYLE_SHEET_PATH = os.path.join(STYLE_SHEET_DIRECTORY, 'safeeyes_style.css')
|
||||||
SYSTEM_CONFIG_FILE_PATH = os.path.join(BIN_DIRECTORY, "config/safeeyes.json")
|
SYSTEM_CONFIG_FILE_PATH = os.path.join(BIN_DIRECTORY, "config/safeeyes.json")
|
||||||
SYSTEM_STYLE_SHEET_PATH = os.path.join(
|
SYSTEM_STYLE_SHEET_PATH = os.path.join(
|
||||||
BIN_DIRECTORY, "config/style/safeeyes_style.css")
|
BIN_DIRECTORY, "config/style/safeeyes_style.css")
|
||||||
|
@ -62,7 +62,7 @@ LOG_FILE_PATH = os.path.join(HOME_DIRECTORY, 'safeeyes.log')
|
||||||
SYSTEM_PLUGINS_DIR = os.path.join(BIN_DIRECTORY, 'plugins')
|
SYSTEM_PLUGINS_DIR = os.path.join(BIN_DIRECTORY, 'plugins')
|
||||||
USER_PLUGINS_DIR = os.path.join(CONFIG_DIRECTORY, 'plugins')
|
USER_PLUGINS_DIR = os.path.join(CONFIG_DIRECTORY, 'plugins')
|
||||||
LOCALE_PATH = os.path.join(BIN_DIRECTORY, 'config/locale')
|
LOCALE_PATH = os.path.join(BIN_DIRECTORY, 'config/locale')
|
||||||
SYSTEM_DESKTOP_FILE = os.path.join(BIN_DIRECTORY, "platform/safeeyes.desktop")
|
SYSTEM_DESKTOP_FILE = os.path.join(BIN_DIRECTORY, "platform/io.github.slgobinath.SafeEyes.desktop")
|
||||||
SYSTEM_ICONS = os.path.join(BIN_DIRECTORY, "platform/icons")
|
SYSTEM_ICONS = os.path.join(BIN_DIRECTORY, "platform/icons")
|
||||||
DESKTOP_ENVIRONMENT = None
|
DESKTOP_ENVIRONMENT = None
|
||||||
IS_WAYLAND = False
|
IS_WAYLAND = False
|
||||||
|
@ -290,6 +290,9 @@ def desktop_environment():
|
||||||
env = 'gnome'
|
env = 'gnome'
|
||||||
elif desktop_session.startswith('ubuntu'):
|
elif desktop_session.startswith('ubuntu'):
|
||||||
env = 'unity'
|
env = 'unity'
|
||||||
|
elif current_desktop is not None:
|
||||||
|
if current_desktop.startswith('sway'):
|
||||||
|
env = 'sway'
|
||||||
DESKTOP_ENVIRONMENT = env
|
DESKTOP_ENVIRONMENT = env
|
||||||
return env
|
return env
|
||||||
|
|
||||||
|
@ -299,6 +302,13 @@ def is_wayland():
|
||||||
https://unix.stackexchange.com/a/325972/222290
|
https://unix.stackexchange.com/a/325972/222290
|
||||||
"""
|
"""
|
||||||
global IS_WAYLAND
|
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:
|
try:
|
||||||
session_id = subprocess.check_output(['loginctl']).split(b'\n')[1].split()[0]
|
session_id = subprocess.check_output(['loginctl']).split(b'\n')[1].split()[0]
|
||||||
output = subprocess.check_output(
|
output = subprocess.check_output(
|
||||||
|
@ -344,7 +354,7 @@ def module_exist(module):
|
||||||
Check wther the given Python module exists or not.
|
Check wther the given Python module exists or not.
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
imp.find_module(module)
|
importlib.util.find_spec(module)
|
||||||
return True
|
return True
|
||||||
except ImportError:
|
except ImportError:
|
||||||
return False
|
return False
|
||||||
|
@ -361,17 +371,15 @@ def merge_configs(new_config, old_config):
|
||||||
|
|
||||||
def initialize_safeeyes():
|
def initialize_safeeyes():
|
||||||
"""
|
"""
|
||||||
Create the config file and style sheet in ~/.config/safeeyes directory.
|
Create the config file and style sheet in XDG_CONFIG_HOME(or ~/.config)/safeeyes directory.
|
||||||
"""
|
"""
|
||||||
logging.info('Copy the config files to ~/.config/safeeyes')
|
logging.info('Copy the config files to XDG_CONFIG_HOME(or ~/.config)/safeeyes')
|
||||||
|
|
||||||
style_dir_path = os.path.join(HOME_DIRECTORY, '.config/safeeyes/style')
|
|
||||||
|
|
||||||
# Remove the ~/.config/safeeyes/safeeyes.json file
|
# Remove the ~/.config/safeeyes/safeeyes.json file
|
||||||
delete(CONFIG_FILE_PATH)
|
delete(CONFIG_FILE_PATH)
|
||||||
|
|
||||||
# Create the ~/.config/safeeyes/style directory
|
# Create the XDG_CONFIG_HOME(or ~/.config)/safeeyes/style directory
|
||||||
mkdir(style_dir_path)
|
mkdir(STYLE_SHEET_DIRECTORY)
|
||||||
|
|
||||||
# Copy the safeeyes.json
|
# Copy the safeeyes.json
|
||||||
shutil.copy2(SYSTEM_CONFIG_FILE_PATH, CONFIG_FILE_PATH)
|
shutil.copy2(SYSTEM_CONFIG_FILE_PATH, CONFIG_FILE_PATH)
|
||||||
|
@ -382,27 +390,51 @@ def initialize_safeeyes():
|
||||||
shutil.copy2(SYSTEM_STYLE_SHEET_PATH, STYLE_SHEET_PATH)
|
shutil.copy2(SYSTEM_STYLE_SHEET_PATH, STYLE_SHEET_PATH)
|
||||||
os.chmod(STYLE_SHEET_PATH, 0o777)
|
os.chmod(STYLE_SHEET_PATH, 0o777)
|
||||||
|
|
||||||
create_startup_entry()
|
# initialize_safeeyes gets called when the configuration file is not present, which happens just after installation or manual deletion of .config/safeeyes/safeeyes.json file. In these cases, we want to force the creation of a startup entry
|
||||||
|
create_startup_entry(force=True)
|
||||||
|
|
||||||
|
def create_startup_entry(force=False):
|
||||||
def create_startup_entry():
|
|
||||||
"""
|
"""
|
||||||
Create start up entry.
|
Create start up entry.
|
||||||
"""
|
"""
|
||||||
startup_dir_path = os.path.join(HOME_DIRECTORY, '.config/autostart')
|
startup_dir_path = os.path.join(HOME_DIRECTORY, '.config/autostart')
|
||||||
startup_entry = os.path.join(startup_dir_path, 'safeeyes.desktop')
|
startup_entry = os.path.join(startup_dir_path, 'io.github.slgobinath.SafeEyes.desktop')
|
||||||
|
# until SafeEyes 2.1.5 the startup entry had another name
|
||||||
|
# https://github.com/slgobinath/SafeEyes/commit/684d16265a48794bb3fd670da67283fe4e2f591b#diff-0863348c2143a4928518a4d3661f150ba86d042bf5320b462ea2e960c36ed275L398
|
||||||
|
obsolete_entry = os.path.join(startup_dir_path, 'safeeyes.desktop')
|
||||||
|
|
||||||
# Create the folder if not exist
|
create_link = False
|
||||||
mkdir(startup_dir_path)
|
|
||||||
|
|
||||||
# Remove existing files
|
if force:
|
||||||
delete(startup_entry)
|
# if force is True, just create the link
|
||||||
|
create_link = True
|
||||||
|
else:
|
||||||
|
# if force is False, we want to avoid creating the startup symlink if it was manually deleted by the user, we want to create it only if a broken one is found
|
||||||
|
if os.path.islink(startup_entry):
|
||||||
|
# if the link exists, check if it is broken
|
||||||
|
try:
|
||||||
|
os.stat(startup_entry)
|
||||||
|
except FileNotFoundError:
|
||||||
|
# a FileNotFoundError will get thrown if the startup symlink is broken
|
||||||
|
create_link = True
|
||||||
|
|
||||||
# Create the new startup entry
|
if os.path.islink(obsolete_entry):
|
||||||
try:
|
# if a link with the old naming exists, delete it and create a new one
|
||||||
os.symlink(SYSTEM_DESKTOP_FILE, startup_entry)
|
create_link = True
|
||||||
except OSError:
|
delete(obsolete_entry)
|
||||||
logging.error("Failed to create startup entry at %s" % startup_entry)
|
|
||||||
|
if create_link:
|
||||||
|
# Create the folder if not exist
|
||||||
|
mkdir(startup_dir_path)
|
||||||
|
|
||||||
|
# Remove existing files
|
||||||
|
delete(startup_entry)
|
||||||
|
|
||||||
|
# Create the new startup entry
|
||||||
|
try:
|
||||||
|
os.symlink(SYSTEM_DESKTOP_FILE, startup_entry)
|
||||||
|
except OSError:
|
||||||
|
logging.error("Failed to create startup entry at %s" % startup_entry)
|
||||||
|
|
||||||
|
|
||||||
def initialize_platform():
|
def initialize_platform():
|
||||||
|
@ -413,13 +445,13 @@ def initialize_platform():
|
||||||
|
|
||||||
applications_dir_path = os.path.join(HOME_DIRECTORY, '.local/share/applications')
|
applications_dir_path = os.path.join(HOME_DIRECTORY, '.local/share/applications')
|
||||||
icons_dir_path = os.path.join(HOME_DIRECTORY, '.local/share/icons')
|
icons_dir_path = os.path.join(HOME_DIRECTORY, '.local/share/icons')
|
||||||
desktop_entry = os.path.join(applications_dir_path, 'safeeyes.desktop')
|
desktop_entry = os.path.join(applications_dir_path, 'io.github.slgobinath.SafeEyes.desktop')
|
||||||
|
|
||||||
# Create the folder if not exist
|
# Create the folder if not exist
|
||||||
mkdir(icons_dir_path)
|
mkdir(icons_dir_path)
|
||||||
|
|
||||||
# Create a desktop entry
|
# Create a desktop entry
|
||||||
if not os.path.exists(os.path.join(sys.prefix, "share/applications/safeeyes.desktop")):
|
if not os.path.exists(os.path.join(sys.prefix, "share/applications/io.github.slgobinath.SafeEyes.desktop")):
|
||||||
# Create the folder if not exist
|
# Create the folder if not exist
|
||||||
mkdir(applications_dir_path)
|
mkdir(applications_dir_path)
|
||||||
|
|
||||||
|
@ -482,7 +514,7 @@ def replace_style_sheet():
|
||||||
os.chmod(STYLE_SHEET_PATH, 0o777)
|
os.chmod(STYLE_SHEET_PATH, 0o777)
|
||||||
|
|
||||||
|
|
||||||
def intialize_logging(debug):
|
def initialize_logging(debug):
|
||||||
"""
|
"""
|
||||||
Initialize the logging framework using the Safe Eyes specific configurations.
|
Initialize the logging framework using the Safe Eyes specific configurations.
|
||||||
"""
|
"""
|
||||||
|
@ -656,7 +688,7 @@ def has_method(module, method_name, no_of_args=0):
|
||||||
Check whether the given function is defined in the module or not.
|
Check whether the given function is defined in the module or not.
|
||||||
"""
|
"""
|
||||||
if hasattr(module, method_name):
|
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 True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
26
setup.py
|
@ -41,17 +41,17 @@ def __data_files():
|
||||||
Collect the data files.
|
Collect the data files.
|
||||||
"""
|
"""
|
||||||
root_dir = sys.prefix
|
root_dir = sys.prefix
|
||||||
return [(os.path.join(root_dir, "share/applications"), ["safeeyes/platform/safeeyes.desktop"]),
|
return [(os.path.join(root_dir, "share/applications"), ["safeeyes/platform/io.github.slgobinath.SafeEyes.desktop"]),
|
||||||
(os.path.join(root_dir, "share/icons/hicolor/24x24/status"), ["safeeyes/platform/icons/hicolor/24x24/status/safeeyes_disabled.png", "safeeyes/platform/icons/hicolor/24x24/status/safeeyes_enabled.png", "safeeyes/platform/icons/hicolor/24x24/status/safeeyes_timer.png"]),
|
(os.path.join(root_dir, "share/icons/hicolor/24x24/status"), ["safeeyes/platform/icons/hicolor/24x24/status/io.github.slgobinath.SafeEyes-disabled.png", "safeeyes/platform/icons/hicolor/24x24/status/io.github.slgobinath.SafeEyes-enabled.png", "safeeyes/platform/icons/hicolor/24x24/status/io.github.slgobinath.SafeEyes-timer.png"]),
|
||||||
(os.path.join(root_dir, "share/icons/hicolor/24x24/apps"), ["safeeyes/platform/icons/hicolor/24x24/apps/safeeyes.png"]),
|
(os.path.join(root_dir, "share/icons/hicolor/24x24/apps"), ["safeeyes/platform/icons/hicolor/24x24/apps/io.github.slgobinath.SafeEyes.png"]),
|
||||||
(os.path.join(root_dir, "share/icons/hicolor/16x16/status"), ["safeeyes/platform/icons/hicolor/16x16/status/safeeyes_disabled.png", "safeeyes/platform/icons/hicolor/16x16/status/safeeyes_enabled.png", "safeeyes/platform/icons/hicolor/16x16/status/safeeyes_timer.png"]),
|
(os.path.join(root_dir, "share/icons/hicolor/16x16/status"), ["safeeyes/platform/icons/hicolor/16x16/status/io.github.slgobinath.SafeEyes-disabled.png", "safeeyes/platform/icons/hicolor/16x16/status/io.github.slgobinath.SafeEyes-enabled.png", "safeeyes/platform/icons/hicolor/16x16/status/io.github.slgobinath.SafeEyes-timer.png"]),
|
||||||
(os.path.join(root_dir, "share/icons/hicolor/16x16/apps"), ["safeeyes/platform/icons/hicolor/16x16/apps/safeeyes.png"]),
|
(os.path.join(root_dir, "share/icons/hicolor/16x16/apps"), ["safeeyes/platform/icons/hicolor/16x16/apps/io.github.slgobinath.SafeEyes.png"]),
|
||||||
(os.path.join(root_dir, "share/icons/hicolor/32x32/status"), ["safeeyes/platform/icons/hicolor/32x32/status/safeeyes_disabled.png", "safeeyes/platform/icons/hicolor/32x32/status/safeeyes_enabled.png"]),
|
(os.path.join(root_dir, "share/icons/hicolor/32x32/status"), ["safeeyes/platform/icons/hicolor/32x32/status/io.github.slgobinath.SafeEyes-disabled.png", "safeeyes/platform/icons/hicolor/32x32/status/io.github.slgobinath.SafeEyes-enabled.png"]),
|
||||||
(os.path.join(root_dir, "share/icons/hicolor/32x32/apps"), ["safeeyes/platform/icons/hicolor/32x32/apps/safeeyes.png"]),
|
(os.path.join(root_dir, "share/icons/hicolor/32x32/apps"), ["safeeyes/platform/icons/hicolor/32x32/apps/io.github.slgobinath.SafeEyes.png"]),
|
||||||
(os.path.join(root_dir, "share/icons/hicolor/64x64/apps"), ["safeeyes/platform/icons/hicolor/64x64/apps/safeeyes.png"]),
|
(os.path.join(root_dir, "share/icons/hicolor/64x64/apps"), ["safeeyes/platform/icons/hicolor/64x64/apps/io.github.slgobinath.SafeEyes.png"]),
|
||||||
(os.path.join(root_dir, "share/icons/hicolor/128x128/apps"), ["safeeyes/platform/icons/hicolor/128x128/apps/safeeyes.png"]),
|
(os.path.join(root_dir, "share/icons/hicolor/128x128/apps"), ["safeeyes/platform/icons/hicolor/128x128/apps/io.github.slgobinath.SafeEyes.png"]),
|
||||||
(os.path.join(root_dir, "share/icons/hicolor/48x48/status"), ["safeeyes/platform/icons/hicolor/48x48/status/safeeyes_disabled.png", "safeeyes/platform/icons/hicolor/48x48/status/safeeyes_enabled.png"]),
|
(os.path.join(root_dir, "share/icons/hicolor/48x48/status"), ["safeeyes/platform/icons/hicolor/48x48/status/io.github.slgobinath.SafeEyes-disabled.png", "safeeyes/platform/icons/hicolor/48x48/status/io.github.slgobinath.SafeEyes-enabled.png"]),
|
||||||
(os.path.join(root_dir, "share/icons/hicolor/48x48/apps"), ["safeeyes/platform/icons/hicolor/48x48/apps/safeeyes.png"]),]
|
(os.path.join(root_dir, "share/icons/hicolor/48x48/apps"), ["safeeyes/platform/icons/hicolor/48x48/apps/io.github.slgobinath.SafeEyes.png"]),]
|
||||||
|
|
||||||
|
|
||||||
def __package_files(directory):
|
def __package_files(directory):
|
||||||
|
@ -78,14 +78,14 @@ def __package_data():
|
||||||
|
|
||||||
setuptools.setup(
|
setuptools.setup(
|
||||||
name="safeeyes",
|
name="safeeyes",
|
||||||
version="2.1.3",
|
version="2.1.6",
|
||||||
description="Protect your eyes from eye strain using this continuous breaks reminder.",
|
description="Protect your eyes from eye strain using this continuous breaks reminder.",
|
||||||
long_description=long_description,
|
long_description=long_description,
|
||||||
long_description_content_type="text/markdown",
|
long_description_content_type="text/markdown",
|
||||||
author="Gobinath Loganathan",
|
author="Gobinath Loganathan",
|
||||||
author_email="slgobinath@gmail.com",
|
author_email="slgobinath@gmail.com",
|
||||||
url="https://github.com/slgobinath/SafeEyes",
|
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.6.tar.gz",
|
||||||
packages=setuptools.find_packages(),
|
packages=setuptools.find_packages(),
|
||||||
package_data={'safeeyes': __package_data()},
|
package_data={'safeeyes': __package_data()},
|
||||||
data_files=__data_files(),
|
data_files=__data_files(),
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
#!/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
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def validate_po(locale: str, path: str) -> bool:
|
||||||
|
success = True
|
||||||
|
po = polib.pofile(path)
|
||||||
|
for entry in po:
|
||||||
|
if entry.msgstr and (entry.msgid.count("%") != entry.msgstr.count("%")):
|
||||||
|
print("Number of variables mismatched in " + locale)
|
||||||
|
print(entry.msgid + " -> " + entry.msgstr)
|
||||||
|
print()
|
||||||
|
success = False
|
||||||
|
return success
|
||||||
|
|
||||||
|
success = True
|
||||||
|
locales = os.listdir('safeeyes/config/locale')
|
||||||
|
for locale in sorted(locales):
|
||||||
|
path = os.path.join('safeeyes/config/locale', locale, "LC_MESSAGES/safeeyes.po")
|
||||||
|
if os.path.isfile(path):
|
||||||
|
print('Validating translation %s...' % path)
|
||||||
|
success = validate_po(locale, path) and success
|
||||||
|
sys.exit(0 if success else 1)
|