Commit a8de58e6 authored by Bilal Elmoussaoui's avatar Bilal Elmoussaoui

Use meson instead of autotools, update pot files, fix few issues

parent 6281a38a
ACLOCAL_AMFLAGS = -I m4
NULL =
bin_SCRIPTS = gnome-twofactorauth
CLEANFILES = $(bin_SCRIPTS)
EXTRA_DIST = gnome-twofactorauth.in
do_substitution = sed -e 's,[@]pythondir[@],$(pythondir),g' \
-e 's,[@]pkgdatadir[@],$(pkgdatadir),g' \
-e 's,[@]localedir[@],$(localedir),g' \
-e 's,[@]PACKAGE[@],$(PACKAGE),g' \
-e 's,[@]VERSION[@],$(VERSION),g' \
-e 's,[@]srcdir[@],$(srcdir),g' \
-e 's,[@]pyexecdir[@],$(pyexecdir),g'
gnome-twofactorauth: gnome-twofactorauth.in Makefile
$(do_substitution) < $(srcdir)/gnome-twofactorauth.in > gnome-twofactorauth
chmod +x gnome-twofactorauth
SUBDIRS = TwoFactorAuth \
data \
po
......@@ -9,6 +9,8 @@ version](https://img.shields.io/badge/python-3.3%2B-blue.svg)
### Dependecies
- `Python 3.3+`
- `Gtk 3.16+`
- `meson` (works only with git version for now)
- `ninja`
- `python-pyotp`
- `python-yaml`
- `python-pillow`
......@@ -52,9 +54,10 @@ sudo pip install pyotp zbarlight python-yaml pillow
<sub>PS : In some distributions you will need to use `pip3` instead of `pip` to install the compatible version of the package with Python 3.</sub> <br>
3 - Afterwards
```bash
./autogen.sh
make
sudo make install
mkdir build && cd build
meson ..
ninja
sudo ninja install
```
4 - You can run the application from the desktop file or from terminal using
```bash
......
app_PYTHON = \
application.py \
utils.py \
__init__.py
appdir = $(pythondir)/TwoFactorAuth
SUBDIRS = models \
widgets
appdir = $(pythondir)/TwoFactorAuth/models
app_PYTHON = \
code.py \
database.py \
qr_reader.py \
settings.py
appdir = $(pythondir)/TwoFactorAuth/widgets
app_PYTHON = \
add_account.py \
confirmation.py \
account_row.py \
accounts_list.py \
accounts_window.py \
login_window.py \
inapp_notification.py \
headerbar.py \
applications_list.py \
application_row.py \
change_password.py \
no_account_window.py \
search_bar.py \
settings.py \
window.py
#!/bin/sh
mkdir -p m4
touch NEWS
touch README
touch AUTHORS
touch ChangeLog
echo "Creating m4/aclocal.m4 ..."
test -r m4/aclocal.m4 || touch m4/aclocal.m4
echo "Running glib-gettextize... Ignore non-fatal messages."
echo "no" | glib-gettextize --force --copy
echo "Making m4/aclocal.m4 writable ..."
test -r m4/aclocal.m4 && chmod u+w m4/aclocal.m4
echo "Running intltoolize..."
intltoolize --force --copy --automake || return 1
echo "Running aclocal..."
aclocal || return 1
echo "Running libtoolize..."
libtoolize || return 1
echo "Running autoheader..."
autoheader || return 1
echo "Running autoconf..."
autoconf || return 1
echo "Running automake..."
automake --add-missing || return 1
echo "Running configure..."
./configure "$@" || return 1
AC_INIT([TwoFactorAuth], [0.1.1], [https://github.com/bil-elmoussaoui/TwoFactorAuth])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_SRCDIR([Makefile.am])
AC_CONFIG_HEADERS(config.h)
AM_INIT_AUTOMAKE
AM_PATH_PYTHON([3.0])
AM_MAINTAINER_MODE([enable])
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
GETTEXT_PACKAGE=TwoFactorAuth
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE",
[The prefix for our gettext translation domains.])
IT_PROG_INTLTOOL(0.26)
GLIB_GSETTINGS
GOBJECT_INTROSPECTION_REQUIRE([1.35.9])
PKG_CHECK_MODULES([GTK], [gtk+-3.0 >= 3.16.0])
GLIB_COMPILE_RESOURCES=`$PKG_CONFIG --variable glib_compile_resources gio-2.0`
AC_SUBST(GLIB_COMPILE_RESOURCES)
AC_CONFIG_FILES([
Makefile
data/Makefile
data/applications/Makefile
data/applications/images/Makefile
data/applications/data/Makefile
data/gnome-twofactorauth.desktop
TwoFactorAuth/Makefile
TwoFactorAuth/models/Makefile
TwoFactorAuth/widgets/Makefile
po/Makefile.in
])
AC_OUTPUT
SUBDIRS = applications
resource_files = $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --sourcedir=$(builddir) --generate-dependencies $(builddir)/gnome-twofactorauth.gresource.xml)
gnome-twofactorauth.gresource: gnome-twofactorauth.gresource.xml $(resource_files)
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --sourcedir=$(builddir) $<
resourcedir = $(pkgdatadir)
resource_DATA = gnome-twofactorauth.gresource
desktopdir = $(datadir)/applications
desktop_DATA = gnome-twofactorauth.desktop
@INTLTOOL_DESKTOP_RULE@
appdatadir = $(datadir)/appdata
appdata_DATA = $(appdata_in_files:.xml.in=.xml)
appdata_in_files = gnome-twofactorauth.appdata.xml.in
@INTLTOOL_XML_RULE@
# hicolor icons
hicolor_icon16dir = $(datadir)/icons/hicolor/16x16/apps
hicolor_icon16_DATA = icons/hicolor/16x16/apps/gnome-twofactorauth.png
hicolor_icon22dir = $(datadir)/icons/hicolor/22x22/apps
hicolor_icon22_DATA = icons/hicolor/22x22/apps/gnome-twofactorauth.png
hicolor_icon32dir = $(datadir)/icons/hicolor/32x32/apps
hicolor_icon32_DATA = icons/hicolor/32x32/apps/gnome-twofactorauth.png
hicolor_icon48dir = $(datadir)/icons/hicolor/48x48/apps
hicolor_icon48_DATA = icons/hicolor/48x48/apps/gnome-twofactorauth.png
hicolor_icon256dir = $(datadir)/icons/hicolor/256x256/apps
hicolor_icon256_DATA = icons/hicolor/256x256/apps/gnome-twofactorauth.png
hicolor_iconscalabledir = $(datadir)/icons/hicolor/scalable/apps
hicolor_iconscalable_DATA = icons/hicolor/scalable/apps/gnome-twofactorauth-symbolic.svg
hicolor_icon_files = \
$(hicolor_icon16_DATA) \
$(hicolor_icon22_DATA) \
$(hicolor_icon32_DATA) \
$(hicolor_icon48_DATA) \
$(hicolor_icon256_DATA) \
$(hicolor_iconscalable_DATA)
gtk_update_hicolor_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor
gtk_update_hicontrast_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/HighContrast
update-icon-cache:
@-if test -z "$(DESTDIR)"; then \
echo "Updating Gtk hicolor icon cache."; \
$(gtk_update_hicolor_icon_cache); \
echo "Updating Gtk highcontrast icon cache."; \
$(gtk_update_hicontrast_icon_cache); \
else \
echo "*** Icon cache not updated. After (un)install, run this:"; \
echo "*** $(gtk_update_hicolor_icon_cache)"; \
echo "*** $(gtk_update_hicolor_icon_cache)"; \
fi
gsettings_SCHEMAS = org.gnome.TwoFactorAuth.gschema.xml
gschemas.compiled: $(gsettings_SCHEMAS) Makefile
$(AM_V_GEN) $(GLIB_COMPILE_SCHEMAS) $(builddir)
@GSETTINGS_RULES@
EXTRA_DIST = \
$(resource_files) \
$(desktop_DATA) \
$(appdata_DATA) \
gnome-twofactorauth.gresource.xml \
org.gnome.TwoFactorAuth.gschema.xml
CLEANFILES = \
gnome-twofactorauth.gresource \
gnome-twofactorauth.appdata.xml \
$(desktop_DATA) \
*.valid \
gschemas.compiled
install-data-hook:
$(UPDATE_DESKTOP) \
$(update-icon-cache)
uninstall-hook:
$(UPDATE_DESKTOP) \
$(update-icon-cache)
all-local: gschemas.compiled
yamldir = $(pkgdatadir)/applications/data
yaml_DATA = backup.yml \
banking.yml \
cloud.yml \
communication.yml \
cryptocurrencies.yml \
developer.yml \
domains.yml \
education.yml \
email.yml \
entertainment.yml \
finance.yml \
food.yml \
gaming.yml \
health.yml \
hosting.yml \
investing.yml \
other.yml \
payments.yml \
remote.yml \
retail.yml \
security.yml \
social.yml \
transport.yml \
utilities.yml
imagesdir = $(pkgdatadir)/applications/images
images_DATA = amazon.png \
dropbox.png \
facebook.png \
flickr.png \
foursquare.png \
gitter.png \
google.png \
microsoft.png \
owncloud.png \
pocket.png \
reddit.png \
slack.png \
twitter.png \
yahoo.png
build_dir = get_option('prefix') + '/' + get_option('datadir') + '/TwoFactorAuth/applications'
install_subdir('data', install_dir : build_dir + '/data')
install_subdir('images', install_dir : build_dir + '/images')
<?xml version="1.0" encoding="UTF-8"?>
<application>
<id type="desktop">twofactorauth.desktop</id>
<id type="desktop">gnome-twofactorauth.desktop</id>
<licence>GPL3</licence>
<name>Gnome TwoFactorAuth</name>
<summary>Two Factor Authentication code generator</summary>
<_name>Gnome TwoFactorAuth</_name>
<_summary>Two Factor Authentication code generator</_summary>
<description>
<p>Simple application that generates two-factor authentication code, created for Gnome</p>
<_p>Simple application that generates two-factor authentication code, created for Gnome</_p>
</description>
<screenshots>
<screenshot type="default" width="350" height="500">https://raw.githubusercontent.com/bil-elmoussaoui/Gnome-TwoFactorAuth/master/screenshots/screenshot1.png</screenshot>
......
[Desktop Entry]
Name=Gnome TwoFactorAuth
GenericName=Two Factor Authentication
Comment=Two-Factor Authentication code generator
_Name=Gnome TwoFactorAuth
_GenericName=Two Factor Authentication
_Comment=Two-Factor Authentication code generator
Type=Application
Exec=gnome-twofactorauth
Terminal=false
......@@ -16,4 +16,4 @@ Actions=AboutDialog;
[Desktop Action AboutDialog]
Exec=gnome-twofactorauth --about
Name=About Gnome TwoFactorAuth
_Name=About Gnome TwoFactorAuth
icon_themes = ['hicolor']
foreach theme : icon_themes
install_subdir(theme, install_dir: 'share/icons/')
endforeach
gnome = import('gnome')
subdir('applications')
build_dir = get_option('prefix') + '/' + get_option('datadir')
po_dir = get_option('prefix') + '/' + get_option('datadir') + '/locale'
message('TODO: Compiling resources')
gnome.compile_resources(
'gnome-twofactorauth', 'gnome-twofactorauth.gresource.xml',
gresource_bundle: true,
source_dir : '.',
install_dir : build_dir + '/TwoFactorAuth',
install: true)
message('Compiling schemas')
gnome.compile_schemas()
install_data(
'org.gnome.TwoFactorAuth.gschema.xml',
install_dir : 'share/glib-2.0/schemas')
message('TODO: Making a .desktop file')
custom_target('gnome-twofactorauth.desktop',
output : 'gnome-twofactorauth.desktop',
input : 'gnome-twofactorauth.desktop.in',
command : [intltool_merge, '--desktop-style', po_dir, '@INPUT@', '@OUTPUT@'],
install : true,
install_dir : get_option('datadir') + '/applications'
)
message('TODO: Preparing appdata')
custom_target('gnome-twofactorauth.appdata.xml',
output : 'gnome-twofactorauth.appdata.xml',
input : 'gnome-twofactorauth.appdata.xml.in',
command : [intltool_merge, '--xml-style', po_dir, '@INPUT@', '@OUTPUT@'],
install : true,
install_dir : get_option('datadir') + '/appdata'
)
message('TODO: Making a list of icons')
subdir('icons')
......@@ -22,8 +22,7 @@ from gi import require_version
require_version("Gtk", "3.0")
from gi.repository import Gtk
import sys
sys.path.insert(1, '@pyexecdir@')
sys.path.insert(1, '@pythondir@')
sys.path.insert(1, '@PYTHONDIR@')
from gi.repository import Gio
from TwoFactorAuth import application
import logging
......@@ -35,18 +34,20 @@ import faulthandler
from os import path, environ as env
if __name__ == "__main__":
locale.bindtextdomain('gnome-twofactorauth', '@LOCALE_DIR@')
locale.textdomain('gnome-twofactorauth')
gettext.bindtextdomain('gnome-twofactorauth', '@LOCALE_DIR@')
gettext.textdomain('gnome-twofactorauth')
version = "@GITVERSION@"
if not version:
version = "@VERSION@"
env["DATA_DIR"] = "@DATADIR@"
env["LOCALE_DIR"] = '@LOCALE_DIR@'
print("@LOCALE_DIR@")
locale.bindtextdomain('TwoFactorAuth', "@localedir@")
locale.textdomain('TwoFactorAuth')
gettext.bindtextdomain('TwoFactorAuth', "@localedir@")
gettext.textdomain('TwoFactorAuth')
env["DATA_DIR"] = "@pkgdatadir@"
env["LOCALE_DIR"] = "@localedir@"
parser = argparse.ArgumentParser(prog="TwoFactorAuth")
parser = argparse.ArgumentParser(prog="Gnome-TwoFactorAuth")
parser.add_argument("--debug", "-d", action="store_true",
help=_("start in debug mode"))
help=_("Start in debug mode"))
parser.add_argument("--version", "-v", action="store_true",
help=_("Gnome-TwoFactorAuth version number"))
parser.add_argument("--about", action="store_true",
......@@ -61,11 +62,11 @@ if __name__ == "__main__":
format='[%(levelname)s] - %(asctime)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
resource = Gio.resource_load(path.join('@pkgdatadir@',
resource = Gio.resource_load(path.join('@DATADIR@',
'gnome-twofactorauth.gresource'))
Gio.Resource._register(resource)
if args.version:
sys.exit("Version : @VERSION@")
sys.exit("Version : " + str(version))
elif args.about:
about_dialog = application.Application.about_dialog()
about_dialog.run()
......
# See https://github.com/mesonbuild/meson/issues/226
project('gnome-twofactorauth', 'c',
version: '0.1.1')
python = find_program('python3')
git = find_program('git', required : false)
intltool_merge = find_program('intltool-merge')
if git.found()
GITVERSION = run_command(git, 'describe', '--always').stdout().strip()
else
GITVERSION = ''
endif
message('Looking for dependencies')
py3 = find_program('python3')
glib = dependency('glib-2.0')
gobject = dependency('gobject-2.0')
gir = dependency('gobject-introspection-1.0')
gtk = dependency('gtk+-3.0', version : '>=3.16')
message('Getting python install dir')
r = run_command(py3, '-c', 'from distutils.sysconfig import get_python_lib; print(get_python_lib())')
if r.returncode() != 0
error('Cannot find python install dir')
endif
python_dir = r.stdout().strip()
message('Python install dir found : YES ' + python_dir)
# Configuration params
conf = configuration_data()
conf.set('PACKAGE_URL', 'https://github.com/bil-elmoussaoui/TwoFactorAuth')
conf.set('LIBDIR', get_option('prefix') + '/' + get_option('libdir'))
conf.set('DATADIR', get_option('prefix') + '/' + get_option('datadir') + '/TwoFactorAuth/')
conf.set('LOCALE_DIR', get_option('prefix') + '/' + get_option('datadir') + '/locale/')
conf.set('PACKAGE_NAME', 'Gnome TwoFactorAuth')
conf.set('PACKAGE', 'gnome-twofactorauth')
conf.set('GITVERSION', GITVERSION)
conf.set('VERSION', meson.project_version())
conf.set('BUILDDIR', meson.current_build_dir())
conf.set('PYTHONDIR', python_dir)
subdir('data')
subdir('po')
run_command(python, '-m', 'compileall', meson.current_source_dir() + '/TwoFactorAuth')
install_subdir('TwoFactorAuth', install_dir: python_dir)
message('Preparing init file')
configure_file(input : 'gnome-twofactorauth.in', output : 'gnome-twofactorauth', configuration : conf)
configure_file = '@0@/gnome-twofactorauth'.format(meson.current_build_dir())
install_data(configure_file, install_dir: 'bin')
meson.add_install_script('meson_post_install.sh')
#!/bin/sh
# Update icon caches
gtk-update-icon-cache -f -t ${DESTDIR}/${MESON_INSTALL_PREFIX}/share/icons/hicolor
# Install new schemas
glib-compile-schemas ${DESTDIR}/${MESON_INSTALL_PREFIX}/share/glib-2.0/schemas/
# Fix binary permissions
chmod +x ${DESTDIR}/${MESON_INSTALL_PREFIX}/bin/gnome-twofactorauth
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-07-31 03:20+0200\n"
"POT-Creation-Date: 2016-12-13 00:20+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
......@@ -17,257 +17,221 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: data/shortcuts.ui:13
msgctxt "shortcut window"
msgid "General"
msgstr ""
#: data/shortcuts.ui:17
msgctxt "shortcut window"
msgid "Search"
#: ../TwoFactorAuth/application.py:46
msgid "TwoFactorAuth"
msgstr ""
#: data/shortcuts.ui:24
msgctxt "shortcut window"
msgid "Add a new account"
#: ../TwoFactorAuth/application.py:82 ../TwoFactorAuth/widgets/headerbar.py:117
#: ../TwoFactorAuth/widgets/settings.py:42
msgid "Settings"
msgstr ""
#: data/shortcuts.ui:31
msgctxt "shortcut window"
msgid "Selection mode"
#: ../TwoFactorAuth/application.py:90
msgid "Shortcuts"
msgstr ""
#: data/shortcuts.ui:38
msgctxt "shortcut window"
msgid "Lock the application"
#: ../TwoFactorAuth/application.py:92
msgid "About"
msgstr ""
#: data/shortcuts.ui:47
msgctxt "shortcut window"
msgid "Account list"
#: ../TwoFactorAuth/application.py:93
msgid "Quit"
msgstr ""
#: data/shortcuts.ui:51
msgctxt "shortcut window"
msgid "Copy"
#: ../TwoFactorAuth/widgets/account_row.py:157
#, python-format
msgid "Code \"%s\" copied to clipboard"
msgstr ""
#: data/shortcuts.ui:58
msgctxt "shortcut window"
msgid "Delete"
#: ../TwoFactorAuth/widgets/account_row.py:222
msgid "Remove the account"
msgstr ""
#: data/shortcuts.ui:65
msgctxt "shortcut window"
msgid "Select next/previous account"
#: ../TwoFactorAuth/widgets/account_row.py:232
msgid "Copy the generated code"
msgstr ""
#: data/shortcuts.ui:74
msgctxt "shortcut window"
msgid "Add Account"
#: ../TwoFactorAuth/widgets/account_row.py:242
msgid "Edit the account"
msgstr ""
#: data/shortcuts.ui:78
msgctxt "shortcut window"
msgid "Scan QR code"
#: ../TwoFactorAuth/widgets/account_row.py:252
msgid "Save the new account name"
msgstr ""
#: data/shortcuts.ui:85
msgctxt "shortcut window"
msgid "Close"
#: ../TwoFactorAuth/widgets/account_row.py:260
#: ../TwoFactorAuth/widgets/account_row.py:386
#, python-format
msgid "Expires in %s seconds"
msgstr ""
#: data/about.ui:14
msgid "Simple application to generate two-factor authentication code"
#: ../TwoFactorAuth/widgets/account_row.py:266
msgid "Error during the generation of code"
msgstr ""
#: data/about.ui:15
msgid ""
"This program comes with absolutely no warranty. See the <a href=\"http://www."
"gnu.org/licenses/gpl-3.0.html\">GNU General Public License, version 3 or "
"later</a> for details."
#: ../TwoFactorAuth/widgets/account_row.py:311
msgid "Couldn't generate the secret code"
msgstr ""
#: data/about.ui:20
msgid "Github"
#: ../TwoFactorAuth/widgets/account_row.py:373
#, python-format
msgid "Do you really want to remove \"%s\"?"
msgstr ""
#: TwoFactorAuth/widgets/headerbar.py:64
msgid "Remove selected accounts"
#: ../TwoFactorAuth/widgets/account_row.py:377
#, python-format
msgid "\"%s\" was removed"
msgstr ""
#: TwoFactorAuth/widgets/headerbar.py:71
#: TwoFactorAuth/widgets/add_account.py:50
#: TwoFactorAuth/widgets/add_account.py:67
#: ../TwoFactorAuth/widgets/add_account.py:50
#: ../TwoFactorAuth/widgets/add_account.py:67
#: ../TwoFactorAuth/widgets/headerbar.py:71
msgid "Add a new account"
msgstr ""
#: TwoFactorAuth/widgets/headerbar.py:78
msgid "Lock the Application"
msgstr ""
#: TwoFactorAuth/widgets/headerbar.py:94
msgid "Selection mode"
msgstr ""
#: TwoFactorAuth/widgets/headerbar.py:101
#: TwoFactorAuth/widgets/applications_list.py:121
msgid "Search"
msgstr ""
#: TwoFactorAuth/widgets/headerbar.py:105
#: TwoFactorAuth/widgets/add_account.py:72
#: TwoFactorAuth/widgets/change_password.py:162
#: TwoFactorAuth/widgets/applications_list.py:114
#: ../TwoFactorAuth/widgets/add_account.py:72
#: ../TwoFactorAuth/widgets/applications_list.py:115
#: ../TwoFactorAuth/widgets/change_password.py:162
#: ../TwoFactorAuth/widgets/headerbar.py:105
msgid "Cancel"
msgstr ""
#: TwoFactorAuth/widgets/headerbar.py:117 TwoFactorAuth/widgets/settings.py:42
#: TwoFactorAuth/application.py:82
msgid "Settings"
msgstr ""
#: TwoFactorAuth/widgets/no_account_window.py:39
msgid "There's no account at the moment"
msgstr ""
#: TwoFactorAuth/widgets/add_account.py:77
#: ../TwoFactorAuth/widgets/add_account.py:77
msgid "Add"
msgstr ""
#: TwoFactorAuth/widgets/add_account.py:85
#: ../TwoFactorAuth/widgets/add_account.py:85
msgid "Scan a QR code"
msgstr ""
#: TwoFactorAuth/widgets/add_account.py:107
#: ../TwoFactorAuth/widgets/add_account.py:107
msgid "Account Name"
msgstr ""
#: TwoFactorAuth/widgets/add_account.py:115
#: ../TwoFactorAuth/widgets/add_account.py:115
msgid "Secret Code"
msgstr ""
#: TwoFactorAuth/widgets/add_account.py:145
#: ../TwoFactorAuth/widgets/add_account.py:145
msgid "Selected area is not a valid QR code"
msgstr ""
#: TwoFactorAuth/widgets/change_password.py:36
msgid "Apply"
#: ../TwoFactorAuth/widgets/applications_list.py:110
msgid "Select an application"
msgstr ""
#: TwoFactorAuth/widgets/change_password.py:46
msgid "Change password"
#: ../TwoFactorAuth/widgets/applications_list.py:122
#: ../TwoFactorAuth/widgets/headerbar.py:101
msgid "Search"
msgstr ""
#: TwoFactorAuth/widgets/change_password.py:78
msgid "Old password"
#: ../TwoFactorAuth/widgets/applications_list.py:125
msgid "Next"
msgstr ""
#: TwoFactorAuth/widgets/change_password.py:88
msgid "New password"
#: ../TwoFactorAuth/widgets/change_password.py:36
msgid "Apply"
msgstr ""
#: TwoFactorAuth/widgets/change_password.py:98
msgid "Repeat new password"
#: ../TwoFactorAuth/widgets/change_password.py:46</