Initial i18n

This commit is contained in:
Michael Theall 2020-06-03 23:02:00 -05:00
parent 0665777a85
commit 2e4e9875b1
26 changed files with 2624 additions and 65 deletions

View File

@ -34,6 +34,7 @@ include $(DEVKITARM)/3ds_rules
SOURCES := source source/3ds
DATA := data
INCLUDES := include
ROMFS := 3ds/romfs
ifeq ($(strip $(CLASSIC)),)
APP_TITLE := ftpd pro
@ -41,7 +42,6 @@ TARGET := 3ds/ftpd
BUILD := 3ds/build
SOURCES += source/imgui
GRAPHICS := 3ds/gfx
ROMFS := 3ds/romfs
GFXBUILD := $(ROMFS)
RSF_FILE := meta/ftpd-cia.rsf
else
@ -71,6 +71,7 @@ CFLAGS := -g -Wall $(OPTIMIZE) -mword-relocations \
CFLAGS += $(INCLUDE) -DARM11 -D_3DS \
-DSTATUS_STRING="\"ftpd v$(VERSION)\"" \
-DIMGUI_DISABLE_INCLUDE_IMCONFIG_H=1 \
-D"_(x)=getText(x)" \
-DNO_IPV6 -DFTPDCONFIG="\"/config/ftpd/ftpd.cfg\"" \
-DANTI_ALIAS=1
@ -107,8 +108,8 @@ export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
export DEPSDIR := $(CURDIR)/$(BUILD)
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
export CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
export CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
SHLISTFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.shlist)))
GFXFILES := $(foreach dir,$(GRAPHICS),$(notdir $(wildcard $(dir)/*.t3s)))
@ -308,9 +309,10 @@ $(TARGET).bnr: $(TOPDIR)/$(BNR_IMAGE) $(TOPDIR)/$(BNR_AUDIO)
@bannertool makebanner -o $@ -i $(TOPDIR)/$(BNR_IMAGE) -a $(TOPDIR)/$(BNR_AUDIO)
@echo "built ... $@"
-include $(DEPSDIR)/*.d
#---------------------------------------------------------------------------------------
endif
#---------------------------------------------------------------------------------------
include $(TOPDIR)/Makefile.i18n

48
Makefile.i18n Normal file
View File

@ -0,0 +1,48 @@
ifeq ($(strip $(ROMFS)),)
$(error "Please include from a Makefile that defines ROMFS")
endif
ifeq ($(strip $(TARGET)),)
$(error "Please include from a Makefile that defines TARGET")
endif
# Note: Have your main target, e.g. $(OUTPUT).nro, depend on ROMFS_DEPS
.PHONY: clean-mo
MO_FILES := $(foreach lang,de_DE en_GB en_US es_ES fr_FR it_IT ja_JP nl_NL pt_PT ru_RU,$(TOPDIR)/$(ROMFS)/locale/$(lang)/ftpd.mo)
$(OUTPUT).nds: $(MO_FILES)
$(OUTPUT).3dsx: $(MO_FILES)
$(OUTPUT).cia: $(MO_FILES)
$(OUTPUT).nro: $(MO_FILES)
$(MO_FILES): $(TOPDIR)/$(ROMFS)/locale/%/ftpd.mo: $(TOPDIR)/po/%/ftpd.po
@echo "Building $@"
@[ -d $(dir $@) ] || mkdir -p $(dir $@)
msgfmt -c --output-file=$@ $<
$(TOPDIR)/po/%.po: $(TOPDIR)/po/$(notdir $(TARGET)).pot
@echo "Building $@"
@[ -d $(dir $@) ] || mkdir -p $(dir $@)
@if [ -f $@ ]; \
then \
msgmerge --backup=off -qU $@ $< && touch $@; \
else \
msginit -i $< -l $*.UTF-8 -o $@; \
fi
$(TOPDIR)/po/$(notdir $(TARGET)).pot: $(CFILES) $(CPPFILES) $(CXXFILES)
@echo "Building $@"
@[ -d $(dir $@) ] || mkdir -p $(dir $@)
xgettext -o $@ $^ -k_ -c -s \
--from-code="UTF-8" \
--copyright-holder="Michael Theall" \
--package-name="$(APP_TITLE)" \
--package-version="$(APP_DESCRIPTION)" \
--msgid-bugs-address="pigman46@gmail.com"
clean: clean-mo
clean-mo:
@$(RM) $(MO_FILES)

View File

@ -7,11 +7,12 @@ CXXFILES := $(wildcard source/*.cpp source/imgui/*.cpp source/linux/*.cpp)
OFILES := $(patsubst source/%,$(BUILD)/%,$(CFILES:.c=.c.o))
OXXFILES := $(patsubst source/%,$(BUILD)/%,$(CXXFILES:.cpp=.cpp.o))
CPPFLAGS := -g -Wall -pthread -Iinclude -Isource/linux \
CPPFLAGS := -g -O0 -Wall -pthread -Iinclude -Isource/linux \
`pkg-config --cflags gl glfw3` \
-DSTATUS_STRING="\"ftpd v$(VERSION)\"" \
-DIMGUI_DISABLE_INCLUDE_IMCONFIG_H=1 \
-DIMGUI_IMPL_OPENGL_LOADER_GLAD=1 \
-D"_(x)=getText(x)" \
-DFTPDCONFIG="\"ftpd.cfg\""
CFLAGS := $(CPPFLAGS)
CXXFLAGS := $(CPPFLAGS) -std=gnu++17

View File

@ -47,6 +47,7 @@ CFLAGS := -g -Wall $(OPTIMIZE) \
$(ARCH) $(INCLUDE) -DARM9 -DNDS \
-DSTATUS_STRING="\"ftpd v$(VERSION)\"" \
-DIMGUI_DISABLE_INCLUDE_IMCONFIG_H=1 \
-D"_(x)=getText(x)" \
-DNO_IPV6 -DCLASSIC -DFTPDCONFIG="\"/config/ftpd/ftpd.cfg\""
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++17
ASFLAGS := -g $(ARCH)

View File

@ -44,6 +44,7 @@ APP_VERSION := $(VERSION)
SOURCES := source source/switch
DATA := data
INCLUDES := include
ROMFS := switch/romfs
ifeq ($(strip $(CLASSIC)),)
APP_TITLE := ftpd pro $(VERSION)
@ -51,7 +52,6 @@ TARGET := switch/ftpd
BUILD := switch/build
SOURCES += source/imgui
GRAPHICS := switch/gfx
ROMFS := switch/romfs
else
APP_TITLE := ftpd classic $(VERSION)
TARGET := switch-classic/ftpd-classic
@ -74,6 +74,7 @@ CFLAGS := -g -Wall -Wno-narrowing $(OPTIMIZE) \
CFLAGS += $(INCLUDE) -D__SWITCH__ \
-DSTATUS_STRING="\"ftpd v$(VERSION)\"" \
-DIMGUI_DISABLE_INCLUDE_IMCONFIG_H=1 \
-D"_(x)=getText(x)" \
-DFTPDCONFIG="\"/config/ftpd/ftpd.cfg\"" \
`$(PREFIX)pkg-config --cflags libzstd`
@ -315,3 +316,5 @@ $(OFILES_SRC) : $(HFILES_BIN)
#---------------------------------------------------------------------------------------
endif
#---------------------------------------------------------------------------------------
include $(TOPDIR)/Makefile.i18n

View File

@ -77,7 +77,7 @@ public:
/// \brief Seek to file position
/// \param pos_ File position
/// \param origin_ Reference position (\sa std::fseek)
std::make_signed_t<std::size_t> seek (std::size_t pos_, int origin_);
std::make_signed_t<std::size_t> seek (std::size_t pos_, int origin_ = SEEK_SET);
/// \brief Read data
/// \param buffer_ Output buffer

View File

@ -51,6 +51,9 @@ public:
/// \param path_ Path to config file
bool save (char const *path_);
/// \brief Get language
std::string const &language () const;
/// \brief Get user
std::string const &user () const;
@ -77,6 +80,10 @@ public:
std::string const &passphrase () const;
#endif
/// \brief Set language
/// \param language_ Language to set
void setLanguage (std::string const &language_);
/// \brief Set user
/// \param user_ User
void setUser (std::string const &user_);
@ -121,6 +128,9 @@ private:
mutable platform::Mutex m_lock;
#endif
/// \brief Language
std::string m_language;
/// \brief Username
std::string m_user;

View File

@ -119,15 +119,14 @@ private:
/// \brief Whether to show about window
bool m_showAbout = false;
/// \brief Language setting
unsigned m_languageSetting;
/// \brief User name setting
std::string m_userSetting;
/// \brief Password setting
std::string m_passSetting;
/// \brief Port setting
std::uint16_t m_portSetting;
#ifdef _3DS
/// \brief getMTime setting
bool m_getMTimeSetting;

29
include/gettext.h Normal file
View File

@ -0,0 +1,29 @@
// ftpd is a server implementation based on the following:
// - RFC 959 (https://tools.ietf.org/html/rfc959)
// - RFC 3659 (https://tools.ietf.org/html/rfc3659)
// - suggested implementation details from https://cr.yp.to/ftp/filesystem.html
//
// Copyright (C) 2020 Michael Theall
//
// 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 <https://www.gnu.org/licenses/>.
#pragma once
/// \brief Set language for getText
/// \param language_ Language to set
void setLanguage (char const *language_);
/// \brief Translate message
/// \param text_ Text to translate
__attribute__ ((__format_arg__ (1))) char const *getText (char const *text_);

201
po/de_DE/ftpd.po Normal file
View File

@ -0,0 +1,201 @@
# German translations for ftpd pro package.
# Copyright (C) 2020 Michael Theall
# This file is distributed under the same license as the ftpd pro package.
# Michael Theall <pigman46@gmail.com>, 2020.
#
msgid ""
msgstr ""
"Project-Id-Version: ftpd pro v3.0.0\n"
"Report-Msgid-Bugs-To: pigman46@gmail.com\n"
"POT-Creation-Date: 2021-06-13 11:14-0500\n"
"PO-Revision-Date: 2020-06-03 21:21-0500\n"
"Last-Translator: Michael Theall <pigman46@gmail.com>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
"Language: de_DE/ftpd\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:359
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:422
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:607
msgid "About"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:78
#, c-format
msgid "Accepted connection from [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:500
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:520
msgid "Apply"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:503
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:526
msgid "Cancel"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:42
#, c-format
msgid "Closing connection to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:567
#: /home/mtheall/workspace/ftpd/source/socket.cpp:155
#, c-format
msgid "Connected to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:148
#, c-format
msgid "Connecting to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:480
msgid "Enable Access Point"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1398
msgid "Exceeded command buffer size\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:563
msgid "Failed to save config\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:476
msgid "Get mtime"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:444
msgid "Language"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:2260
#, c-format
msgid "Listening on [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:208
msgid "Logs"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:353
msgid "Menu"
msgstr ""
#. TRANSLATORS: \xee\x80\x83 (Y button)
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:351
msgid "Menu "
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1556
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1587
msgid "Not enough space for response\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:617
msgid "OK"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:490
msgid "Passphrase"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:462
msgid "Password"
msgstr ""
#. peer closed connection
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1413
msgid "Peer closed connection\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:614
#, c-format
msgid "Platform: %s"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:467
msgid "Port"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:615
#, c-format
msgid "Renderer: %s"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:502
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:524
msgid "Reset"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:482
msgid "SSID"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:501
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:522
msgid "Save"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:221
msgid "Sessions"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:356
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:413
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:437
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:441
msgid "Settings"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:319
#, c-format
msgid "Started server at %s\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:39
#, c-format
msgid "Stop listening on [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:338
#, c-format
msgid "Stopped server at %s\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:457
msgid "User"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:125
msgid "Waiting on WiFi"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:190
msgid "Waiting on WiFi..."
msgstr ""
#: /home/mtheall/workspace/ftpd/source/3ds/platform.cpp:214
msgid "WiFi connected\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:246
msgid "no"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:196
msgid "off"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:196
msgid "on"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:246
msgid "yes"
msgstr ""

201
po/en_GB/ftpd.po Normal file
View File

@ -0,0 +1,201 @@
# English translations for ftpd pro package.
# Copyright (C) 2020 Michael Theall
# This file is distributed under the same license as the ftpd pro package.
# Michael Theall <pigman46@gmail.com>, 2020.
#
msgid ""
msgstr ""
"Project-Id-Version: ftpd pro v3.0.0\n"
"Report-Msgid-Bugs-To: pigman46@gmail.com\n"
"POT-Creation-Date: 2021-06-13 11:14-0500\n"
"PO-Revision-Date: 2020-06-03 21:21-0500\n"
"Last-Translator: Michael Theall <pigman46@gmail.com>\n"
"Language-Team: English\n"
"Language: en_GB/ftpd\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:359
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:422
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:607
msgid "About"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:78
#, c-format
msgid "Accepted connection from [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:500
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:520
msgid "Apply"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:503
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:526
msgid "Cancel"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:42
#, c-format
msgid "Closing connection to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:567
#: /home/mtheall/workspace/ftpd/source/socket.cpp:155
#, c-format
msgid "Connected to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:148
#, c-format
msgid "Connecting to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:480
msgid "Enable Access Point"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1398
msgid "Exceeded command buffer size\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:563
msgid "Failed to save config\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:476
msgid "Get mtime"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:444
msgid "Language"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:2260
#, c-format
msgid "Listening on [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:208
msgid "Logs"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:353
msgid "Menu"
msgstr ""
#. TRANSLATORS: \xee\x80\x83 (Y button)
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:351
msgid "Menu "
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1556
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1587
msgid "Not enough space for response\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:617
msgid "OK"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:490
msgid "Passphrase"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:462
msgid "Password"
msgstr ""
#. peer closed connection
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1413
msgid "Peer closed connection\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:614
#, c-format
msgid "Platform: %s"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:467
msgid "Port"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:615
#, c-format
msgid "Renderer: %s"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:502
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:524
msgid "Reset"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:482
msgid "SSID"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:501
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:522
msgid "Save"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:221
msgid "Sessions"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:356
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:413
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:437
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:441
msgid "Settings"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:319
#, c-format
msgid "Started server at %s\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:39
#, c-format
msgid "Stop listening on [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:338
#, c-format
msgid "Stopped server at %s\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:457
msgid "User"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:125
msgid "Waiting on WiFi"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:190
msgid "Waiting on WiFi..."
msgstr ""
#: /home/mtheall/workspace/ftpd/source/3ds/platform.cpp:214
msgid "WiFi connected\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:246
msgid "no"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:196
msgid "off"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:196
msgid "on"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:246
msgid "yes"
msgstr ""

201
po/en_US/ftpd.po Normal file
View File

@ -0,0 +1,201 @@
# English translations for ftpd pro package.
# Copyright (C) 2020 Michael Theall
# This file is distributed under the same license as the ftpd pro package.
# Michael Theall <pigman46@gmail.com>, 2020.
#
msgid ""
msgstr ""
"Project-Id-Version: ftpd pro v3.0.0\n"
"Report-Msgid-Bugs-To: pigman46@gmail.com\n"
"POT-Creation-Date: 2021-06-13 11:14-0500\n"
"PO-Revision-Date: 2020-06-03 21:21-0500\n"
"Last-Translator: Michael Theall <pigman46@gmail.com>\n"
"Language-Team: English\n"
"Language: en_US/ftpd\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:359
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:422
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:607
msgid "About"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:78
#, c-format
msgid "Accepted connection from [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:500
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:520
msgid "Apply"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:503
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:526
msgid "Cancel"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:42
#, c-format
msgid "Closing connection to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:567
#: /home/mtheall/workspace/ftpd/source/socket.cpp:155
#, c-format
msgid "Connected to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:148
#, c-format
msgid "Connecting to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:480
msgid "Enable Access Point"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1398
msgid "Exceeded command buffer size\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:563
msgid "Failed to save config\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:476
msgid "Get mtime"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:444
msgid "Language"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:2260
#, c-format
msgid "Listening on [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:208
msgid "Logs"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:353
msgid "Menu"
msgstr ""
#. TRANSLATORS: \xee\x80\x83 (Y button)
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:351
msgid "Menu "
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1556
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1587
msgid "Not enough space for response\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:617
msgid "OK"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:490
msgid "Passphrase"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:462
msgid "Password"
msgstr ""
#. peer closed connection
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1413
msgid "Peer closed connection\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:614
#, c-format
msgid "Platform: %s"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:467
msgid "Port"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:615
#, c-format
msgid "Renderer: %s"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:502
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:524
msgid "Reset"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:482
msgid "SSID"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:501
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:522
msgid "Save"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:221
msgid "Sessions"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:356
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:413
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:437
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:441
msgid "Settings"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:319
#, c-format
msgid "Started server at %s\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:39
#, c-format
msgid "Stop listening on [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:338
#, c-format
msgid "Stopped server at %s\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:457
msgid "User"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:125
msgid "Waiting on WiFi"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:190
msgid "Waiting on WiFi..."
msgstr ""
#: /home/mtheall/workspace/ftpd/source/3ds/platform.cpp:214
msgid "WiFi connected\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:246
msgid "no"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:196
msgid "off"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:196
msgid "on"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:246
msgid "yes"
msgstr ""

201
po/es_ES/ftpd.po Normal file
View File

@ -0,0 +1,201 @@
# Spanish translations for ftpd pro package.
# Copyright (C) 2020 Michael Theall
# This file is distributed under the same license as the ftpd pro package.
# Michael Theall <pigman46@gmail.com>, 2020.
#
msgid ""
msgstr ""
"Project-Id-Version: ftpd pro v3.0.0\n"
"Report-Msgid-Bugs-To: pigman46@gmail.com\n"
"POT-Creation-Date: 2021-06-13 11:14-0500\n"
"PO-Revision-Date: 2020-06-03 21:21-0500\n"
"Last-Translator: Michael Theall <pigman46@gmail.com>\n"
"Language-Team: Spanish <es@tp.org.es>\n"
"Language: es_ES/ftpd\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:359
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:422
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:607
msgid "About"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:78
#, c-format
msgid "Accepted connection from [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:500
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:520
msgid "Apply"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:503
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:526
msgid "Cancel"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:42
#, c-format
msgid "Closing connection to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:567
#: /home/mtheall/workspace/ftpd/source/socket.cpp:155
#, c-format
msgid "Connected to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:148
#, c-format
msgid "Connecting to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:480
msgid "Enable Access Point"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1398
msgid "Exceeded command buffer size\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:563
msgid "Failed to save config\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:476
msgid "Get mtime"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:444
msgid "Language"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:2260
#, c-format
msgid "Listening on [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:208
msgid "Logs"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:353
msgid "Menu"
msgstr ""
#. TRANSLATORS: \xee\x80\x83 (Y button)
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:351
msgid "Menu "
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1556
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1587
msgid "Not enough space for response\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:617
msgid "OK"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:490
msgid "Passphrase"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:462
msgid "Password"
msgstr ""
#. peer closed connection
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1413
msgid "Peer closed connection\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:614
#, c-format
msgid "Platform: %s"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:467
msgid "Port"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:615
#, c-format
msgid "Renderer: %s"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:502
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:524
msgid "Reset"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:482
msgid "SSID"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:501
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:522
msgid "Save"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:221
msgid "Sessions"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:356
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:413
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:437
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:441
msgid "Settings"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:319
#, c-format
msgid "Started server at %s\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:39
#, c-format
msgid "Stop listening on [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:338
#, c-format
msgid "Stopped server at %s\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:457
msgid "User"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:125
msgid "Waiting on WiFi"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:190
msgid "Waiting on WiFi..."
msgstr ""
#: /home/mtheall/workspace/ftpd/source/3ds/platform.cpp:214
msgid "WiFi connected\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:246
msgid "no"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:196
msgid "off"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:196
msgid "on"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:246
msgid "yes"
msgstr ""

201
po/fr_FR/ftpd.po Normal file
View File

@ -0,0 +1,201 @@
# French translations for ftpd pro package.
# Copyright (C) 2020 Michael Theall
# This file is distributed under the same license as the ftpd pro package.
# Michael Theall <pigman46@gmail.com>, 2020.
#
msgid ""
msgstr ""
"Project-Id-Version: ftpd pro v3.0.0\n"
"Report-Msgid-Bugs-To: pigman46@gmail.com\n"
"POT-Creation-Date: 2021-06-13 11:14-0500\n"
"PO-Revision-Date: 2020-06-03 21:21-0500\n"
"Last-Translator: Michael Theall <pigman46@gmail.com>\n"
"Language-Team: French <traduc@traduc.org>\n"
"Language: fr_FR/ftpd\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:359
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:422
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:607
msgid "About"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:78
#, c-format
msgid "Accepted connection from [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:500
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:520
msgid "Apply"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:503
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:526
msgid "Cancel"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:42
#, c-format
msgid "Closing connection to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:567
#: /home/mtheall/workspace/ftpd/source/socket.cpp:155
#, c-format
msgid "Connected to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:148
#, c-format
msgid "Connecting to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:480
msgid "Enable Access Point"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1398
msgid "Exceeded command buffer size\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:563
msgid "Failed to save config\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:476
msgid "Get mtime"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:444
msgid "Language"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:2260
#, c-format
msgid "Listening on [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:208
msgid "Logs"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:353
msgid "Menu"
msgstr ""
#. TRANSLATORS: \xee\x80\x83 (Y button)
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:351
msgid "Menu "
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1556
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1587
msgid "Not enough space for response\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:617
msgid "OK"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:490
msgid "Passphrase"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:462
msgid "Password"
msgstr ""
#. peer closed connection
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1413
msgid "Peer closed connection\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:614
#, c-format
msgid "Platform: %s"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:467
msgid "Port"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:615
#, c-format
msgid "Renderer: %s"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:502
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:524
msgid "Reset"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:482
msgid "SSID"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:501
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:522
msgid "Save"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:221
msgid "Sessions"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:356
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:413
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:437
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:441
msgid "Settings"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:319
#, c-format
msgid "Started server at %s\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:39
#, c-format
msgid "Stop listening on [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:338
#, c-format
msgid "Stopped server at %s\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:457
msgid "User"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:125
msgid "Waiting on WiFi"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:190
msgid "Waiting on WiFi..."
msgstr ""
#: /home/mtheall/workspace/ftpd/source/3ds/platform.cpp:214
msgid "WiFi connected\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:246
msgid "no"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:196
msgid "off"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:196
msgid "on"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:246
msgid "yes"
msgstr ""

201
po/ftpd.pot Normal file
View File

@ -0,0 +1,201 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Michael Theall
# This file is distributed under the same license as the ftpd pro package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: ftpd pro v3.1.0\n"
"Report-Msgid-Bugs-To: pigman46@gmail.com\n"
"POT-Creation-Date: 2021-06-13 11:14-0500\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"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:359
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:422
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:607
msgid "About"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:78
#, c-format
msgid "Accepted connection from [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:500
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:520
msgid "Apply"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:503
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:526
msgid "Cancel"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:42
#, c-format
msgid "Closing connection to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:567
#: /home/mtheall/workspace/ftpd/source/socket.cpp:155
#, c-format
msgid "Connected to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:148
#, c-format
msgid "Connecting to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:480
msgid "Enable Access Point"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1398
msgid "Exceeded command buffer size\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:563
msgid "Failed to save config\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:476
msgid "Get mtime"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:444
msgid "Language"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:2260
#, c-format
msgid "Listening on [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:208
msgid "Logs"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:353
msgid "Menu"
msgstr ""
#. TRANSLATORS: \xee\x80\x83 (Y button)
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:351
msgid "Menu "
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1556
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1587
msgid "Not enough space for response\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:617
msgid "OK"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:490
msgid "Passphrase"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:462
msgid "Password"
msgstr ""
#. peer closed connection
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1413
msgid "Peer closed connection\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:614
#, c-format
msgid "Platform: %s"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:467
msgid "Port"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:615
#, c-format
msgid "Renderer: %s"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:502
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:524
msgid "Reset"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:482
msgid "SSID"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:501
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:522
msgid "Save"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:221
msgid "Sessions"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:356
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:413
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:437
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:441
msgid "Settings"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:319
#, c-format
msgid "Started server at %s\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:39
#, c-format
msgid "Stop listening on [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:338
#, c-format
msgid "Stopped server at %s\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:457
msgid "User"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:125
msgid "Waiting on WiFi"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:190
msgid "Waiting on WiFi..."
msgstr ""
#: /home/mtheall/workspace/ftpd/source/3ds/platform.cpp:214
msgid "WiFi connected\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:246
msgid "no"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:196
msgid "off"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:196
msgid "on"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:246
msgid "yes"
msgstr ""

201
po/it_IT/ftpd.po Normal file
View File

@ -0,0 +1,201 @@
# Italian translations for ftpd pro package.
# Copyright (C) 2020 Michael Theall
# This file is distributed under the same license as the ftpd pro package.
# Michael Theall <pigman46@gmail.com>, 2020.
#
msgid ""
msgstr ""
"Project-Id-Version: ftpd pro v3.0.0\n"
"Report-Msgid-Bugs-To: pigman46@gmail.com\n"
"POT-Creation-Date: 2021-06-13 11:14-0500\n"
"PO-Revision-Date: 2020-06-03 21:21-0500\n"
"Last-Translator: Michael Theall <pigman46@gmail.com>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
"Language: it_IT/ftpd\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:359
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:422
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:607
msgid "About"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:78
#, c-format
msgid "Accepted connection from [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:500
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:520
msgid "Apply"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:503
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:526
msgid "Cancel"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:42
#, c-format
msgid "Closing connection to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:567
#: /home/mtheall/workspace/ftpd/source/socket.cpp:155
#, c-format
msgid "Connected to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:148
#, c-format
msgid "Connecting to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:480
msgid "Enable Access Point"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1398
msgid "Exceeded command buffer size\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:563
msgid "Failed to save config\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:476
msgid "Get mtime"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:444
msgid "Language"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:2260
#, c-format
msgid "Listening on [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:208
msgid "Logs"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:353
msgid "Menu"
msgstr ""
#. TRANSLATORS: \xee\x80\x83 (Y button)
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:351
msgid "Menu "
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1556
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1587
msgid "Not enough space for response\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:617
msgid "OK"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:490
msgid "Passphrase"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:462
msgid "Password"
msgstr ""
#. peer closed connection
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1413
msgid "Peer closed connection\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:614
#, c-format
msgid "Platform: %s"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:467
msgid "Port"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:615
#, c-format
msgid "Renderer: %s"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:502
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:524
msgid "Reset"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:482
msgid "SSID"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:501
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:522
msgid "Save"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:221
msgid "Sessions"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:356
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:413
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:437
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:441
msgid "Settings"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:319
#, c-format
msgid "Started server at %s\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:39
#, c-format
msgid "Stop listening on [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:338
#, c-format
msgid "Stopped server at %s\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:457
msgid "User"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:125
msgid "Waiting on WiFi"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:190
msgid "Waiting on WiFi..."
msgstr ""
#: /home/mtheall/workspace/ftpd/source/3ds/platform.cpp:214
msgid "WiFi connected\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:246
msgid "no"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:196
msgid "off"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:196
msgid "on"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:246
msgid "yes"
msgstr ""

201
po/ja_JP/ftpd.po Normal file
View File

@ -0,0 +1,201 @@
# Japanese translations for ftpd pro package.
# Copyright (C) 2020 Michael Theall
# This file is distributed under the same license as the ftpd pro package.
# Michael Theall <pigman46@gmail.com>, 2020.
#
msgid ""
msgstr ""
"Project-Id-Version: ftpd pro v3.0.0\n"
"Report-Msgid-Bugs-To: pigman46@gmail.com\n"
"POT-Creation-Date: 2021-06-13 11:14-0500\n"
"PO-Revision-Date: 2020-06-03 21:22-0500\n"
"Last-Translator: Michael Theall <pigman46@gmail.com>\n"
"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
"Language: ja_JP/ftpd\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:359
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:422
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:607
msgid "About"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:78
#, c-format
msgid "Accepted connection from [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:500
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:520
msgid "Apply"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:503
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:526
msgid "Cancel"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:42
#, c-format
msgid "Closing connection to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:567
#: /home/mtheall/workspace/ftpd/source/socket.cpp:155
#, c-format
msgid "Connected to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:148
#, c-format
msgid "Connecting to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:480
msgid "Enable Access Point"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1398
msgid "Exceeded command buffer size\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:563
msgid "Failed to save config\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:476
msgid "Get mtime"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:444
msgid "Language"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:2260
#, c-format
msgid "Listening on [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:208
msgid "Logs"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:353
msgid "Menu"
msgstr ""
#. TRANSLATORS: \xee\x80\x83 (Y button)
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:351
msgid "Menu "
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1556
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1587
msgid "Not enough space for response\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:617
msgid "OK"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:490
msgid "Passphrase"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:462
msgid "Password"
msgstr ""
#. peer closed connection
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1413
msgid "Peer closed connection\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:614
#, c-format
msgid "Platform: %s"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:467
msgid "Port"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:615
#, c-format
msgid "Renderer: %s"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:502
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:524
msgid "Reset"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:482
msgid "SSID"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:501
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:522
msgid "Save"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:221
msgid "Sessions"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:356
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:413
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:437
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:441
msgid "Settings"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:319
#, c-format
msgid "Started server at %s\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:39
#, c-format
msgid "Stop listening on [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:338
#, c-format
msgid "Stopped server at %s\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:457
msgid "User"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:125
msgid "Waiting on WiFi"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:190
msgid "Waiting on WiFi..."
msgstr ""
#: /home/mtheall/workspace/ftpd/source/3ds/platform.cpp:214
msgid "WiFi connected\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:246
msgid "no"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:196
msgid "off"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:196
msgid "on"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:246
msgid "yes"
msgstr ""

201
po/nl_NL/ftpd.po Normal file
View File

@ -0,0 +1,201 @@
# Dutch translations for ftpd pro package.
# Copyright (C) 2020 Michael Theall
# This file is distributed under the same license as the ftpd pro package.
# Michael Theall <pigman46@gmail.com>, 2020.
#
msgid ""
msgstr ""
"Project-Id-Version: ftpd pro v3.0.0\n"
"Report-Msgid-Bugs-To: pigman46@gmail.com\n"
"POT-Creation-Date: 2021-06-13 11:14-0500\n"
"PO-Revision-Date: 2020-06-03 21:22-0500\n"
"Last-Translator: Michael Theall <pigman46@gmail.com>\n"
"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
"Language: nl_NL/ftpd\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:359
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:422
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:607
msgid "About"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:78
#, c-format
msgid "Accepted connection from [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:500
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:520
msgid "Apply"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:503
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:526
msgid "Cancel"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:42
#, c-format
msgid "Closing connection to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:567
#: /home/mtheall/workspace/ftpd/source/socket.cpp:155
#, c-format
msgid "Connected to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:148
#, c-format
msgid "Connecting to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:480
msgid "Enable Access Point"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1398
msgid "Exceeded command buffer size\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:563
msgid "Failed to save config\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:476
msgid "Get mtime"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:444
msgid "Language"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:2260
#, c-format
msgid "Listening on [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:208
msgid "Logs"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:353
msgid "Menu"
msgstr ""
#. TRANSLATORS: \xee\x80\x83 (Y button)
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:351
msgid "Menu "
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1556
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1587
msgid "Not enough space for response\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:617
msgid "OK"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:490
msgid "Passphrase"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:462
msgid "Password"
msgstr ""
#. peer closed connection
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1413
msgid "Peer closed connection\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:614
#, c-format
msgid "Platform: %s"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:467
msgid "Port"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:615
#, c-format
msgid "Renderer: %s"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:502
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:524
msgid "Reset"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:482
msgid "SSID"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:501
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:522
msgid "Save"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:221
msgid "Sessions"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:356
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:413
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:437
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:441
msgid "Settings"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:319
#, c-format
msgid "Started server at %s\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:39
#, c-format
msgid "Stop listening on [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:338
#, c-format
msgid "Stopped server at %s\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:457
msgid "User"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:125
msgid "Waiting on WiFi"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:190
msgid "Waiting on WiFi..."
msgstr ""
#: /home/mtheall/workspace/ftpd/source/3ds/platform.cpp:214
msgid "WiFi connected\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:246
msgid "no"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:196
msgid "off"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:196
msgid "on"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:246
msgid "yes"
msgstr ""

201
po/pt_PT/ftpd.po Normal file
View File

@ -0,0 +1,201 @@
# Portuguese translations for ftpd pro package.
# Copyright (C) 2020 Michael Theall
# This file is distributed under the same license as the ftpd pro package.
# Michael Theall <pigman46@gmail.com>, 2020.
#
msgid ""
msgstr ""
"Project-Id-Version: ftpd pro v3.0.0\n"
"Report-Msgid-Bugs-To: pigman46@gmail.com\n"
"POT-Creation-Date: 2021-06-13 11:14-0500\n"
"PO-Revision-Date: 2020-06-03 21:22-0500\n"
"Last-Translator: Michael Theall <pigman46@gmail.com>\n"
"Language-Team: Portuguese <translation-team-pt@lists.sourceforge.net>\n"
"Language: pt_PT/ftpd\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:359
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:422
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:607
msgid "About"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:78
#, c-format
msgid "Accepted connection from [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:500
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:520
msgid "Apply"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:503
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:526
msgid "Cancel"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:42
#, c-format
msgid "Closing connection to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:567
#: /home/mtheall/workspace/ftpd/source/socket.cpp:155
#, c-format
msgid "Connected to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:148
#, c-format
msgid "Connecting to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:480
msgid "Enable Access Point"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1398
msgid "Exceeded command buffer size\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:563
msgid "Failed to save config\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:476
msgid "Get mtime"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:444
msgid "Language"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:2260
#, c-format
msgid "Listening on [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:208
msgid "Logs"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:353
msgid "Menu"
msgstr ""
#. TRANSLATORS: \xee\x80\x83 (Y button)
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:351
msgid "Menu "
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1556
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1587
msgid "Not enough space for response\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:617
msgid "OK"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:490
msgid "Passphrase"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:462
msgid "Password"
msgstr ""
#. peer closed connection
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1413
msgid "Peer closed connection\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:614
#, c-format
msgid "Platform: %s"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:467
msgid "Port"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:615
#, c-format
msgid "Renderer: %s"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:502
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:524
msgid "Reset"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:482
msgid "SSID"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:501
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:522
msgid "Save"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:221
msgid "Sessions"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:356
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:413
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:437
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:441
msgid "Settings"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:319
#, c-format
msgid "Started server at %s\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:39
#, c-format
msgid "Stop listening on [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:338
#, c-format
msgid "Stopped server at %s\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:457
msgid "User"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:125
msgid "Waiting on WiFi"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:190
msgid "Waiting on WiFi..."
msgstr ""
#: /home/mtheall/workspace/ftpd/source/3ds/platform.cpp:214
msgid "WiFi connected\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:246
msgid "no"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:196
msgid "off"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:196
msgid "on"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:246
msgid "yes"
msgstr ""

202
po/ru_RU/ftpd.po Normal file
View File

@ -0,0 +1,202 @@
# Russian translations for ftpd pro package.
# Copyright (C) 2020 Michael Theall
# This file is distributed under the same license as the ftpd pro package.
# Michael Theall <pigman46@gmail.com>, 2020.
#
msgid ""
msgstr ""
"Project-Id-Version: ftpd pro v3.0.0\n"
"Report-Msgid-Bugs-To: pigman46@gmail.com\n"
"POT-Creation-Date: 2021-06-13 11:14-0500\n"
"PO-Revision-Date: 2020-06-03 21:22-0500\n"
"Last-Translator: Michael Theall <pigman46@gmail.com>\n"
"Language-Team: Russian <gnu@d07.ru>\n"
"Language: ru_RU/ftpd\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:359
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:422
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:607
msgid "About"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:78
#, c-format
msgid "Accepted connection from [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:500
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:520
msgid "Apply"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:503
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:526
msgid "Cancel"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:42
#, c-format
msgid "Closing connection to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:567
#: /home/mtheall/workspace/ftpd/source/socket.cpp:155
#, c-format
msgid "Connected to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:148
#, c-format
msgid "Connecting to [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:480
msgid "Enable Access Point"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1398
msgid "Exceeded command buffer size\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:563
msgid "Failed to save config\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:476
msgid "Get mtime"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:444
msgid "Language"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:2260
#, c-format
msgid "Listening on [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:208
msgid "Logs"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:353
msgid "Menu"
msgstr ""
#. TRANSLATORS: \xee\x80\x83 (Y button)
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:351
msgid "Menu "
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1556
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1587
msgid "Not enough space for response\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:617
msgid "OK"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:490
msgid "Passphrase"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:462
msgid "Password"
msgstr ""
#. peer closed connection
#: /home/mtheall/workspace/ftpd/source/ftpSession.cpp:1413
msgid "Peer closed connection\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:614
#, c-format
msgid "Platform: %s"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:467
msgid "Port"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:615
#, c-format
msgid "Renderer: %s"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:502
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:524
msgid "Reset"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:482
msgid "SSID"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:501
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:522
msgid "Save"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:221
msgid "Sessions"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:356
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:413
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:437
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:441
msgid "Settings"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:319
#, c-format
msgid "Started server at %s\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:39
#, c-format
msgid "Stop listening on [%s]:%u\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:338
#, c-format
msgid "Stopped server at %s\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:457
msgid "User"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:125
msgid "Waiting on WiFi"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/ftpServer.cpp:190
msgid "Waiting on WiFi..."
msgstr ""
#: /home/mtheall/workspace/ftpd/source/3ds/platform.cpp:214
msgid "WiFi connected\n"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:246
msgid "no"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:196
msgid "off"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:196
msgid "on"
msgstr ""
#: /home/mtheall/workspace/ftpd/source/socket.cpp:246
msgid "yes"
msgstr ""

View File

@ -22,6 +22,7 @@
#include "fs.h"
#include "ftpServer.h"
#include "gettext.h"
#include "log.h"
#include "imgui_citro3d.h"
@ -210,7 +211,7 @@ void startNetwork ()
return;
s_socuActive = true;
info ("Wifi connected\n");
info (_ ("WiFi connected\n"));
}
/// \brief Draw citro3d logo

View File

@ -21,6 +21,7 @@
#include "ftpConfig.h"
#include "fs.h"
#include "gettext.h"
#include "log.h"
#include <sys/stat.h>
@ -147,7 +148,9 @@ UniqueFtpConfig FtpConfig::load (char const *const path_)
continue;
}
if (key == "user")
if (key == "language")
config->m_language = val;
else if (key == "user")
config->m_user = val;
else if (key == "pass")
config->m_pass = val;
@ -202,6 +205,8 @@ bool FtpConfig::save (char const *const path_)
if (!fp.open (path_, "wb"))
return false;
if (!m_language.empty ())
std::fprintf (fp, "language=%s\n", m_language.c_str ());
if (!m_user.empty ())
std::fprintf (fp, "user=%s\n", m_user.c_str ());
if (!m_pass.empty ())
@ -223,6 +228,11 @@ bool FtpConfig::save (char const *const path_)
return true;
}
std::string const &FtpConfig::language () const
{
return m_language;
}
std::string const &FtpConfig::user () const
{
return m_user;
@ -262,6 +272,12 @@ std::string const &FtpConfig::passphrase () const
}
#endif
void FtpConfig::setLanguage (std::string const &language_)
{
m_language = language_;
::setLanguage (language_.c_str ());
}
void FtpConfig::setUser (std::string const &user_)
{
m_user = user_.substr (0, user_.find_first_of ('\0'));

View File

@ -21,6 +21,7 @@
#include "ftpServer.h"
#include "fs.h"
#include "gettext.h"
#include "licenses.h"
#include "log.h"
#include "platform.h"
@ -69,6 +70,21 @@ platform::Mutex s_lock;
/// \brief Free space string
std::string s_freeSpace;
std::pair<std::string, std::string> const s_languageMap[] = {
// clang-format off
{"Deutsch", "de_DE"},
{"English (US)", "en_US"},
{"English (UK)", "en_GB"},
{"Español", "es_ES"},
{"Français", "fr_FR"},
{"Italiano", "it_IT"},
{"日本語", "ja_JP"},
{"Nederlands", "nl_NL"},
{"Português (Portugal)", "pt_PT"},
{"Русский", "ru_RU"},
// clang-format on
};
}
///////////////////////////////////////////////////////////////////////////
@ -106,7 +122,7 @@ void FtpServer::draw ()
consoleSelect (&g_statusConsole);
std::printf ("\x1b[0;0H\x1b[32;1m%s \x1b[36;1m%s%s",
STATUS_STRING,
m_socket ? m_socket->sockName ().name () : "Waiting on WiFi",
m_socket ? m_socket->sockName ().name () : _ ("Waiting on WiFi"),
m_socket ? port : "");
#ifndef NDS
@ -171,7 +187,7 @@ void FtpServer::draw ()
std::snprintf (title,
sizeof (title),
STATUS_STRING " %s###ftpd",
m_socket ? m_name.c_str () : "Waiting for WiFi...");
m_socket ? m_name.c_str () : _ ("Waiting on WiFi..."));
}
ImGui::Begin (title,
@ -189,7 +205,7 @@ void FtpServer::draw ()
#ifndef _3DS
ImGui::BeginChild (
"Logs", ImVec2 (0, 0.5f * height), false, ImGuiWindowFlags_HorizontalScrollbar);
_ ("Logs"), ImVec2 (0, 0.5f * height), false, ImGuiWindowFlags_HorizontalScrollbar);
#endif
drawLog ();
#ifndef _3DS
@ -202,7 +218,7 @@ void FtpServer::draw ()
// bottom screen
ImGui::SetNextWindowSize (ImVec2 (width * 0.8f, height * 0.5f));
ImGui::SetNextWindowPos (ImVec2 (width * 0.1f, height * 0.5f), ImGuiCond_FirstUseEver);
ImGui::Begin ("Sessions",
ImGui::Begin (_ ("Sessions"),
nullptr,
ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize |
ImGuiWindowFlags_MenuBar);
@ -227,6 +243,7 @@ UniqueFtpServer FtpServer::create ()
updateFreeSpace ();
auto config = FtpConfig::load (FTPDCONFIG);
setLanguage (config->language ().c_str ());
return UniqueFtpServer (new FtpServer (std::move (config)));
}
@ -299,7 +316,7 @@ void FtpServer::handleNetworkFound ()
m_name.resize (std::strlen (name) + 3 + 5);
m_name.resize (std::sprintf (m_name.data (), "[%s]:%u", name, sockName.port ()));
info ("Started server at %s\n", m_name.c_str ());
info (_ ("Started server at %s\n"), m_name.c_str ());
LOCKED (m_socket = std::move (socket));
}
@ -318,7 +335,7 @@ void FtpServer::handleNetworkLost ()
LOCKED (sock = std::move (m_socket));
}
info ("Stopped server at %s\n", m_name.c_str ());
info (_ ("Stopped server at %s\n"), m_name.c_str ());
}
#ifndef CLASSIC
@ -330,15 +347,16 @@ void FtpServer::showMenu ()
if (ImGui::BeginMenuBar ())
{
#if defined(_3DS) || defined(__SWITCH__)
if (ImGui::BeginMenu (u8"Menu \xee\x80\x83")) // Y Button
// TRANSLATORS: \xee\x80\x83 (Y button)
if (ImGui::BeginMenu (_ ("Menu \xee\x80\x83"))) // Y Button
#else
if (ImGui::BeginMenu ("Menu"))
if (ImGui::BeginMenu (_ ("Menu")))
#endif
{
if (ImGui::MenuItem ("Settings"))
if (ImGui::MenuItem (_ ("Settings")))
m_showSettings = true;
if (ImGui::MenuItem ("About"))
if (ImGui::MenuItem (_ ("About")))
m_showAbout = true;
ImGui::EndMenu ();
@ -353,6 +371,22 @@ void FtpServer::showMenu ()
#ifndef NDS
auto const lock = m_config->lockGuard ();
#endif
auto const &language = m_config->language ();
m_languageSetting = std::numeric_limits<unsigned>::max ();
for (unsigned i = 0; i < std::extent_v<decltype (s_languageMap)>; ++i)
{
auto const &code = s_languageMap[i].second;
if (language == code)
{
m_languageSetting = i;
break;
}
// default to English (US)
/// \todo get language from system settings
if (code == "en_US" && m_languageSetting == std::numeric_limits<unsigned>::max ())
m_languageSetting = i;
}
m_userSetting = m_config->user ();
m_userSetting.resize (32);
@ -376,7 +410,7 @@ void FtpServer::showMenu ()
m_passphraseSetting.resize (63);
#endif
ImGui::OpenPopup ("Settings");
ImGui::OpenPopup (_ ("Settings"));
}
showSettings ();
@ -385,7 +419,7 @@ void FtpServer::showMenu ()
if (m_showAbout)
{
if (!prevShowAbout)
ImGui::OpenPopup ("About");
ImGui::OpenPopup (_ ("About"));
showAbout ();
}
@ -400,24 +434,37 @@ void FtpServer::showSettings ()
ImGui::SetNextWindowSize (ImVec2 (width * 0.8f, height * 0.5f));
ImGui::SetNextWindowPos (ImVec2 (width * 0.1f, height * 0.5f));
if (ImGui::BeginPopupModal ("Settings",
if (ImGui::BeginPopupModal (_ ("Settings"),
nullptr,
ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize))
#else
if (ImGui::BeginPopupModal ("Settings", nullptr, ImGuiWindowFlags_AlwaysAutoResize))
if (ImGui::BeginPopupModal (_ ("Settings"), nullptr, ImGuiWindowFlags_AlwaysAutoResize))
#endif
{
ImGui::InputText ("User",
if (ImGui::BeginCombo (_ ("Language"), s_languageMap[m_languageSetting].first.c_str ()))
{
for (unsigned i = 0; i < std::extent_v<decltype (s_languageMap)>; ++i)
{
if (ImGui::Selectable (s_languageMap[i].first.c_str (), i == m_languageSetting))
{
m_languageSetting = i;
ImGui::SetItemDefaultFocus ();
}
}
ImGui::EndCombo ();
}
ImGui::InputText (_ ("User"),
m_userSetting.data (),
m_userSetting.size (),
ImGuiInputTextFlags_AutoSelectAll);
ImGui::InputText ("Pass",
ImGui::InputText (_ ("Password"),
m_passSetting.data (),
m_passSetting.size (),
ImGuiInputTextFlags_AutoSelectAll | ImGuiInputTextFlags_Password);
ImGui::InputScalar ("Port",
ImGui::InputScalar (_ ("Port"),
ImGuiDataType_U16,
&m_portSetting,
nullptr,
@ -426,13 +473,13 @@ void FtpServer::showSettings ()
ImGuiInputTextFlags_AutoSelectAll);
#ifdef _3DS
ImGui::Checkbox ("Get mtime", &m_getMTimeSetting);
ImGui::Checkbox (_ ("Get mtime"), &m_getMTimeSetting);
#endif
#ifdef __SWITCH__
ImGui::Checkbox ("Enable Access Point", &m_enableAPSetting);
ImGui::Checkbox (_ ("Enable Access Point"), &m_enableAPSetting);
ImGui::InputText ("SSID",
ImGui::InputText (_ ("SSID"),
m_ssidSetting.data (),
m_ssidSetting.size (),
ImGuiInputTextFlags_AutoSelectAll);
@ -440,7 +487,7 @@ void FtpServer::showSettings ()
if (ssidError)
ImGui::TextColored (ImVec4 (1.0f, 0.4f, 0.4f, 1.0f), ssidError);
ImGui::InputText ("Passphrase",
ImGui::InputText (_ ("Passphrase"),
m_passphraseSetting.data (),
m_passphraseSetting.size (),
ImGuiInputTextFlags_AutoSelectAll | ImGuiInputTextFlags_Password);
@ -449,19 +496,19 @@ void FtpServer::showSettings ()
ImGui::TextColored (ImVec4 (1.0f, 0.4f, 0.4f, 1.0f), passphraseError);
#endif
static ImVec2 const sizes[] = {
ImGui::CalcTextSize ("Apply"),
ImGui::CalcTextSize ("Save"),
ImGui::CalcTextSize ("Reset"),
ImGui::CalcTextSize ("Cancel"),
ImVec2 const sizes[] = {
ImGui::CalcTextSize (_ ("Apply")),
ImGui::CalcTextSize (_ ("Save")),
ImGui::CalcTextSize (_ ("Reset")),
ImGui::CalcTextSize (_ ("Cancel")),
};
static auto const maxWidth = std::max_element (
auto const maxWidth = std::max_element (
std::begin (sizes), std::end (sizes), [] (auto const &lhs_, auto const &rhs_) {
return lhs_.x < rhs_.x;
})->x;
static auto const maxHeight = std::max_element (
auto const maxHeight = std::max_element (
std::begin (sizes), std::end (sizes), [] (auto const &lhs_, auto const &rhs_) {
return lhs_.y < rhs_.y;
})->y;
@ -470,13 +517,13 @@ void FtpServer::showSettings ()
auto const width = maxWidth + 2 * style.FramePadding.x;
auto const height = maxHeight + 2 * style.FramePadding.y;
auto const apply = ImGui::Button ("Apply", ImVec2 (width, height));
auto const apply = ImGui::Button (_ ("Apply"), ImVec2 (width, height));
ImGui::SameLine ();
auto const save = ImGui::Button ("Save", ImVec2 (width, height));
auto const save = ImGui::Button (_ ("Save"), ImVec2 (width, height));
ImGui::SameLine ();
auto const reset = ImGui::Button ("Reset", ImVec2 (width, height));
auto const reset = ImGui::Button (_ ("Reset"), ImVec2 (width, height));
ImGui::SameLine ();
auto const cancel = ImGui::Button ("Cancel", ImVec2 (width, height));
auto const cancel = ImGui::Button (_ ("Cancel"), ImVec2 (width, height));
if (apply || save)
{
@ -487,6 +534,7 @@ void FtpServer::showSettings ()
auto const lock = m_config->lockGuard ();
#endif
m_config->setLanguage (s_languageMap[m_languageSetting].second);
m_config->setUser (m_userSetting);
m_config->setPass (m_passSetting);
m_config->setPort (m_portSetting);
@ -512,7 +560,7 @@ void FtpServer::showSettings ()
auto const lock = m_config->lockGuard ();
#endif
if (!m_config->save (FTPDCONFIG))
error ("Failed to save config\n");
error (_ ("Failed to save config\n"));
}
if (reset)
@ -556,17 +604,17 @@ void FtpServer::showAbout ()
ImGui::SetNextWindowSize (ImVec2 (width * 0.8f, height * 0.8f));
ImGui::SetNextWindowPos (ImVec2 (width * 0.1f, height * 0.1f));
#endif
if (ImGui::BeginPopupModal ("About",
if (ImGui::BeginPopupModal (_ ("About"),
nullptr,
ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize))
{
ImGui::TextUnformatted (STATUS_STRING);
ImGui::TextWrapped ("Copyright © 2021 Michael Theall, Dave Murphy, TuxSH");
ImGui::Separator ();
ImGui::Text ("Platform: %s", io.BackendPlatformName);
ImGui::Text ("Renderer: %s", io.BackendRendererName);
ImGui::Text (_ ("Platform: %s"), io.BackendPlatformName);
ImGui::Text (_ ("Renderer: %s"), io.BackendRendererName);
if (ImGui::Button ("OK", ImVec2 (100, 0)))
if (ImGui::Button (_ ("OK"), ImVec2 (100, 0)))
{
m_showAbout = false;
ImGui::CloseCurrentPopup ();

View File

@ -21,6 +21,7 @@
#include "ftpSession.h"
#include "ftpServer.h"
#include "gettext.h"
#include "log.h"
#include "platform.h"
@ -563,7 +564,7 @@ bool FtpSession::poll (std::vector<UniqueFtpSession> const &sessions_)
{
// PORT connection completed
auto const &sockName = session->m_dataSocket->peerName ();
info ("Connected to [%s]:%u\n", sockName.name (), sockName.port ());
info (_ ("Connected to [%s]:%u\n"), sockName.name (), sockName.port ());
session->sendResponse ("150 Ready\r\n");
session->setState (State::DATA_TRANSFER, true, false);
@ -1100,7 +1101,8 @@ void FtpSession::xferFile (char const *const args_, XferFileMode const mode_)
if (m_restartPosition != 0)
{
if (m_file.seek (m_restartPosition, SEEK_SET) != 0)
// seek to the REST offset
if (m_file.seek (m_restartPosition) != 0)
{
sendResponse ("450 %s\r\n", std::strerror (errno));
return;
@ -1134,7 +1136,7 @@ void FtpSession::xferFile (char const *const args_, XferFileMode const mode_)
if (m_restartPosition != 0 && !append)
{
// seek to the REST offset
if (m_file.seek (m_restartPosition, SEEK_SET) != 0)
if (m_file.seek (m_restartPosition) != 0)
{
sendResponse ("450 %s\r\n", std::strerror (errno));
return;
@ -1393,7 +1395,7 @@ void FtpSession::readCommand (int const events_)
// prepare to receive data
if (m_commandBuffer.freeSize () == 0)
{
error ("Exceeded command buffer size\n");
error (_ ("Exceeded command buffer size\n"));
closeCommand ();
return;
}
@ -1408,7 +1410,7 @@ void FtpSession::readCommand (int const events_)
if (rc == 0)
{
// peer closed connection
info ("Peer closed connection\n");
info (_ ("Peer closed connection\n"));
closeCommand ();
return;
}
@ -1551,7 +1553,7 @@ void FtpSession::sendResponse (char const *fmt_, ...)
if (static_cast<std::size_t> (rc) > size)
{
error ("Not enough space for response\n");
error (_ ("Not enough space for response\n"));
closeCommand ();
return;
}
@ -1582,7 +1584,7 @@ void FtpSession::sendResponse (std::string_view const response_)
if (response_.size () > size)
{
error ("Not enough space for response\n");
error (_ ("Not enough space for response\n"));
closeCommand ();
return;
}
@ -1689,7 +1691,7 @@ bool FtpSession::listTransfer ()
std::uint64_t mtime = 0;
auto const rc = archive_getmtime (fullPath.c_str (), &mtime);
if (rc != 0)
error ("sdmc_getmtime %s 0x%lx\n", fullPath.c_str (), rc);
error ("archive_getmtime %s 0x%lx\n", fullPath.c_str (), rc);
else
st.st_mtime = mtime;
}
@ -2255,7 +2257,7 @@ void FtpSession::PASV (char const *args_)
auto const &sockName = m_pasvSocket->sockName ();
std::string name = sockName.name ();
auto const port = sockName.port ();
info ("Listening on [%s]:%u\n", name.c_str (), port);
info (_ ("Listening on [%s]:%u\n"), name.c_str (), port);
// send the address in the ftp format
for (auto &c : name)

184
source/gettext.cpp Normal file
View File

@ -0,0 +1,184 @@
// ftpd is a server implementation based on the following:
// - RFC 959 (https://tools.ietf.org/html/rfc959)
// - RFC 3659 (https://tools.ietf.org/html/rfc3659)
// - suggested implementation details from https://cr.yp.to/ftp/filesystem.html
//
// Copyright (C) 2020 Michael Theall
//
// 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 <https://www.gnu.org/licenses/>.
#include "gettext.h"
#include "fs.h"
#include <cerrno>
#include <cinttypes>
#include <cstdint>
#include <cstring>
#include <map>
#include <memory>
#include <string>
#include <vector>
namespace
{
using StringMap = std::map<std::string, std::string>;
using Table = std::vector<std::pair<std::uint32_t, std::uint32_t>>;
StringMap s_translations;
/// \brief Read u32 value
/// \param file_ File to read
/// \param[out] data_ Output data
/// \param le_ Whether little-endian
bool read (fs::File &file_, std::uint32_t &data_, bool const le_)
{
if (!file_.readAll (&data_, sizeof (data_)))
return false;
if (!le_)
data_ = __builtin_bswap32 (data_);
return true;
}
/// \brief Load string table [offset, length]
/// \param file_ File to read
/// \param offset_ Offset to read from
/// \param count_ Number of entries
/// \param le_ Whether little-endian
Table loadTable (fs::File &file_, off_t const offset_, std::uint32_t const count_, bool const le_)
{
if (file_.seek (offset_) != 0)
return {};
Table table;
for (std::uint32_t i = 0; i < count_; ++i)
{
std::uint32_t length;
if (!read (file_, length, le_))
return {};
std::uint32_t offset;
if (!read (file_, offset, le_))
return {};
table.emplace_back (std::make_pair (offset, length));
}
return table;
}
/// \brief Load string
/// \param file_ File to read
/// \param offset_ String offset
/// \param length_ String length
std::string loadString (fs::File &file_, std::uint32_t const offset_, std::uint32_t const length_)
{
if (length_ == 0)
return {};
if (file_.seek (offset_) != 0)
return {};
std::string str (length_, 0);
if (!file_.readAll (&str[0], length_))
return {};
return str;
}
/// \brief Load translations
/// \param language_ Language to load
void loadTranslations (char const *const language_)
{
char path[32];
std::sprintf (path, "romfs:/locale/%s/ftpd.mo", language_);
fs::File file;
if (!file.open (path))
return;
std::uint32_t magic;
if (!read (file, magic, true))
return;
bool le;
if (magic == 0x950412DE)
le = true;
else if (magic == 0xDE120495)
le = false;
else
return;
std::uint32_t version;
if (!read (file, version, le) || version != 0)
return;
std::uint32_t numStrings;
if (!read (file, numStrings, le))
return;
std::uint32_t originalOffset;
if (!read (file, originalOffset, le))
return;
std::uint32_t translationOffset;
if (!read (file, translationOffset, le))
return;
std::uint32_t hashSize;
if (!read (file, hashSize, le))
return;
std::uint32_t hashOffset;
if (!read (file, hashOffset, le))
return;
auto originalTable = loadTable (file, originalOffset, numStrings, le);
if (originalTable.size () != numStrings)
return;
auto translationTable = loadTable (file, translationOffset, numStrings, le);
if (translationTable.size () != numStrings)
return;
StringMap strings;
for (std::uint32_t i = 0; i < numStrings; ++i)
{
auto originalString = loadString (file, originalTable[i].first, originalTable[i].second);
auto translationString =
loadString (file, translationTable[i].first, translationTable[i].second);
strings.emplace (std::make_pair (originalString, translationString));
}
std::swap (strings, s_translations);
}
}
void setLanguage (char const *const language_)
{
loadTranslations (language_);
}
char const *getText (char const *const text_)
{
auto it = s_translations.find (text_);
if (it != std::end (s_translations) && !it->second.empty ())
return it->second.c_str ();
return text_;
}

View File

@ -20,6 +20,7 @@
#include "socket.h"
#include "gettext.h"
#include "log.h"
#include <fcntl.h>
@ -35,10 +36,10 @@
Socket::~Socket ()
{
if (m_listening)
info ("Stop listening on [%s]:%u\n", m_sockName.name (), m_sockName.port ());
info (_ ("Stop listening on [%s]:%u\n"), m_sockName.name (), m_sockName.port ());
if (m_connected)
info ("Closing connection to [%s]:%u\n", m_peerName.name (), m_peerName.port ());
info (_ ("Closing connection to [%s]:%u\n"), m_peerName.name (), m_peerName.port ());
#ifdef NDS
if (::closesocket (m_fd) != 0)
@ -74,7 +75,7 @@ UniqueSocket Socket::accept ()
return nullptr;
}
info ("Accepted connection from [%s]:%u\n", addr.name (), addr.port ());
info (_ ("Accepted connection from [%s]:%u\n"), addr.name (), addr.port ());
return UniqueSocket (new Socket (fd, m_sockName, addr));
}
@ -144,14 +145,14 @@ bool Socket::connect (SockAddr const &addr_)
{
m_peerName = addr_;
m_connected = true;
info ("Connecting to [%s]:%u\n", addr_.name (), addr_.port ());
info (_ ("Connecting to [%s]:%u\n"), addr_.name (), addr_.port ());
}
return false;
}
m_peerName = addr_;
m_connected = true;
info ("Connected to [%s]:%u\n", addr_.name (), addr_.port ());
info (_ ("Connected to [%s]:%u\n"), addr_.name (), addr_.port ());
return true;
}
@ -192,7 +193,7 @@ bool Socket::setLinger (bool const enable_, std::chrono::seconds const time_)
if (rc != 0)
{
error ("setsockopt(SO_LINGER, %s, %lus): %s\n",
enable_ ? "on" : "off",
enable_ ? _ ("on") : _ ("off"),
static_cast<unsigned long> (time_.count ()),
std::strerror (errno));
return false;
@ -241,7 +242,9 @@ bool Socket::setReuseAddress (bool const reuse_)
int const reuse = reuse_;
if (::setsockopt (m_fd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof (reuse)) != 0)
{
error ("setsockopt(SO_REUSEADDR, %s): %s\n", reuse_ ? "yes" : "no", std::strerror (errno));
error ("setsockopt(SO_REUSEADDR, %s): %s\n",
reuse_ ? _ ("yes") : _ ("no"),
std::strerror (errno));
return false;
}