├── resources
├── images
│ ├── icon.png
│ ├── plus-icon.png
│ ├── folder-icon.png
│ ├── screenshot1.jpg
│ ├── screenshot2.jpg
│ ├── screenshot3.jpg
│ ├── screenshot4.jpg
│ ├── screenshot5.jpg
│ └── screenshot6.jpg
├── skins
│ └── default
│ │ ├── media
│ │ ├── dialog-bg.png
│ │ ├── dialogbutton-fo.png
│ │ ├── background-black.png
│ │ └── dialogbutton-nofo.png
│ │ └── 1080i
│ │ └── script-backup-qrcode.xml
├── lib
│ ├── tinyurl.py
│ ├── extractor.py
│ ├── progressbar.py
│ ├── utils.py
│ ├── guisettings.py
│ ├── authorizers.py
│ ├── scheduler.py
│ ├── vfs.py
│ ├── advanced_editor.py
│ └── croniter.py
├── data
│ └── default_files.json
└── language
│ ├── resource.language.kn_in
│ └── strings.po
│ ├── resource.language.mi
│ └── strings.po
│ ├── resource.language.tg_tj
│ └── strings.po
│ ├── resource.language.cy_gb
│ └── strings.po
│ ├── resource.language.os_os
│ └── strings.po
│ ├── resource.language.mn_mn
│ └── strings.po
│ ├── resource.language.te_in
│ └── strings.po
│ ├── resource.language.ast_es
│ └── strings.po
│ ├── resource.language.ml_in
│ └── strings.po
│ ├── resource.language.si_lk
│ └── strings.po
│ ├── resource.language.oc_fr
│ └── strings.po
│ └── resource.language.zh_tw
│ └── strings.po
├── service.py
├── LICENSE.txt
└── default.py
/resources/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robweber/xbmcbackup/HEAD/resources/images/icon.png
--------------------------------------------------------------------------------
/resources/images/plus-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robweber/xbmcbackup/HEAD/resources/images/plus-icon.png
--------------------------------------------------------------------------------
/resources/images/folder-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robweber/xbmcbackup/HEAD/resources/images/folder-icon.png
--------------------------------------------------------------------------------
/resources/images/screenshot1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robweber/xbmcbackup/HEAD/resources/images/screenshot1.jpg
--------------------------------------------------------------------------------
/resources/images/screenshot2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robweber/xbmcbackup/HEAD/resources/images/screenshot2.jpg
--------------------------------------------------------------------------------
/resources/images/screenshot3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robweber/xbmcbackup/HEAD/resources/images/screenshot3.jpg
--------------------------------------------------------------------------------
/resources/images/screenshot4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robweber/xbmcbackup/HEAD/resources/images/screenshot4.jpg
--------------------------------------------------------------------------------
/resources/images/screenshot5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robweber/xbmcbackup/HEAD/resources/images/screenshot5.jpg
--------------------------------------------------------------------------------
/resources/images/screenshot6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robweber/xbmcbackup/HEAD/resources/images/screenshot6.jpg
--------------------------------------------------------------------------------
/service.py:
--------------------------------------------------------------------------------
1 | from resources.lib.scheduler import BackupScheduler
2 |
3 | # start the backup scheduler
4 | BackupScheduler().start()
5 |
--------------------------------------------------------------------------------
/resources/skins/default/media/dialog-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robweber/xbmcbackup/HEAD/resources/skins/default/media/dialog-bg.png
--------------------------------------------------------------------------------
/resources/skins/default/media/dialogbutton-fo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robweber/xbmcbackup/HEAD/resources/skins/default/media/dialogbutton-fo.png
--------------------------------------------------------------------------------
/resources/skins/default/media/background-black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robweber/xbmcbackup/HEAD/resources/skins/default/media/background-black.png
--------------------------------------------------------------------------------
/resources/skins/default/media/dialogbutton-nofo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robweber/xbmcbackup/HEAD/resources/skins/default/media/dialogbutton-nofo.png
--------------------------------------------------------------------------------
/resources/lib/tinyurl.py:
--------------------------------------------------------------------------------
1 | # this is duplicated in snipppets of code from all over the web, credit to no one
2 | # in particular - to all those that have gone before me!
3 | from future.moves.urllib.request import urlopen
4 |
5 |
6 | def shorten(aUrl):
7 | tinyurl = 'http://tinyurl.com/api-create.php?url='
8 | req = urlopen(tinyurl + aUrl)
9 | data = req.read()
10 |
11 | # should be a tiny url
12 | return data
13 |
--------------------------------------------------------------------------------
/resources/lib/extractor.py:
--------------------------------------------------------------------------------
1 | from . import utils as utils
2 |
3 |
4 | class ZipExtractor:
5 |
6 | def extract(self, zipFile, outLoc, progressBar):
7 | utils.log("extracting zip archive")
8 |
9 | result = True # result is true unless we fail
10 |
11 | # update the progress bar
12 | progressBar.updateProgress(0, utils.getString(30100))
13 |
14 | # list the files
15 | fileCount = float(len(zipFile.listFiles()))
16 | currentFile = 0
17 |
18 | try:
19 | for aFile in zipFile.listFiles():
20 | # update the progress bar
21 | currentFile += 1
22 | progressBar.updateProgress(int((currentFile / fileCount) * 100), utils.getString(30100))
23 |
24 | # extract the file
25 | zipFile.extract(aFile, outLoc)
26 |
27 | except Exception:
28 | utils.log("Error extracting file")
29 | result = False
30 |
31 | return result
32 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | The MIT License
2 |
3 | Copyright (c) 2010 Rob Weber
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
--------------------------------------------------------------------------------
/resources/lib/progressbar.py:
--------------------------------------------------------------------------------
1 | import xbmcgui
2 | from . import utils as utils
3 |
4 |
5 | class BackupProgressBar:
6 | NONE = 2
7 | DIALOG = 0
8 | BACKGROUND = 1
9 |
10 | mode = 2
11 | progressBar = None
12 | override = False
13 |
14 | def __init__(self, progressOverride):
15 | self.override = progressOverride
16 |
17 | # check if we should use the progress bar
18 | if(utils.getSettingInt('progress_mode') != 2):
19 | # check if background or normal
20 | if(utils.getSettingInt('progress_mode') == 0 and not self.override):
21 | self.mode = self.DIALOG
22 | self.progressBar = xbmcgui.DialogProgress()
23 | else:
24 | self.mode = self.BACKGROUND
25 | self.progressBar = xbmcgui.DialogProgressBG()
26 |
27 | def create(self, heading, message):
28 | if(self.mode != self.NONE):
29 | self.progressBar.create(heading, message)
30 |
31 | def updateProgress(self, percent, message=None):
32 |
33 | # update the progress bar
34 | if(self.mode != self.NONE):
35 | if(message is not None):
36 | # need different calls for dialog and background bars
37 | if(self.mode == self.DIALOG):
38 | self.progressBar.update(percent, message)
39 | else:
40 | self.progressBar.update(percent, message=message)
41 | else:
42 | self.progressBar.update(percent)
43 |
44 | def checkCancel(self):
45 | result = False
46 |
47 | if(self.mode == self.DIALOG):
48 | result = self.progressBar.iscanceled()
49 |
50 | return result
51 |
52 | def close(self):
53 | if(self.mode != self.NONE):
54 | self.progressBar.close()
55 |
--------------------------------------------------------------------------------
/resources/lib/utils.py:
--------------------------------------------------------------------------------
1 | import xbmc
2 | import xbmcgui
3 | import xbmcaddon
4 | import xbmcvfs
5 |
6 | __addon_id__ = 'script.xbmcbackup'
7 | __Addon = xbmcaddon.Addon(__addon_id__)
8 |
9 |
10 | def data_dir():
11 | return __Addon.getAddonInfo('profile')
12 |
13 |
14 | def addon_dir():
15 | return __Addon.getAddonInfo('path')
16 |
17 |
18 | def openSettings():
19 | __Addon.openSettings()
20 |
21 |
22 | def log(message, loglevel=xbmc.LOGDEBUG):
23 | xbmc.log(__addon_id__ + "-" + __Addon.getAddonInfo('version') + ": " + message, level=loglevel)
24 |
25 |
26 | def showNotification(message):
27 | xbmcgui.Dialog().notification(getString(30010), message, time=4000, icon=xbmcvfs.translatePath(__Addon.getAddonInfo('path') + "/resources/images/icon.png"))
28 |
29 |
30 | def getSetting(name):
31 | return __Addon.getSetting(name)
32 |
33 | def getSettingStringStripped(name):
34 | return __Addon.getSettingString(name).strip()
35 |
36 | def getSettingBool(name):
37 | return bool(__Addon.getSettingBool(name))
38 |
39 |
40 | def getSettingInt(name):
41 | return __Addon.getSettingInt(name)
42 |
43 |
44 | def setSetting(name, value):
45 | __Addon.setSetting(name, value)
46 |
47 |
48 | def getString(string_id):
49 | return __Addon.getLocalizedString(string_id)
50 |
51 |
52 | def getRegionalTimestamp(date_time, dateformat=['dateshort']):
53 | result = ''
54 |
55 | for aFormat in dateformat:
56 | result = result + ("%s " % date_time.strftime(xbmc.getRegion(aFormat)))
57 |
58 | return result.strip()
59 |
60 |
61 | def diskString(fSize):
62 | # convert a size in kilobytes to the best possible match and return as a string
63 | fSize = float(fSize)
64 | i = 0
65 | sizeNames = ['KB', 'MB', 'GB', 'TB']
66 |
67 | while(fSize > 1024):
68 | fSize = fSize / 1024
69 | i = i + 1
70 |
71 | return "%0.2f%s" % (fSize, sizeNames[i])
72 |
--------------------------------------------------------------------------------
/resources/lib/guisettings.py:
--------------------------------------------------------------------------------
1 | import json
2 | import xbmc
3 | from . import utils as utils
4 |
5 |
6 | class GuiSettingsManager:
7 | filename = 'kodi_settings.json'
8 | systemSettings = None
9 |
10 | def __init__(self):
11 | # get all of the current Kodi settings
12 | json_response = json.loads(xbmc.executeJSONRPC('{"jsonrpc":"2.0", "id":1, "method":"Settings.GetSettings","params":{"level":"expert"}}'))
13 |
14 | self.systemSettings = json_response['result']['settings']
15 |
16 | def list_addons(self):
17 | # list all currently installed addons
18 | addons = json.loads(xbmc.executeJSONRPC('{"jsonrpc":"2.0", "method":"Addons.GetAddons", "params":{"properties":["version","author"]}, "id":2}'))
19 |
20 | return addons['result']['addons']
21 |
22 | def backup(self):
23 | utils.log('Backing up Kodi settings')
24 |
25 | # return all current settings
26 | return self.systemSettings
27 |
28 | def restore(self, restoreSettings):
29 | utils.log('Restoring Kodi settings')
30 |
31 | updateJson = {"jsonrpc": "2.0", "id": 1, "method": "Settings.SetSettingValue", "params": {"setting": "", "value": ""}}
32 |
33 | # create a setting=value dict of the current settings
34 | settingsDict = {}
35 | for aSetting in self.systemSettings:
36 | # ignore action types, no value
37 | if(aSetting['type'] != 'action'):
38 | settingsDict[aSetting['id']] = aSetting['value']
39 |
40 | restoreCount = 0
41 | for aSetting in restoreSettings:
42 | # Ensure key exists before referencing
43 | if(aSetting['id'] in settingsDict.values()):
44 | # only update a setting if its different than the current (action types have no value)
45 | if(aSetting['type'] != 'action' and settingsDict[aSetting['id']] != aSetting['value']):
46 | if(utils.getSettingBool('verbose_logging')):
47 | utils.log('%s different than current: %s' % (aSetting['id'], str(aSetting['value'])))
48 |
49 | updateJson['params']['setting'] = aSetting['id']
50 | updateJson['params']['value'] = aSetting['value']
51 |
52 | xbmc.executeJSONRPC(json.dumps(updateJson))
53 | restoreCount = restoreCount + 1
54 |
55 | utils.log('Update %d settings' % restoreCount)
56 |
--------------------------------------------------------------------------------
/resources/data/default_files.json:
--------------------------------------------------------------------------------
1 | {
2 | "addons":{
3 | "root":"special://home/addons/",
4 | "dirs":[
5 | {
6 | "type":"include",
7 | "path":"special://home/addons/",
8 | "recurse":true
9 | },
10 | {
11 | "type":"exclude",
12 | "path":"special://home/addons/packages/"
13 | },
14 | {
15 | "type":"exclude",
16 | "path":"special://home/addons/temp/"
17 | }
18 | ]
19 | },
20 | "addon_data":{
21 | "root":"special://home/userdata/addon_data/",
22 | "dirs":[
23 | {
24 | "type":"include",
25 | "path":"special://home/userdata/addon_data/",
26 | "recurse":true
27 | }
28 | ]
29 | },
30 | "database":{
31 | "root":"special://home/userdata/Database/",
32 | "dirs":[
33 | {
34 | "type":"include",
35 | "path":"special://home/userdata/Database/",
36 | "recurse":true
37 | }
38 | ]
39 | },
40 | "game_saves":{
41 | "root":"special://home/userdata/Savestates/",
42 | "dirs":[
43 | {
44 | "type":"include",
45 | "path":"special://home/userdata/Savestates/",
46 | "recurse":true
47 | }
48 | ]
49 | },
50 | "playlists":{
51 | "root":"special://home/userdata/playlists/",
52 | "dirs":[
53 | {
54 | "type":"include",
55 | "path":"special://home/userdata/playlists/",
56 | "recurse":true
57 | }
58 | ]
59 | },
60 | "profiles":{
61 | "root":"special://home/userdata/profiles/",
62 | "dirs":[
63 | {
64 | "type":"include",
65 | "path":"special://home/userdata/profiles/",
66 | "recurse":true
67 | }
68 | ]
69 | },
70 | "thumbnails":{
71 | "root":"special://home/userdata/Thumbnails/",
72 | "dirs":[
73 | {
74 | "type":"include",
75 | "path":"special://home/userdata/Thumbnails/",
76 | "recurse":true
77 | }
78 | ]
79 | },
80 | "config":{
81 | "root":"special://home/userdata/",
82 | "dirs":[
83 | {
84 | "type":"include",
85 | "path":"special://home/userdata/",
86 | "recurse":false
87 | },
88 | {
89 | "type":"include",
90 | "path":"special://home/userdata/keymaps/",
91 | "recurse":true
92 | },
93 | {
94 | "type":"include",
95 | "path":"special://home/userdata/peripheral_data/",
96 | "recurse":true
97 | },
98 | {
99 | "type":"include",
100 | "path":"special://home/userdata/library/",
101 | "recurse":true
102 | }
103 | ]
104 | }
105 | }
--------------------------------------------------------------------------------
/resources/skins/default/1080i/script-backup-qrcode.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 502
5 | 345
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | -1920
18 | -1080
19 | 5760
20 | 3240
21 | WindowOpen
22 | WindowClose
23 | background-black.png
24 |
25 |
26 | 0
27 | 0
28 | 915
29 | 450
30 | dialog-bg.png
31 |
32 |
33 | 0
34 | 20
35 | 915
36 | 300
37 | font12_title
38 | center
39 | top
40 | FF000000
41 |
42 |
43 | 0
44 | 60
45 | 915
46 | 300
47 | font12_title
48 | center
49 | top
50 | FF000000
51 |
52 |
53 | 300
54 | 80
55 | 300
56 | 300
57 | keep
58 |
59 |
60 | 302
61 | 350
62 | 300
63 | 90
64 | font12_title
65 | FFF0F0F0
66 | 20
67 |
68 | center
69 | center
70 | dialogbutton-fo.png
71 | dialogbutton-nofo.png
72 |
73 |
74 |
75 |
--------------------------------------------------------------------------------
/default.py:
--------------------------------------------------------------------------------
1 | import xbmcgui
2 | import xbmcvfs
3 | import resources.lib.utils as utils
4 | from resources.lib.backup import XbmcBackup
5 | from resources.lib.authorizers import DropboxAuthorizer
6 | from resources.lib.advanced_editor import AdvancedBackupEditor
7 |
8 | # mode constants
9 | BACKUP = 0
10 | RESTORE = 1
11 | SETTINGS = 2
12 | ADVANCED_EDITOR = 3
13 | LAUNCHER = 4
14 |
15 |
16 | def authorize_cloud(cloudProvider):
17 | # dropbox
18 | if(cloudProvider == 'dropbox'):
19 | authorizer = DropboxAuthorizer()
20 |
21 | if(authorizer.authorize()):
22 | xbmcgui.Dialog().ok(utils.getString(30010), '%s %s' % (utils.getString(30027), utils.getString(30106)))
23 | else:
24 | xbmcgui.Dialog().ok(utils.getString(30010), '%s %s' % (utils.getString(30107), utils.getString(30027)))
25 |
26 |
27 | def remove_auth():
28 | # triggered from settings.xml - asks if user wants to delete OAuth token information
29 | shouldDelete = xbmcgui.Dialog().yesno(utils.getString(30093), '%s\n%s' % (utils.getString(30094), utils.getString(30095)), autoclose=7000)
30 |
31 | if(shouldDelete):
32 | # delete any of the known token file types
33 | xbmcvfs.delete(xbmcvfs.translatePath(utils.data_dir() + "tokens.txt")) # dropbox
34 | xbmcvfs.delete(xbmcvfs.translatePath(utils.data_dir() + "google_drive.dat")) # google drive
35 |
36 |
37 | def get_params():
38 | param = {}
39 | try:
40 | for i in sys.argv:
41 | args = i
42 | if('=' in args):
43 | if(args.startswith('?')):
44 | args = args[1:] # legacy in case of url params
45 | splitString = args.split('=')
46 | utils.log(splitString[1])
47 | param[splitString[0]] = splitString[1]
48 | except:
49 | pass
50 |
51 | return param
52 |
53 |
54 | # the program mode
55 | mode = -1
56 | params = get_params()
57 |
58 | if("mode" in params):
59 | if(params['mode'] == 'backup'):
60 | mode = BACKUP
61 | elif(params['mode'] == 'restore'):
62 | mode = RESTORE
63 | elif(params['mode'] == 'launcher'):
64 | mode = LAUNCHER
65 |
66 | # if mode wasn't passed in as arg, get from user
67 | if(mode == -1):
68 | # by default, Backup,Restore,Open Settings
69 | options = [utils.getString(30016), utils.getString(30017), utils.getString(30099)]
70 |
71 | # find out if we're using the advanced editor
72 | if(utils.getSettingInt('backup_selection_type') == 1):
73 | options.append(utils.getString(30125))
74 |
75 | # figure out if this is a backup or a restore from the user
76 | mode = xbmcgui.Dialog().select(utils.getString(30010) + " - " + utils.getString(30023), options)
77 |
78 | # check which mode should be run
79 | if(mode != -1):
80 |
81 | if(mode == SETTINGS):
82 | # open the settings dialog
83 | utils.openSettings()
84 | elif(mode == ADVANCED_EDITOR and utils.getSettingInt('backup_selection_type') == 1):
85 | # open the advanced editor but only if in advanced mode
86 | editor = AdvancedBackupEditor()
87 | editor.showMainScreen()
88 | elif(mode == LAUNCHER):
89 | # copied from old launcher.py
90 | if(params['action'] == 'authorize_cloud'):
91 | authorize_cloud(params['provider'])
92 | elif(params['action'] == 'remove_auth'):
93 | remove_auth()
94 | elif(params['action'] == 'advanced_editor'):
95 | editor = AdvancedBackupEditor()
96 | editor.showMainScreen()
97 | elif(params['action'] == 'advanced_copy_config'):
98 | editor = AdvancedBackupEditor()
99 | editor.copySimpleConfig()
100 |
101 | elif(mode == BACKUP or mode == RESTORE):
102 | backup = XbmcBackup()
103 |
104 | # if mode was RESTORE
105 | if(mode == RESTORE and backup.remoteConfigured()):
106 | # get list of valid restore points
107 | restorePoints = backup.listBackups()
108 | pointNames = []
109 | folderNames = []
110 |
111 | for aDir in restorePoints:
112 | pointNames.append(aDir[1])
113 | folderNames.append(aDir[0])
114 |
115 | selectedRestore = -1
116 |
117 | if("archive" in params):
118 | # check that the user give archive exists
119 | if(params['archive'] in folderNames):
120 | # set the index
121 | selectedRestore = folderNames.index(params['archive'])
122 | utils.log(str(selectedRestore) + " : " + params['archive'])
123 | else:
124 | utils.showNotification(utils.getString(30045))
125 | utils.log(params['archive'] + ' is not a valid restore point')
126 | else:
127 | # allow user to select the backup to restore from
128 | selectedRestore = xbmcgui.Dialog().select(utils.getString(30010) + " - " + utils.getString(30021), pointNames)
129 |
130 | if(selectedRestore != -1):
131 | backup.selectRestore(restorePoints[selectedRestore][0])
132 |
133 | if('sets' in params):
134 | backup.restore(selectedSets=params['sets'].split('|'))
135 | else:
136 | backup.restore()
137 | elif(mode == BACKUP and backup.remoteConfigured()):
138 | # mode was BACKUP
139 | backup.backup()
140 | else:
141 | # can't go any further
142 | xbmcgui.Dialog().ok(utils.getString(30010), utils.getString(30045))
143 | utils.openSettings()
144 | else:
145 | xbmcgui.Dialog().ok(utils.getString(30010), "%s %s" % (utils.getString(30159), params['mode']))
146 |
--------------------------------------------------------------------------------
/resources/lib/authorizers.py:
--------------------------------------------------------------------------------
1 | import xbmcgui
2 | import xbmcvfs
3 | import json
4 | import pyqrcode
5 | import time
6 | import resources.lib.tinyurl as tinyurl
7 | import resources.lib.utils as utils
8 | import datetime
9 |
10 | # don't die on import error yet, these might not even get used
11 | try:
12 | from dropbox import dropbox
13 | from dropbox import oauth
14 | except ImportError:
15 | pass
16 |
17 | # fix for datetime.strptime bug https://kodi.wiki/view/Python_Problems#datetime.strptime
18 | class proxydt(datetime.datetime):
19 |
20 | @classmethod
21 | def strptime(cls, date_string, format):
22 | return datetime.datetime(*(time.strptime(date_string, format)[:6]))
23 |
24 | datetime.datetime = proxydt
25 |
26 | class QRCode(xbmcgui.WindowXMLDialog):
27 | def __init__(self, *args, **kwargs):
28 | self.image = kwargs["image"]
29 | self.text = kwargs["text"]
30 | self.url = kwargs['url']
31 |
32 | def onInit(self):
33 | self.imagecontrol = 501
34 | self.textbox1 = 502
35 | self.textbox2 = 504
36 | self.okbutton = 503
37 | self.showdialog()
38 |
39 | def showdialog(self):
40 | self.getControl(self.imagecontrol).setImage(self.image)
41 | self.getControl(self.textbox1).setText(self.text)
42 | self.getControl(self.textbox2).setText(self.url)
43 | self.setFocus(self.getControl(self.okbutton))
44 |
45 | def onClick(self, controlId):
46 | if (controlId == self.okbutton):
47 | self.close()
48 |
49 |
50 | class DropboxAuthorizer:
51 | TOKEN_FILE = "tokens.json"
52 | APP_KEY = ""
53 | APP_SECRET = ""
54 |
55 | def __init__(self):
56 | self.APP_KEY = utils.getSettingStringStripped('dropbox_key')
57 | self.APP_SECRET = utils.getSettingStringStripped('dropbox_secret')
58 |
59 | def setup(self):
60 | result = True
61 |
62 | if(self.APP_KEY == '' and self.APP_SECRET == ''):
63 | # we can't go any farther, need these for sure
64 | xbmcgui.Dialog().ok(utils.getString(30010), '%s %s\n%s' % (utils.getString(30027), utils.getString(30058), utils.getString(30059)))
65 |
66 | result = False
67 |
68 | return result
69 |
70 | def isAuthorized(self):
71 | user_token = self._getToken()
72 |
73 | return 'access_token' in user_token
74 |
75 | def authorize(self):
76 | result = True
77 |
78 | if(not self.setup()):
79 | return False
80 |
81 | if(self.isAuthorized()):
82 | # delete the token to start over
83 | self._deleteToken()
84 |
85 | # copied flow from http://dropbox-sdk-python.readthedocs.io/en/latest/moduledoc.html#dropbox.oauth.DropboxOAuth2FlowNoRedirect
86 | flow = oauth.DropboxOAuth2FlowNoRedirect(consumer_key=self.APP_KEY, consumer_secret=self.APP_SECRET, token_access_type="offline")
87 |
88 | url = flow.start()
89 |
90 | # print url in log
91 | utils.log("Authorize URL: " + url)
92 |
93 | # create a QR Code
94 | shortUrl = str(tinyurl.shorten(url), 'utf-8')
95 | imageFile = xbmcvfs.translatePath(utils.data_dir() + '/qrcode.png')
96 | qrIMG = pyqrcode.create(shortUrl)
97 | qrIMG.png(imageFile, scale=10)
98 |
99 | # show the dialog prompt to authorize
100 | qr = QRCode("script-backup-qrcode.xml", utils.addon_dir(), "default", image=imageFile, text=utils.getString(30056), url=shortUrl)
101 | qr.doModal()
102 |
103 | # cleanup
104 | del qr
105 | xbmcvfs.delete(imageFile)
106 |
107 | # get the auth code
108 | code = xbmcgui.Dialog().input(utils.getString(30027) + ' ' + utils.getString(30103))
109 |
110 | # if user authorized this will work
111 |
112 | try:
113 | user_token = flow.finish(code)
114 | self._setToken(user_token)
115 | except Exception as e:
116 | utils.log("Error: %s" % (e,))
117 | result = False
118 |
119 | return result
120 |
121 | # return the DropboxClient, or None if can't be created
122 | def getClient(self):
123 | result = None
124 |
125 | user_token = self._getToken()
126 |
127 | if(user_token != ''):
128 | # create the client
129 | result = dropbox.Dropbox(oauth2_access_token=user_token['access_token'], oauth2_refresh_token=user_token['refresh_token'],
130 | oauth2_access_token_expiration=user_token['expiration'], app_key=self.APP_KEY, app_secret=self.APP_SECRET)
131 | try:
132 | result.users_get_current_account()
133 | except:
134 | # this didn't work, delete the token file
135 | self._deleteToken()
136 | result = None
137 |
138 | return result
139 |
140 | def _setToken(self, token):
141 | # write the token files
142 | token_file = open(xbmcvfs.translatePath(utils.data_dir() + self.TOKEN_FILE), 'w')
143 |
144 | token_file.write(json.dumps({"access_token": token.access_token, "refresh_token": token.refresh_token, "expiration": str(token.expires_at)}))
145 | token_file.close()
146 |
147 | def _getToken(self):
148 | result = {}
149 | # get token, if it exists
150 | if(xbmcvfs.exists(xbmcvfs.translatePath(utils.data_dir() + self.TOKEN_FILE))):
151 | token_file = open(xbmcvfs.translatePath(utils.data_dir() + self.TOKEN_FILE))
152 | token = token_file.read()
153 |
154 | if(token.strip() != ""):
155 | result = json.loads(token)
156 | # convert expiration back to a datetime object
157 | result['expiration'] = datetime.datetime.strptime(result['expiration'], "%Y-%m-%d %H:%M:%S.%f")
158 |
159 | token_file.close()
160 |
161 | return result
162 |
163 | def _deleteToken(self):
164 | if(xbmcvfs.exists(xbmcvfs.translatePath(utils.data_dir() + self.TOKEN_FILE))):
165 | xbmcvfs.delete(xbmcvfs.translatePath(utils.data_dir() + self.TOKEN_FILE))
166 |
--------------------------------------------------------------------------------
/resources/lib/scheduler.py:
--------------------------------------------------------------------------------
1 | import time
2 | from datetime import datetime
3 | import xbmc
4 | import xbmcvfs
5 | import xbmcgui
6 | from . import utils as utils
7 | from resources.lib.croniter import croniter
8 | from resources.lib.backup import XbmcBackup
9 |
10 | UPGRADE_INT = 2 # to keep track of any upgrade notifications
11 |
12 |
13 | class BackupScheduler:
14 | monitor = None
15 | enabled = False
16 | next_run = 0
17 | next_run_path = None
18 | restore_point = None
19 |
20 | def __init__(self):
21 | self.monitor = UpdateMonitor(update_method=self.settingsChanged)
22 | self.enabled = utils.getSettingBool("enable_scheduler")
23 | self.next_run_path = xbmcvfs.translatePath(utils.data_dir()) + 'next_run.txt'
24 |
25 | # display upgrade messages if they exist
26 | if(utils.getSettingInt('upgrade_notes') < UPGRADE_INT):
27 | xbmcgui.Dialog().ok(utils.getString(30010), utils.getString(30132))
28 | utils.setSetting('upgrade_notes', str(UPGRADE_INT))
29 |
30 | # check if a backup should be resumed
31 | resumeRestore = self._resumeCheck()
32 |
33 | if(resumeRestore):
34 | restore = XbmcBackup()
35 | restore.selectRestore(self.restore_point)
36 | # skip the advanced settings check
37 | restore.skipAdvanced()
38 | restore.restore()
39 |
40 | if(self.enabled):
41 |
42 | # sleep for 2 minutes so Kodi can start and time can update correctly
43 | xbmc.Monitor().waitForAbort(120)
44 |
45 | nr = 0
46 | if(xbmcvfs.exists(self.next_run_path)):
47 |
48 | with xbmcvfs.File(self.next_run_path) as fh:
49 | try:
50 | # check if we saved a run time from the last run
51 | nr = float(fh.read())
52 | except ValueError:
53 | nr = 0
54 |
55 | # if we missed and the user wants to play catch-up
56 | if(0 < nr <= time.time() and utils.getSettingBool('schedule_miss')):
57 | utils.log("scheduled backup was missed, doing it now...")
58 | progress_mode = utils.getSettingInt('progress_mode')
59 |
60 | if(progress_mode == 0):
61 | progress_mode = 1 # Kodi just started, don't block it with a foreground progress bar
62 |
63 | self.doScheduledBackup(progress_mode)
64 |
65 | self.setup()
66 |
67 | def setup(self):
68 | # scheduler was turned on, find next run time
69 | utils.log("scheduler enabled, finding next run time")
70 | self.findNextRun(time.time())
71 |
72 | def start(self):
73 |
74 | while(not self.monitor.abortRequested()):
75 |
76 | if(self.enabled):
77 | # scheduler is still on
78 | now = time.time()
79 |
80 | if(self.next_run <= now):
81 | progress_mode = utils.getSettingInt('progress_mode')
82 | self.doScheduledBackup(progress_mode)
83 |
84 | # check if we should shut the computer down
85 | if(utils.getSettingBool("cron_shutdown")):
86 | # wait 10 seconds to make sure all backup processes and files are completed
87 | time.sleep(10)
88 | xbmc.executebuiltin('ShutDown()')
89 | else:
90 | # find the next run time like normal
91 | self.findNextRun(now)
92 |
93 | xbmc.sleep(500)
94 |
95 | # delete monitor to free up memory
96 | del self.monitor
97 |
98 | def doScheduledBackup(self, progress_mode):
99 | if(progress_mode != 2):
100 | utils.showNotification(utils.getString(30053))
101 |
102 | backup = XbmcBackup()
103 |
104 | if(backup.remoteConfigured()):
105 |
106 | if(utils.getSettingInt('progress_mode') in [0, 1]):
107 | backup.backup(True)
108 | else:
109 | backup.backup(False)
110 |
111 | # check if this is a "one-off"
112 | if(utils.getSettingInt("schedule_interval") == 0):
113 | # disable the scheduler after this run
114 | self.enabled = False
115 | utils.setSetting('enable_scheduler', 'false')
116 | else:
117 | utils.showNotification(utils.getString(30045))
118 |
119 | def findNextRun(self, now):
120 | progress_mode = utils.getSettingInt('progress_mode')
121 |
122 | # find the cron expression and get the next run time
123 | cron_exp = self.parseSchedule()
124 |
125 | cron_ob = croniter(cron_exp, datetime.fromtimestamp(now))
126 | new_run_time = cron_ob.get_next(float)
127 |
128 | if(new_run_time != self.next_run):
129 | self.next_run = new_run_time
130 | utils.log("scheduler will run again on " + utils.getRegionalTimestamp(datetime.fromtimestamp(self.next_run), ['dateshort', 'time']))
131 |
132 | # write the next time to a file
133 | with xbmcvfs.File(self.next_run_path, 'w') as fh:
134 | fh.write(str(self.next_run))
135 |
136 | # only show when not in silent mode
137 | if(progress_mode != 2):
138 | utils.showNotification(utils.getString(30081) + " " + utils.getRegionalTimestamp(datetime.fromtimestamp(self.next_run), ['dateshort', 'time']))
139 |
140 | def settingsChanged(self):
141 | current_enabled = utils.getSettingBool("enable_scheduler")
142 |
143 | if(current_enabled and not self.enabled):
144 | # scheduler was just turned on
145 | self.enabled = current_enabled
146 | self.setup()
147 | elif (not current_enabled and self.enabled):
148 | # schedule was turn off
149 | self.enabled = current_enabled
150 |
151 | if(self.enabled):
152 | # always recheck the next run time after an update
153 | self.findNextRun(time.time())
154 |
155 | def parseSchedule(self):
156 | schedule_type = utils.getSettingInt("schedule_interval")
157 | cron_exp = utils.getSetting("cron_schedule")
158 |
159 | hour_of_day = utils.getSetting("schedule_time")
160 | hour_of_day = int(hour_of_day[0:2])
161 | if(schedule_type == 0 or schedule_type == 1):
162 | # every day
163 | cron_exp = "0 " + str(hour_of_day) + " * * *"
164 | elif(schedule_type == 2):
165 | # once a week
166 | day_of_week = utils.getSetting("day_of_week")
167 | cron_exp = "0 " + str(hour_of_day) + " * * " + day_of_week
168 | elif(schedule_type == 3):
169 | # first day of month
170 | cron_exp = "0 " + str(hour_of_day) + " 1 * *"
171 |
172 | return cron_exp
173 |
174 | def _resumeCheck(self):
175 | shouldContinue = False
176 | if(xbmcvfs.exists(xbmcvfs.translatePath(utils.data_dir() + "resume.txt"))):
177 | rFile = xbmcvfs.File(xbmcvfs.translatePath(utils.data_dir() + "resume.txt"), 'r')
178 | self.restore_point = rFile.read()
179 | rFile.close()
180 | xbmcvfs.delete(xbmcvfs.translatePath(utils.data_dir() + "resume.txt"))
181 | shouldContinue = xbmcgui.Dialog().yesno(utils.getString(30042), "%s\n%s" % (utils.getString(30043), utils.getString(30044)))
182 |
183 | return shouldContinue
184 |
185 |
186 | class UpdateMonitor(xbmc.Monitor):
187 | update_method = None
188 |
189 | def __init__(self, *args, **kwargs):
190 | xbmc.Monitor.__init__(self)
191 | self.update_method = kwargs['update_method']
192 |
193 | def onSettingsChanged(self):
194 | self.update_method()
195 |
--------------------------------------------------------------------------------
/resources/lib/vfs.py:
--------------------------------------------------------------------------------
1 | from __future__ import unicode_literals
2 | import zipfile
3 | import os.path
4 | import sys
5 | import xbmcvfs
6 | import xbmcgui
7 | from dropbox import dropbox
8 | from . import utils as utils
9 | from dropbox.files import WriteMode, CommitInfo, UploadSessionCursor
10 | from . authorizers import DropboxAuthorizer
11 |
12 |
13 | class Vfs:
14 | root_path = None
15 |
16 | def __init__(self, rootString):
17 | self.set_root(rootString)
18 |
19 | def clean_path(self, path):
20 | # fix slashes
21 | path = path.replace("\\", "/")
22 |
23 | # check if trailing slash is included
24 | if(path[-1:] != '/'):
25 | path = path + '/'
26 |
27 | return path
28 |
29 | def set_root(self, rootString):
30 | old_root = self.root_path
31 | self.root_path = self.clean_path(rootString)
32 |
33 | # return the old root
34 | return old_root
35 |
36 | def listdir(self, directory):
37 | return {}
38 |
39 | def mkdir(self, directory):
40 | return True
41 |
42 | def put(self, source, dest):
43 | return True
44 |
45 | def rmdir(self, directory):
46 | return True
47 |
48 | def rmfile(self, aFile):
49 | return True
50 |
51 | def exists(self, aFile):
52 | return True
53 |
54 | def rename(self, aFile, newName):
55 | return True
56 |
57 | def cleanup(self):
58 | return True
59 |
60 | def fileSize(self, filename):
61 | return 0 # result should be in KB
62 |
63 |
64 | class XBMCFileSystem(Vfs):
65 |
66 | def listdir(self, directory):
67 | return xbmcvfs.listdir(directory)
68 |
69 | def mkdir(self, directory):
70 | return xbmcvfs.mkdir(xbmcvfs.translatePath(directory))
71 |
72 | def put(self, source, dest):
73 | return xbmcvfs.copy(xbmcvfs.translatePath(source), xbmcvfs.translatePath(dest))
74 |
75 | def rmdir(self, directory):
76 | return xbmcvfs.rmdir(directory, force=True) # use force=True to make sure it works recursively
77 |
78 | def rmfile(self, aFile):
79 | return xbmcvfs.delete(aFile)
80 |
81 | def rename(self, aFile, newName):
82 | return xbmcvfs.rename(aFile, newName)
83 |
84 | def exists(self, aFile):
85 | return xbmcvfs.exists(aFile)
86 |
87 | def fileSize(self, filename):
88 | with xbmcvfs.File(filename) as f:
89 | result = f.size() / 1024 # bytes to kilobytes
90 |
91 | return result
92 |
93 |
94 | class ZipFileSystem(Vfs):
95 | zip = None
96 |
97 | def __init__(self, rootString, mode):
98 | self.root_path = ""
99 | self.zip = zipfile.ZipFile(rootString, mode=mode, compression=zipfile.ZIP_DEFLATED, allowZip64=True)
100 |
101 | def listdir(self, directory):
102 | return [[], []]
103 |
104 | def mkdir(self, directory):
105 | # self.zip.write(directory[len(self.root_path):])
106 | return False
107 |
108 | def put(self, source, dest):
109 |
110 | aFile = xbmcvfs.File(xbmcvfs.translatePath(source), 'r')
111 |
112 | self.zip.writestr(dest, aFile.readBytes())
113 |
114 | return True
115 |
116 | def rmdir(self, directory):
117 | return False
118 |
119 | def exists(self, aFile):
120 | return False
121 |
122 | def cleanup(self):
123 | self.zip.close()
124 |
125 | def extract(self, aFile, path):
126 | # extract zip file to path
127 | self.zip.extract(aFile, path)
128 |
129 | def listFiles(self):
130 | return self.zip.infolist()
131 |
132 |
133 | class DropboxFileSystem(Vfs):
134 | MAX_CHUNK = 50 * 1000 * 1000 # dropbox uses 150, reduced to 50 for small mem systems
135 | client = None
136 | APP_KEY = ''
137 | APP_SECRET = ''
138 |
139 | def __init__(self, rootString):
140 | self.set_root(rootString)
141 |
142 | authorizer = DropboxAuthorizer()
143 |
144 | if(authorizer.isAuthorized()):
145 | self.client = authorizer.getClient()
146 | else:
147 | # tell the user to go back and run the authorizer
148 | xbmcgui.Dialog().ok(utils.getString(30010), utils.getString(30105))
149 | sys.exit()
150 |
151 | def listdir(self, directory):
152 | directory = self._fix_slashes(directory)
153 |
154 | if(self.client is not None and self.exists(directory)):
155 | files = []
156 | dirs = []
157 | metadata = self.client.files_list_folder(directory)
158 |
159 | for aFile in metadata.entries:
160 | if(isinstance(aFile, dropbox.files.FolderMetadata)):
161 | dirs.append(aFile.name)
162 | else:
163 | files.append(aFile.name)
164 |
165 | return [dirs, files]
166 | else:
167 | return [[], []]
168 |
169 | def mkdir(self, directory):
170 | directory = self._fix_slashes(directory)
171 | if(self.client is not None):
172 | # sort of odd but always return true, folder create is implicit with file upload
173 | return True
174 | else:
175 | return False
176 |
177 | def rmdir(self, directory):
178 | directory = self._fix_slashes(directory)
179 | if(self.client is not None and self.exists(directory)):
180 | # dropbox is stupid and will refuse to do this sometimes, need to delete recursively
181 | dirs, files = self.listdir(directory)
182 |
183 | for aDir in dirs:
184 | self.rmdir(aDir)
185 |
186 | # finally remove the root directory
187 | self.client.files_delete(directory)
188 |
189 | return True
190 | else:
191 | return False
192 |
193 | def rmfile(self, aFile):
194 | aFile = self._fix_slashes(aFile)
195 |
196 | if(self.client is not None and self.exists(aFile)):
197 | self.client.files_delete(aFile)
198 | return True
199 | else:
200 | return False
201 |
202 | def exists(self, aFile):
203 | aFile = self._fix_slashes(aFile)
204 |
205 | if(self.client is not None):
206 | # can't list root metadata
207 | if(aFile == ''):
208 | return True
209 |
210 | try:
211 | self.client.files_get_metadata(aFile)
212 | # if we make it here the file does exist
213 | return True
214 | except:
215 | return False
216 | else:
217 | return False
218 |
219 | def put(self, source, dest, retry=True):
220 | dest = self._fix_slashes(dest)
221 |
222 | if(self.client is not None):
223 | # open the file and get its size
224 | f = open(source, 'rb')
225 | f_size = os.path.getsize(source)
226 |
227 | try:
228 | if(f_size < self.MAX_CHUNK):
229 | # use the regular upload
230 | self.client.files_upload(f.read(), dest, mode=WriteMode('overwrite'))
231 | else:
232 | # start the upload session
233 | upload_session = self.client.files_upload_session_start(f.read(self.MAX_CHUNK))
234 | upload_cursor = UploadSessionCursor(upload_session.session_id, f.tell())
235 |
236 | while(f.tell() < f_size):
237 | # check if we should finish the upload
238 | if((f_size - f.tell()) <= self.MAX_CHUNK):
239 | # upload and close
240 | self.client.files_upload_session_finish(f.read(self.MAX_CHUNK), upload_cursor, CommitInfo(dest, mode=WriteMode('overwrite')))
241 | else:
242 | # upload a part and store the offset
243 | self.client.files_upload_session_append_v2(f.read(self.MAX_CHUNK), upload_cursor)
244 | upload_cursor.offset = f.tell()
245 |
246 | # if no errors we're good!
247 | return True
248 | except Exception as anError:
249 | utils.log(str(anError))
250 |
251 | # if we have an exception retry
252 | if(retry):
253 | return self.put(source, dest, False)
254 | else:
255 | # tried once already, just quit
256 | return False
257 | else:
258 | return False
259 |
260 | def fileSize(self, filename):
261 | result = 0
262 | aFile = self._fix_slashes(filename)
263 |
264 | if(self.client is not None):
265 | metadata = self.client.files_get_metadata(aFile)
266 | result = metadata.size / 1024 # bytes to KB
267 |
268 | return result
269 |
270 | def get_file(self, source, dest):
271 | if(self.client is not None):
272 | # write the file locally
273 | self.client.files_download_to_file(dest, source)
274 | return True
275 | else:
276 | return False
277 |
278 | def _fix_slashes(self, filename):
279 | result = filename.replace('\\', '/')
280 |
281 | # root needs to be a blank string
282 | if(result == '/'):
283 | result = ""
284 |
285 | # if dir ends in slash, remove it
286 | if(result[-1:] == "/"):
287 | result = result[:-1]
288 |
289 | return result
290 |
--------------------------------------------------------------------------------
/resources/lib/advanced_editor.py:
--------------------------------------------------------------------------------
1 | import json
2 | import xbmcgui
3 | import xbmcvfs
4 | import os.path
5 | from . import utils as utils
6 |
7 |
8 | class BackupSetManager:
9 | jsonFile = xbmcvfs.translatePath(utils.data_dir() + "custom_paths.json")
10 | paths = None
11 |
12 | def __init__(self):
13 | self.paths = {}
14 |
15 | # try and read in the custom file
16 | self._readFile()
17 |
18 | def addSet(self, aSet):
19 | self.paths[aSet['name']] = {'root': aSet['root'], 'dirs': [{"type": "include", "path": aSet['root'], 'recurse': True}]}
20 |
21 | # save the file
22 | self._writeFile()
23 |
24 | def updateSet(self, name, aSet):
25 | self.paths[name] = aSet
26 |
27 | # save the file
28 | self._writeFile()
29 |
30 | def deleteSet(self, index):
31 | # match the index to a key
32 | keys = self.getSets()
33 |
34 | # delete this set
35 | del self.paths[keys[index]]
36 |
37 | # save the file
38 | self._writeFile()
39 |
40 | def getSets(self):
41 | # list all current sets by name
42 | keys = list(self.paths.keys())
43 | keys.sort()
44 |
45 | return keys
46 |
47 | def getSet(self, index):
48 | keys = self.getSets()
49 |
50 | # return the set at this index
51 | return {'name': keys[index], 'set': self.paths[keys[index]]}
52 |
53 | def validateSetName(self, name):
54 | return (name not in self.getSets())
55 |
56 | def _writeFile(self):
57 | # create the custom file
58 | aFile = xbmcvfs.File(self.jsonFile, 'w')
59 | aFile.write(json.dumps(self.paths))
60 | aFile.close()
61 |
62 | def _readFile(self):
63 |
64 | if(xbmcvfs.exists(self.jsonFile)):
65 |
66 | # read in the custom file
67 | aFile = xbmcvfs.File(self.jsonFile)
68 |
69 | # load custom dirs
70 | self.paths = json.loads(aFile.read())
71 | aFile.close()
72 | else:
73 | # write a blank file
74 | self._writeFile()
75 |
76 |
77 | class AdvancedBackupEditor:
78 | dialog = None
79 |
80 | def __init__(self):
81 | self.dialog = xbmcgui.Dialog()
82 |
83 | def _cleanPath(self, root, path):
84 | return path[len(root) - 1:]
85 |
86 | def _validatePath(self, root, path):
87 | return path.startswith(root)
88 |
89 | def createSet(self):
90 | backupSet = None
91 |
92 | name = self.dialog.input(utils.getString(30110), defaultt='Backup Set')
93 |
94 | if(name is not None):
95 |
96 | # give a choice to start in home or enter a root path
97 | enterHome = self.dialog.yesno(utils.getString(30111), message=utils.getString(30112) + " - " + utils.getString(30114) + "\n" + utils.getString(30113) + " - " + utils.getString(30115), nolabel=utils.getString(30112), yeslabel=utils.getString(30113))
98 |
99 | rootFolder = 'special://home'
100 | if(enterHome):
101 | rootFolder = self.dialog.input(utils.getString(30116), defaultt=rootFolder)
102 |
103 | # direcotry has to end in slash
104 | if(rootFolder[:-1] != '/'):
105 | rootFolder = rootFolder + '/'
106 |
107 | # check that this path even exists
108 | if(not xbmcvfs.exists(xbmcvfs.translatePath(rootFolder))):
109 | self.dialog.ok(utils.getString(30117), utils.getString(30118), rootFolder)
110 | return None
111 | else:
112 | # select path to start set
113 | rootFolder = self.dialog.browse(type=0, heading=utils.getString(30119), shares='files', defaultt=rootFolder)
114 |
115 | backupSet = {'name': name, 'root': rootFolder}
116 |
117 | return backupSet
118 |
119 | def editSet(self, name, backupSet):
120 | optionSelected = ''
121 | rootPath = backupSet['root']
122 |
123 | while(optionSelected != -1):
124 | options = [xbmcgui.ListItem(utils.getString(30120), utils.getString(30143)), xbmcgui.ListItem(utils.getString(30135), utils.getString(30144)), xbmcgui.ListItem(rootPath, utils.getString(30121))]
125 |
126 | for aDir in backupSet['dirs']:
127 | if(aDir['type'] == 'exclude'):
128 | options.append(xbmcgui.ListItem(self._cleanPath(rootPath, aDir['path']), "%s: %s" % (utils.getString(30145), utils.getString(30129))))
129 | elif(aDir['type'] == 'include'):
130 | options.append(xbmcgui.ListItem(self._cleanPath(rootPath, aDir['path']), "%s: %s | %s: %s" % (utils.getString(30145), utils.getString(30134), utils.getString(30146), str(aDir['recurse']))))
131 |
132 | optionSelected = self.dialog.select(utils.getString(30122) + ' ' + name, options, useDetails=True)
133 |
134 | if(optionSelected == 0 or optionSelected == 1):
135 | # add a folder, will equal root if cancel is hit
136 | addFolder = self.dialog.browse(type=0, heading=utils.getString(30120), shares='files', defaultt=backupSet['root'])
137 |
138 | if(addFolder.startswith(rootPath)):
139 |
140 | if(not any(addFolder == aDir['path'] for aDir in backupSet['dirs'])):
141 | # cannot add root as an exclusion
142 | if(optionSelected == 0 and addFolder != backupSet['root']):
143 | backupSet['dirs'].append({"path": addFolder, "type": "exclude"})
144 | elif(optionSelected == 1):
145 | # can add root as inclusion
146 | backupSet['dirs'].append({"path": addFolder, "type": "include", "recurse": True})
147 | else:
148 | # this path is already part of another include/exclude rule
149 | self.dialog.ok(utils.getString(30117), utils.getString(30137), addFolder)
150 | else:
151 | # folder must be under root folder
152 | self.dialog.ok(utils.getString(30117), utils.getString(30136), rootPath)
153 | elif(optionSelected == 2):
154 | self.dialog.ok(utils.getString(30121), utils.getString(30130), backupSet['root'])
155 | elif(optionSelected > 2):
156 |
157 | cOptions = ['Delete']
158 | if(backupSet['dirs'][optionSelected - 3]['type'] == 'include'):
159 | cOptions.append(utils.getString(30147))
160 |
161 | contextOption = self.dialog.contextmenu(cOptions)
162 |
163 | if(contextOption == 0):
164 | if(self.dialog.yesno(heading=utils.getString(30123), message=utils.getString(30128))):
165 | # remove folder
166 | del backupSet['dirs'][optionSelected - 3]
167 | elif(contextOption == 1 and backupSet['dirs'][optionSelected - 3]['type'] == 'include'):
168 | # toggle if this folder should be recursive
169 | backupSet['dirs'][optionSelected - 3]['recurse'] = not backupSet['dirs'][optionSelected - 3]['recurse']
170 |
171 | return backupSet
172 |
173 | def showMainScreen(self):
174 | exitCondition = ""
175 | customPaths = BackupSetManager()
176 |
177 | # show this every time
178 | self.dialog.ok(utils.getString(30036), utils.getString(30037))
179 |
180 | while(exitCondition != -1):
181 | # load the custom paths
182 | listItem = xbmcgui.ListItem(utils.getString(30126), '')
183 | listItem.setArt({'icon': os.path.join(utils.addon_dir(), 'resources', 'images', 'plus-icon.png')})
184 | options = [listItem]
185 |
186 | for index in range(0, len(customPaths.getSets())):
187 | aSet = customPaths.getSet(index)
188 |
189 | listItem = xbmcgui.ListItem(aSet['name'], utils.getString(30121) + ': ' + aSet['set']['root'])
190 | listItem.setArt({'icon': os.path.join(utils.addon_dir(), 'resources', 'images', 'folder-icon.png')})
191 | options.append(listItem)
192 |
193 | # show the gui
194 | exitCondition = self.dialog.select(utils.getString(30125), options, useDetails=True)
195 |
196 | if(exitCondition >= 0):
197 | if(exitCondition == 0):
198 | newSet = self.createSet()
199 |
200 | # check that the name is unique
201 | if(customPaths.validateSetName(newSet['name'])):
202 | customPaths.addSet(newSet)
203 | else:
204 | self.dialog.ok(utils.getString(30117), utils.getString(30138), newSet['name'])
205 | else:
206 | # bring up a context menu
207 | menuOption = self.dialog.contextmenu([utils.getString(30122), utils.getString(30123)])
208 |
209 | if(menuOption == 0):
210 | # get the set
211 | aSet = customPaths.getSet(exitCondition - 1)
212 |
213 | # edit the set
214 | updatedSet = self.editSet(aSet['name'], aSet['set'])
215 |
216 | # save it
217 | customPaths.updateSet(aSet['name'], updatedSet)
218 |
219 | elif(menuOption == 1):
220 | if(self.dialog.yesno(heading=utils.getString(30127), message=utils.getString(30128))):
221 | # delete this path - subtract one because of "add" item
222 | customPaths.deleteSet(exitCondition - 1)
223 |
224 | def copySimpleConfig(self):
225 | # disclaimer in case the user hit this on accident
226 | shouldContinue = self.dialog.yesno(heading=utils.getString(30139), message=utils.getString(30140) + "\n" + utils.getString(30141))
227 |
228 | if(shouldContinue):
229 | source = xbmcvfs.translatePath(os.path.join(utils.addon_dir(), 'resources', 'data', 'default_files.json'))
230 | dest = xbmcvfs.translatePath(os.path.join(utils.data_dir(), 'custom_paths.json'))
231 |
232 | xbmcvfs.copy(source, dest)
233 |
--------------------------------------------------------------------------------
/resources/lib/croniter.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python
2 | # -*- coding: utf-8 -*-
3 |
4 | import re
5 | from time import time, mktime
6 | from datetime import datetime
7 | from dateutil.relativedelta import relativedelta
8 |
9 | search_re = re.compile(r'^([^-]+)-([^-/]+)(/(.*))?$')
10 | only_int_re = re.compile(r'^\d+$')
11 | any_int_re = re.compile(r'^\d+')
12 | star_or_int_re = re.compile(r'^(\d+|\*)$')
13 |
14 | __all__ = ('croniter',)
15 |
16 |
17 | class croniter(object):
18 | RANGES = (
19 | (0, 59),
20 | (0, 23),
21 | (1, 31),
22 | (1, 12),
23 | (0, 6),
24 | (0, 59)
25 | )
26 | DAYS = (
27 | 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
28 | )
29 |
30 | ALPHACONV = (
31 | { },
32 | { },
33 | { },
34 | { 'jan':1, 'feb':2, 'mar':3, 'apr':4, 'may':5, 'jun':6,
35 | 'jul':7, 'aug':8, 'sep':9, 'oct':10, 'nov':11, 'dec':12 },
36 | { 'sun':0, 'mon':1, 'tue':2, 'wed':3, 'thu':4, 'fri':5, 'sat':6 },
37 | { }
38 | )
39 |
40 | LOWMAP = (
41 | {},
42 | {},
43 | {0: 1},
44 | {0: 1},
45 | {7: 0},
46 | {},
47 | )
48 |
49 | bad_length = 'Exactly 5 or 6 columns has to be specified for iterator' \
50 | 'expression.'
51 |
52 | def __init__(self, expr_format, start_time=time()):
53 | if isinstance(start_time, datetime):
54 | start_time = mktime(start_time.timetuple())
55 |
56 | self.cur = start_time
57 | self.exprs = expr_format.split()
58 |
59 | if len(self.exprs) != 5 and len(self.exprs) != 6:
60 | raise ValueError(self.bad_length)
61 |
62 | expanded = []
63 |
64 | for i, expr in enumerate(self.exprs):
65 | e_list = expr.split(',')
66 | res = []
67 |
68 | while len(e_list) > 0:
69 | e = e_list.pop()
70 | t = re.sub(r'^\*(/.+)$', r'%d-%d\1' % (self.RANGES[i][0],
71 | self.RANGES[i][1]),
72 | str(e))
73 | m = search_re.search(t)
74 |
75 | if m:
76 | (low, high, step) = m.group(1), m.group(2), m.group(4) or 1
77 |
78 | if not any_int_re.search(low):
79 | low = self.ALPHACONV[i][low.lower()]
80 |
81 | if not any_int_re.search(high):
82 | high = self.ALPHACONV[i][high.lower()]
83 |
84 | if (not low or not high or int(low) > int(high)
85 | or not only_int_re.search(str(step))):
86 | raise ValueError("[%s] is not acceptable" %expr_format)
87 |
88 | for j in range(int(low), int(high)+1):
89 | if j % int(step) == 0:
90 | e_list.append(j)
91 | else:
92 | if not star_or_int_re.search(t):
93 | t = self.ALPHACONV[i][t.lower()]
94 |
95 | try:
96 | t = int(t)
97 | except:
98 | pass
99 |
100 | if t in self.LOWMAP[i]:
101 | t = self.LOWMAP[i][t]
102 |
103 | if t != '*' and (int(t) < self.RANGES[i][0] or
104 | int(t) > self.RANGES[i][1]):
105 | raise ValueError("[%s] is not acceptable, out of range" % expr_format)
106 |
107 | res.append(t)
108 |
109 | res.sort()
110 | expanded.append(['*'] if (len(res) == 1 and res[0] == '*') else res)
111 | self.expanded = expanded
112 |
113 | def get_next(self, ret_type=float):
114 | return self._get_next(ret_type, is_prev=False)
115 |
116 | def get_prev(self, ret_type=float):
117 | return self._get_next(ret_type, is_prev=True)
118 |
119 | def _get_next(self, ret_type=float, is_prev=False):
120 | expanded = self.expanded[:]
121 |
122 | if ret_type not in (float, datetime):
123 | raise TypeError("Invalid ret_type, only 'float' or 'datetime' " \
124 | "is acceptable.")
125 |
126 | if expanded[2][0] != '*' and expanded[4][0] != '*':
127 | bak = expanded[4]
128 | expanded[4] = ['*']
129 | t1 = self._calc(self.cur, expanded, is_prev)
130 | expanded[4] = bak
131 | expanded[2] = ['*']
132 |
133 | t2 = self._calc(self.cur, expanded, is_prev)
134 | if not is_prev:
135 | result = t1 if t1 < t2 else t2
136 | else:
137 | result = t1 if t1 > t2 else t2
138 | else:
139 | result = self._calc(self.cur, expanded, is_prev)
140 | self.cur = result
141 |
142 | if ret_type == datetime:
143 | result = datetime.fromtimestamp(result)
144 | return result
145 |
146 | def _calc(self, now, expanded, is_prev):
147 | if is_prev:
148 | nearest_method = self._get_prev_nearest
149 | nearest_diff_method = self._get_prev_nearest_diff
150 | sign = -1
151 | else:
152 | nearest_method = self._get_next_nearest
153 | nearest_diff_method = self._get_next_nearest_diff
154 | sign = 1
155 |
156 | offset = len(expanded) == 6 and 1 or 60
157 | dst = now = datetime.fromtimestamp(now + sign * offset)
158 |
159 | day, month, year = dst.day, dst.month, dst.year
160 | current_year = now.year
161 | DAYS = self.DAYS
162 |
163 | def proc_month(d):
164 | if expanded[3][0] != '*':
165 | diff_month = nearest_diff_method(month, expanded[3], 12)
166 | days = DAYS[month - 1]
167 | if month == 2 and self.is_leap(year) == True:
168 | days += 1
169 |
170 | reset_day = days if is_prev else 1
171 |
172 | if diff_month != None and diff_month != 0:
173 | if is_prev:
174 | d += relativedelta(months=diff_month)
175 | else:
176 | d += relativedelta(months=diff_month, day=reset_day,
177 | hour=0, minute=0, second=0)
178 | return True, d
179 | return False, d
180 |
181 | def proc_day_of_month(d):
182 | if expanded[2][0] != '*':
183 | days = DAYS[month - 1]
184 | if month == 2 and self.is_leap(year) == True:
185 | days += 1
186 |
187 | diff_day = nearest_diff_method(d.day, expanded[2], days)
188 |
189 | if diff_day != None and diff_day != 0:
190 | if is_prev:
191 | d += relativedelta(days=diff_day)
192 | else:
193 | d += relativedelta(days=diff_day, hour=0, minute=0, second=0)
194 | return True, d
195 | return False, d
196 |
197 | def proc_day_of_week(d):
198 | if expanded[4][0] != '*':
199 | diff_day_of_week = nearest_diff_method(d.isoweekday() % 7, expanded[4], 7)
200 | if diff_day_of_week != None and diff_day_of_week != 0:
201 | if is_prev:
202 | d += relativedelta(days=diff_day_of_week)
203 | else:
204 | d += relativedelta(days=diff_day_of_week, hour=0, minute=0, second=0)
205 | return True, d
206 | return False, d
207 |
208 | def proc_hour(d):
209 | if expanded[1][0] != '*':
210 | diff_hour = nearest_diff_method(d.hour, expanded[1], 24)
211 | if diff_hour != None and diff_hour != 0:
212 | if is_prev:
213 | d += relativedelta(hours = diff_hour)
214 | else:
215 | d += relativedelta(hours = diff_hour, minute=0, second=0)
216 | return True, d
217 | return False, d
218 |
219 | def proc_minute(d):
220 | if expanded[0][0] != '*':
221 | diff_min = nearest_diff_method(d.minute, expanded[0], 60)
222 | if diff_min != None and diff_min != 0:
223 | if is_prev:
224 | d += relativedelta(minutes = diff_min)
225 | else:
226 | d += relativedelta(minutes = diff_min, second=0)
227 | return True, d
228 | return False, d
229 |
230 | def proc_second(d):
231 | if len(expanded) == 6:
232 | if expanded[5][0] != '*':
233 | diff_sec = nearest_diff_method(d.second, expanded[5], 60)
234 | if diff_sec != None and diff_sec != 0:
235 | dst += relativedelta(seconds = diff_sec)
236 | return True, d
237 | else:
238 | d += relativedelta(second = 0)
239 | return False, d
240 |
241 | if is_prev:
242 | procs = [proc_second,
243 | proc_minute,
244 | proc_hour,
245 | proc_day_of_week,
246 | proc_day_of_month,
247 | proc_month]
248 | else:
249 | procs = [proc_month,
250 | proc_day_of_month,
251 | proc_day_of_week,
252 | proc_hour,
253 | proc_minute,
254 | proc_second]
255 |
256 | while abs(year - current_year) <= 1:
257 | next = False
258 | for proc in procs:
259 | (changed, dst) = proc(dst)
260 | if changed:
261 | next = True
262 | break
263 | if next:
264 | continue
265 | return mktime(dst.timetuple())
266 |
267 | raise "failed to find prev date"
268 |
269 | def _get_next_nearest(self, x, to_check):
270 | small = [item for item in to_check if item < x]
271 | large = [item for item in to_check if item >= x]
272 | large.extend(small)
273 | return large[0]
274 |
275 | def _get_prev_nearest(self, x, to_check):
276 | small = [item for item in to_check if item <= x]
277 | large = [item for item in to_check if item > x]
278 | small.reverse()
279 | large.reverse()
280 | small.extend(large)
281 | return small[0]
282 |
283 | def _get_next_nearest_diff(self, x, to_check, range_val):
284 | for i, d in enumerate(to_check):
285 | if d >= x:
286 | return d - x
287 | return to_check[0] - x + range_val
288 |
289 | def _get_prev_nearest_diff(self, x, to_check, range_val):
290 | candidates = to_check[:]
291 | candidates.reverse()
292 | for d in candidates:
293 | if d <= x:
294 | return d - x
295 | return (candidates[0]) - x - range_val
296 |
297 | def is_leap(self, year):
298 | if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
299 | return True
300 | else:
301 | return False
--------------------------------------------------------------------------------
/resources/language/resource.language.kn_in/strings.po:
--------------------------------------------------------------------------------
1 | # Kodi Media Center language file
2 | # Addon Name: Backup
3 | # Addon id: script.xbmcbackup
4 | # Addon Provider: robweber
5 | # Translators:
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: XBMC Addons\n"
9 | "Report-Msgid-Bugs-To: alanwww1@xbmc.org\n"
10 | "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
11 | "PO-Revision-Date: 2017-09-19 14:20+0000\n"
12 | "Last-Translator: Automatically generated\n"
13 | "Language-Team: none\n"
14 | "Language: kn_in\n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 | "Plural-Forms: nplurals=2; plural=n > 1;\n"
19 |
20 | msgctxt "Addon Summary"
21 | msgid "Backup and restore your Kodi database and configuration files in the event of a crash or file corruption."
22 | msgstr ""
23 |
24 | msgctxt "Addon Description"
25 | msgid "Ever hosed your Kodi configuration and wished you'd had a backup? Now you can with one easy click. You can export your database, playlist, thumbnails, addons and other configuration details to any source writeable by Kodi or directly to Dropbox cloud storage. Backups can be run on demand or via a scheduler. "
26 | msgstr ""
27 |
28 | msgctxt "#30010"
29 | msgid "Backup"
30 | msgstr ""
31 |
32 | msgctxt "#30011"
33 | msgid "General"
34 | msgstr ""
35 |
36 | msgctxt "#30012"
37 | msgid "File Selection"
38 | msgstr ""
39 |
40 | msgctxt "#30013"
41 | msgid "Scheduling"
42 | msgstr ""
43 |
44 | msgctxt "#30014"
45 | msgid "Simple"
46 | msgstr ""
47 |
48 | msgctxt "#30015"
49 | msgid "Advanced"
50 | msgstr ""
51 |
52 | msgctxt "#30016"
53 | msgid "Backup"
54 | msgstr ""
55 |
56 | msgctxt "#30017"
57 | msgid "Restore"
58 | msgstr ""
59 |
60 | msgctxt "#30018"
61 | msgid "Browse Path"
62 | msgstr ""
63 |
64 | msgctxt "#30019"
65 | msgid "Type Path"
66 | msgstr ""
67 |
68 | msgctxt "#30020"
69 | msgid "Browse Remote Path"
70 | msgstr ""
71 |
72 | msgctxt "#30021"
73 | msgid "Backup Folder Name"
74 | msgstr ""
75 |
76 | msgctxt "#30022"
77 | msgid "Progress Display"
78 | msgstr ""
79 |
80 | msgctxt "#30023"
81 | msgid "Mode"
82 | msgstr ""
83 |
84 | msgctxt "#30024"
85 | msgid "Type Remote Path"
86 | msgstr ""
87 |
88 | msgctxt "#30025"
89 | msgid "Remote Path Type"
90 | msgstr ""
91 |
92 | msgctxt "#30026"
93 | msgid "Backups to keep (0 for all)"
94 | msgstr ""
95 |
96 | msgctxt "#30027"
97 | msgid "Dropbox"
98 | msgstr ""
99 |
100 | msgctxt "#30028"
101 | msgid "Dropbox Key"
102 | msgstr ""
103 |
104 | msgctxt "#30029"
105 | msgid "Dropbox Secret"
106 | msgstr ""
107 |
108 | msgctxt "#30030"
109 | msgid "User Addons"
110 | msgstr ""
111 |
112 | msgctxt "#30031"
113 | msgid "Addon Data"
114 | msgstr ""
115 |
116 | msgctxt "#30032"
117 | msgid "Database"
118 | msgstr ""
119 |
120 | msgctxt "#30033"
121 | msgid "Playlist"
122 | msgstr ""
123 |
124 | msgctxt "#30034"
125 | msgid "Thumbnails/Fanart"
126 | msgstr ""
127 |
128 | msgctxt "#30035"
129 | msgid "Config Files"
130 | msgstr ""
131 |
132 | msgctxt "#30036"
133 | msgid "Disclaimer"
134 | msgstr ""
135 |
136 | msgctxt "#30037"
137 | msgid "Canceling this menu will close and save changes"
138 | msgstr ""
139 |
140 | msgctxt "#30038"
141 | msgid "Advanced Settings Detected"
142 | msgstr ""
143 |
144 | msgctxt "#30039"
145 | msgid "The advancedsettings file should be restored first"
146 | msgstr ""
147 |
148 | msgctxt "#30040"
149 | msgid "Select Yes to restore this file and restart Kodi"
150 | msgstr ""
151 |
152 | msgctxt "#30041"
153 | msgid "Select No to continue"
154 | msgstr ""
155 |
156 | msgctxt "#30042"
157 | msgid "Resume Restore"
158 | msgstr ""
159 |
160 | msgctxt "#30043"
161 | msgid "The Backup addon has detected an unfinished restore"
162 | msgstr ""
163 |
164 | msgctxt "#30044"
165 | msgid "Would you like to continue?"
166 | msgstr ""
167 |
168 | msgctxt "#30045"
169 | msgid "Error: Remote or zip file path doesn't exist"
170 | msgstr ""
171 |
172 | msgctxt "#30046"
173 | msgid "Starting"
174 | msgstr ""
175 |
176 | msgctxt "#30047"
177 | msgid "Local Dir"
178 | msgstr ""
179 |
180 | msgctxt "#30048"
181 | msgid "Remote Dir"
182 | msgstr ""
183 |
184 | msgctxt "#30049"
185 | msgid "Gathering file list"
186 | msgstr ""
187 |
188 | msgctxt "#30050"
189 | msgid "Remote Path exists - may have old files in it!"
190 | msgstr ""
191 |
192 | msgctxt "#30051"
193 | msgid "Creating Files List"
194 | msgstr ""
195 |
196 | msgctxt "#30052"
197 | msgid "Writing file"
198 | msgstr ""
199 |
200 | msgctxt "#30053"
201 | msgid "Starting scheduled backup"
202 | msgstr ""
203 |
204 | msgctxt "#30054"
205 | msgid "Removing backup"
206 | msgstr ""
207 |
208 | msgctxt "#30056"
209 | msgid "Scan or click this URL to authorize, click OK AFTER completion"
210 | msgstr ""
211 |
212 | msgctxt "#30057"
213 | msgid "Click OK AFTER completion"
214 | msgstr ""
215 |
216 | msgctxt "#30058"
217 | msgid "Developer Code Needed"
218 | msgstr ""
219 |
220 | msgctxt "#30059"
221 | msgid "Visit https://www.dropbox.com/developers"
222 | msgstr ""
223 |
224 | msgctxt "#30060"
225 | msgid "Enable Scheduler"
226 | msgstr ""
227 |
228 | msgctxt "#30061"
229 | msgid "Schedule"
230 | msgstr ""
231 |
232 | msgctxt "#30062"
233 | msgid "Hour of Day"
234 | msgstr ""
235 |
236 | msgctxt "#30063"
237 | msgid "Day of Week"
238 | msgstr ""
239 |
240 | msgctxt "#30064"
241 | msgid "Cron Schedule"
242 | msgstr ""
243 |
244 | msgctxt "#30065"
245 | msgid "Sunday"
246 | msgstr ""
247 |
248 | msgctxt "#30066"
249 | msgid "Monday"
250 | msgstr ""
251 |
252 | msgctxt "#30067"
253 | msgid "Tuesday"
254 | msgstr ""
255 |
256 | msgctxt "#30068"
257 | msgid "Wednesday"
258 | msgstr ""
259 |
260 | msgctxt "#30069"
261 | msgid "Thursday"
262 | msgstr ""
263 |
264 | msgctxt "#30070"
265 | msgid "Friday"
266 | msgstr ""
267 |
268 | msgctxt "#30071"
269 | msgid "Saturday"
270 | msgstr ""
271 |
272 | msgctxt "#30072"
273 | msgid "Every Day"
274 | msgstr ""
275 |
276 | msgctxt "#30073"
277 | msgid "Every Week"
278 | msgstr ""
279 |
280 | msgctxt "#30074"
281 | msgid "First Day of Month"
282 | msgstr ""
283 |
284 | msgctxt "#30075"
285 | msgid "Custom Schedule"
286 | msgstr ""
287 |
288 | msgctxt "#30076"
289 | msgid "Shutdown After Backup"
290 | msgstr ""
291 |
292 | msgctxt "#30077"
293 | msgid "Restart Kodi"
294 | msgstr ""
295 |
296 | msgctxt "#30078"
297 | msgid "You should restart Kodi to continue"
298 | msgstr ""
299 |
300 | msgctxt "#30079"
301 | msgid "Just Today"
302 | msgstr ""
303 |
304 | msgctxt "#30080"
305 | msgid "Profiles"
306 | msgstr ""
307 |
308 | msgctxt "#30081"
309 | msgid "Scheduler will run again on"
310 | msgstr ""
311 |
312 | msgctxt "#30082"
313 | msgid "Progress Bar"
314 | msgstr ""
315 |
316 | msgctxt "#30083"
317 | msgid "Background Progress Bar"
318 | msgstr ""
319 |
320 | msgctxt "#30084"
321 | msgid "None (Silent)"
322 | msgstr ""
323 |
324 | msgctxt "#30085"
325 | msgid "Version Warning"
326 | msgstr ""
327 |
328 | msgctxt "#30086"
329 | msgid "This version of Kodi is different than the one used to create the archive"
330 | msgstr ""
331 |
332 | msgctxt "#30087"
333 | msgid "Compress Archives"
334 | msgstr ""
335 |
336 | msgctxt "#30088"
337 | msgid "Copying Zip Archive"
338 | msgstr ""
339 |
340 | msgctxt "#30089"
341 | msgid "Write Error Detected"
342 | msgstr ""
343 |
344 | msgctxt "#30090"
345 | msgid "The destination may not be writeable"
346 | msgstr ""
347 |
348 | msgctxt "#30091"
349 | msgid "Zip archive could not be copied"
350 | msgstr ""
351 |
352 | msgctxt "#30092"
353 | msgid "Not all files were copied"
354 | msgstr ""
355 |
356 | msgctxt "#30093"
357 | msgid "Delete Authorization Info"
358 | msgstr ""
359 |
360 | msgctxt "#30094"
361 | msgid "This will delete any OAuth token files"
362 | msgstr ""
363 |
364 | msgctxt "#30095"
365 | msgid "Do you want to do this?"
366 | msgstr ""
367 |
368 | msgctxt "#30096"
369 | msgid "Old Zip Archive could not be deleted"
370 | msgstr ""
371 |
372 | msgctxt "#30097"
373 | msgid "This needs to happen before a backup can run"
374 | msgstr ""
375 |
376 | msgctxt "#30098"
377 | msgid "Google Drive"
378 | msgstr ""
379 |
380 | msgctxt "#30099"
381 | msgid "Open Settings"
382 | msgstr ""
383 |
384 | msgctxt "#30100"
385 | msgid "Extracting Archive"
386 | msgstr ""
387 |
388 | msgctxt "#30101"
389 | msgid "Error extracting the zip archive"
390 | msgstr ""
391 |
392 | msgctxt "#30102"
393 | msgid "Click OK to enter code"
394 | msgstr ""
395 |
396 | msgctxt "#30103"
397 | msgid "Validation Code"
398 | msgstr ""
399 |
400 | msgctxt "#30104"
401 | msgid "Authorize Now"
402 | msgstr ""
403 |
404 | msgctxt "#30105"
405 | msgid "Authorize this remote service in the settings first"
406 | msgstr ""
407 |
408 | msgctxt "#30106"
409 | msgid "is authorized"
410 | msgstr ""
411 |
412 | msgctxt "#30107"
413 | msgid "error authorizing"
414 | msgstr ""
415 |
416 | msgctxt "#30108"
417 | msgid "Visit https://console.developers.google.com/"
418 | msgstr ""
419 |
420 | msgctxt "#30109"
421 | msgid "Run on startup if missed"
422 | msgstr ""
423 |
424 | msgctxt "#30110"
425 | msgid "Set Name"
426 | msgstr ""
427 |
428 | msgctxt "#30111"
429 | msgid "Root folder selection"
430 | msgstr ""
431 |
432 | msgctxt "#30112"
433 | msgid "Browse Folder"
434 | msgstr ""
435 |
436 | msgctxt "#30113"
437 | msgid "Enter Own"
438 | msgstr ""
439 |
440 | msgctxt "#30114"
441 | msgid "starts in Kodi home"
442 | msgstr ""
443 |
444 | msgctxt "#30115"
445 | msgid "enter path to start there"
446 | msgstr ""
447 |
448 | msgctxt "#30116"
449 | msgid "Enter root path"
450 | msgstr ""
451 |
452 | msgctxt "#30117"
453 | msgid "Path Error"
454 | msgstr ""
455 |
456 | msgctxt "#30118"
457 | msgid "Path does not exist"
458 | msgstr ""
459 |
460 | msgctxt "#30119"
461 | msgid "Select root"
462 | msgstr ""
463 |
464 | msgctxt "#30120"
465 | msgid "Add Exclude Folder"
466 | msgstr ""
467 |
468 | msgctxt "#30121"
469 | msgid "Root Folder"
470 | msgstr ""
471 |
472 | msgctxt "#30122"
473 | msgid "Edit"
474 | msgstr ""
475 |
476 | msgctxt "#30123"
477 | msgid "Delete"
478 | msgstr ""
479 |
480 | msgctxt "#30124"
481 | msgid "Choose Action"
482 | msgstr ""
483 |
484 | msgctxt "#30125"
485 | msgid "Advanced Editor"
486 | msgstr ""
487 |
488 | msgctxt "#30126"
489 | msgid "Add Set"
490 | msgstr ""
491 |
492 | msgctxt "#30127"
493 | msgid "Delete Set"
494 | msgstr ""
495 |
496 | msgctxt "#30128"
497 | msgid "Are you sure you want to delete?"
498 | msgstr ""
499 |
500 | msgctxt "#30129"
501 | msgid "Exclude"
502 | msgstr ""
503 |
504 | msgctxt "#30130"
505 | msgid "The root folder cannot be changed"
506 | msgstr ""
507 |
508 | msgctxt "#30131"
509 | msgid "Choose Sets to Restore"
510 | msgstr ""
511 |
512 | msgctxt "#30132"
513 | msgid "Version 1.5.0 requires you to setup your file selections again - this is a breaking change"
514 | msgstr ""
515 |
516 | msgctxt "#30133"
517 | msgid "Game Saves"
518 | msgstr ""
519 |
520 | msgctxt "#30134"
521 | msgid "Include"
522 | msgstr ""
523 |
524 | msgctxt "#30135"
525 | msgid "Add Include Folder"
526 | msgstr ""
527 |
528 | msgctxt "#30136"
529 | msgid "Path must be within root folder"
530 | msgstr ""
531 |
532 | msgctxt "#30137"
533 | msgid "This path is part of a rule already"
534 | msgstr ""
535 |
536 | msgctxt "#30138"
537 | msgid "Set Name exists already"
538 | msgstr ""
539 |
540 | msgctxt "#30139"
541 | msgid "Copy Simple Config"
542 | msgstr ""
543 |
544 | msgctxt "#30140"
545 | msgid "This will copy the default Simple file selection to the Advanced Editor"
546 | msgstr ""
547 |
548 | msgctxt "#30141"
549 | msgid "This will erase any current Advanced Editor settings"
550 | msgstr ""
551 |
552 | msgctxt "#30142"
553 | msgid "Enable Verbose Logging"
554 | msgstr ""
555 |
556 | msgctxt "#30143"
557 | msgid "Exclude a specific folder from this backup set"
558 | msgstr ""
559 |
560 | msgctxt "#30144"
561 | msgid "Include a specific folder to this backup set"
562 | msgstr ""
563 |
564 | msgctxt "#30145"
565 | msgid "Type"
566 | msgstr ""
567 |
568 | msgctxt "#30146"
569 | msgid "Include Sub Folders"
570 | msgstr ""
571 |
572 | msgctxt "#30147"
573 | msgid "Toggle Sub Folders"
574 | msgstr ""
575 |
576 | msgctxt "#30148"
577 | msgid "Ask before restoring Kodi UI settings"
578 | msgstr ""
579 |
580 | msgctxt "#30149"
581 | msgid "Restore Kodi UI Settings"
582 | msgstr ""
583 |
584 | msgctxt "#30150"
585 | msgid "Restore saved Kodi system settings from backup?"
586 | msgstr ""
587 |
588 | msgctxt "#30151"
589 | msgid "Enable Verbose Logging"
590 | msgstr ""
591 |
592 | msgctxt "#30152"
593 | msgid "Set Zip File Location"
594 | msgstr ""
595 |
596 | msgctxt "#30153"
597 | msgid "Full path to where the zip file will be staged during backup or restore - must be local to this device"
598 | msgstr ""
599 |
600 | msgctxt "#30154"
601 | msgid "Always prompt if Kodi settings should be restored - no by default"
602 | msgstr ""
603 |
604 | msgctxt "#30155"
605 | msgid "Adds additional information to the log file"
606 | msgstr ""
607 |
608 | msgctxt "#30156"
609 | msgid "Must save key/secret first, then return to settings to authorize"
610 | msgstr ""
611 |
612 | msgctxt "#30157"
613 | msgid "Simple uses pre-defined folder locations, use Advanced Editor to define custom paths"
614 | msgstr ""
615 |
616 | msgctxt "#30158"
617 | msgid "Run backup on daily, weekly, monthly, or custom schedule"
618 | msgstr ""
619 |
620 | msgctxt "#30159"
621 | msgid "Backup started with unknown mode"
622 | msgstr ""
623 |
624 | msgctxt "#30160"
625 | msgid "Backup Filename Suffix"
626 | msgstr ""
627 |
628 | msgctxt "#30161"
629 | msgid "Amend a string to the end of each backup folder or ZIP file"
630 | msgstr ""
631 |
--------------------------------------------------------------------------------
/resources/language/resource.language.mi/strings.po:
--------------------------------------------------------------------------------
1 | # Kodi Media Center language file
2 | # Addon Name: Backup
3 | # Addon id: script.xbmcbackup
4 | # Addon Provider: robweber
5 | # Translators:
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: XBMC Addons\n"
9 | "Report-Msgid-Bugs-To: alanwww1@xbmc.org\n"
10 | "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
11 | "PO-Revision-Date: 2022-03-09 14:05+0000\n"
12 | "Last-Translator: Christian Gade \n"
13 | "Language-Team: Maori \n"
14 | "Language: mi\n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 | "Plural-Forms: nplurals=2; plural=n > 1;\n"
19 | "X-Generator: Weblate 4.11.2\n"
20 |
21 | msgctxt "Addon Summary"
22 | msgid "Backup and restore your Kodi database and configuration files in the event of a crash or file corruption."
23 | msgstr ""
24 |
25 | msgctxt "Addon Description"
26 | msgid "Ever hosed your Kodi configuration and wished you'd had a backup? Now you can with one easy click. You can export your database, playlist, thumbnails, addons and other configuration details to any source writeable by Kodi or directly to Dropbox cloud storage. Backups can be run on demand or via a scheduler. "
27 | msgstr ""
28 |
29 | msgctxt "#30010"
30 | msgid "Backup"
31 | msgstr ""
32 |
33 | msgctxt "#30011"
34 | msgid "General"
35 | msgstr "Āhuawhānui"
36 |
37 | msgctxt "#30012"
38 | msgid "File Selection"
39 | msgstr ""
40 |
41 | msgctxt "#30013"
42 | msgid "Scheduling"
43 | msgstr ""
44 |
45 | msgctxt "#30014"
46 | msgid "Simple"
47 | msgstr ""
48 |
49 | msgctxt "#30015"
50 | msgid "Advanced"
51 | msgstr ""
52 |
53 | msgctxt "#30016"
54 | msgid "Backup"
55 | msgstr ""
56 |
57 | msgctxt "#30017"
58 | msgid "Restore"
59 | msgstr ""
60 |
61 | msgctxt "#30018"
62 | msgid "Browse Path"
63 | msgstr ""
64 |
65 | msgctxt "#30019"
66 | msgid "Type Path"
67 | msgstr ""
68 |
69 | msgctxt "#30020"
70 | msgid "Browse Remote Path"
71 | msgstr ""
72 |
73 | msgctxt "#30021"
74 | msgid "Backup Folder Name"
75 | msgstr ""
76 |
77 | msgctxt "#30022"
78 | msgid "Progress Display"
79 | msgstr ""
80 |
81 | msgctxt "#30023"
82 | msgid "Mode"
83 | msgstr ""
84 |
85 | msgctxt "#30024"
86 | msgid "Type Remote Path"
87 | msgstr ""
88 |
89 | msgctxt "#30025"
90 | msgid "Remote Path Type"
91 | msgstr ""
92 |
93 | msgctxt "#30026"
94 | msgid "Backups to keep (0 for all)"
95 | msgstr ""
96 |
97 | msgctxt "#30027"
98 | msgid "Dropbox"
99 | msgstr ""
100 |
101 | msgctxt "#30028"
102 | msgid "Dropbox Key"
103 | msgstr ""
104 |
105 | msgctxt "#30029"
106 | msgid "Dropbox Secret"
107 | msgstr ""
108 |
109 | msgctxt "#30030"
110 | msgid "User Addons"
111 | msgstr ""
112 |
113 | msgctxt "#30031"
114 | msgid "Addon Data"
115 | msgstr ""
116 |
117 | msgctxt "#30032"
118 | msgid "Database"
119 | msgstr ""
120 |
121 | msgctxt "#30033"
122 | msgid "Playlist"
123 | msgstr ""
124 |
125 | msgctxt "#30034"
126 | msgid "Thumbnails/Fanart"
127 | msgstr ""
128 |
129 | msgctxt "#30035"
130 | msgid "Config Files"
131 | msgstr ""
132 |
133 | msgctxt "#30036"
134 | msgid "Disclaimer"
135 | msgstr ""
136 |
137 | msgctxt "#30037"
138 | msgid "Canceling this menu will close and save changes"
139 | msgstr ""
140 |
141 | msgctxt "#30038"
142 | msgid "Advanced Settings Detected"
143 | msgstr ""
144 |
145 | msgctxt "#30039"
146 | msgid "The advancedsettings file should be restored first"
147 | msgstr ""
148 |
149 | msgctxt "#30040"
150 | msgid "Select Yes to restore this file and restart Kodi"
151 | msgstr ""
152 |
153 | msgctxt "#30041"
154 | msgid "Select No to continue"
155 | msgstr ""
156 |
157 | msgctxt "#30042"
158 | msgid "Resume Restore"
159 | msgstr ""
160 |
161 | msgctxt "#30043"
162 | msgid "The Backup addon has detected an unfinished restore"
163 | msgstr ""
164 |
165 | msgctxt "#30044"
166 | msgid "Would you like to continue?"
167 | msgstr ""
168 |
169 | msgctxt "#30045"
170 | msgid "Error: Remote or zip file path doesn't exist"
171 | msgstr ""
172 |
173 | msgctxt "#30046"
174 | msgid "Starting"
175 | msgstr ""
176 |
177 | msgctxt "#30047"
178 | msgid "Local Dir"
179 | msgstr ""
180 |
181 | msgctxt "#30048"
182 | msgid "Remote Dir"
183 | msgstr ""
184 |
185 | msgctxt "#30049"
186 | msgid "Gathering file list"
187 | msgstr ""
188 |
189 | msgctxt "#30050"
190 | msgid "Remote Path exists - may have old files in it!"
191 | msgstr ""
192 |
193 | msgctxt "#30051"
194 | msgid "Creating Files List"
195 | msgstr ""
196 |
197 | msgctxt "#30052"
198 | msgid "Writing file"
199 | msgstr ""
200 |
201 | msgctxt "#30053"
202 | msgid "Starting scheduled backup"
203 | msgstr ""
204 |
205 | msgctxt "#30054"
206 | msgid "Removing backup"
207 | msgstr ""
208 |
209 | msgctxt "#30056"
210 | msgid "Scan or click this URL to authorize, click OK AFTER completion"
211 | msgstr ""
212 |
213 | msgctxt "#30057"
214 | msgid "Click OK AFTER completion"
215 | msgstr ""
216 |
217 | msgctxt "#30058"
218 | msgid "Developer Code Needed"
219 | msgstr ""
220 |
221 | msgctxt "#30059"
222 | msgid "Visit https://www.dropbox.com/developers"
223 | msgstr ""
224 |
225 | msgctxt "#30060"
226 | msgid "Enable Scheduler"
227 | msgstr ""
228 |
229 | msgctxt "#30061"
230 | msgid "Schedule"
231 | msgstr ""
232 |
233 | msgctxt "#30062"
234 | msgid "Hour of Day"
235 | msgstr ""
236 |
237 | msgctxt "#30063"
238 | msgid "Day of Week"
239 | msgstr ""
240 |
241 | msgctxt "#30064"
242 | msgid "Cron Schedule"
243 | msgstr ""
244 |
245 | msgctxt "#30065"
246 | msgid "Sunday"
247 | msgstr ""
248 |
249 | msgctxt "#30066"
250 | msgid "Monday"
251 | msgstr ""
252 |
253 | msgctxt "#30067"
254 | msgid "Tuesday"
255 | msgstr ""
256 |
257 | msgctxt "#30068"
258 | msgid "Wednesday"
259 | msgstr ""
260 |
261 | msgctxt "#30069"
262 | msgid "Thursday"
263 | msgstr ""
264 |
265 | msgctxt "#30070"
266 | msgid "Friday"
267 | msgstr ""
268 |
269 | msgctxt "#30071"
270 | msgid "Saturday"
271 | msgstr ""
272 |
273 | msgctxt "#30072"
274 | msgid "Every Day"
275 | msgstr ""
276 |
277 | msgctxt "#30073"
278 | msgid "Every Week"
279 | msgstr ""
280 |
281 | msgctxt "#30074"
282 | msgid "First Day of Month"
283 | msgstr ""
284 |
285 | msgctxt "#30075"
286 | msgid "Custom Schedule"
287 | msgstr ""
288 |
289 | msgctxt "#30076"
290 | msgid "Shutdown After Backup"
291 | msgstr ""
292 |
293 | msgctxt "#30077"
294 | msgid "Restart Kodi"
295 | msgstr ""
296 |
297 | msgctxt "#30078"
298 | msgid "You should restart Kodi to continue"
299 | msgstr ""
300 |
301 | msgctxt "#30079"
302 | msgid "Just Today"
303 | msgstr ""
304 |
305 | msgctxt "#30080"
306 | msgid "Profiles"
307 | msgstr ""
308 |
309 | msgctxt "#30081"
310 | msgid "Scheduler will run again on"
311 | msgstr ""
312 |
313 | msgctxt "#30082"
314 | msgid "Progress Bar"
315 | msgstr ""
316 |
317 | msgctxt "#30083"
318 | msgid "Background Progress Bar"
319 | msgstr ""
320 |
321 | msgctxt "#30084"
322 | msgid "None (Silent)"
323 | msgstr ""
324 |
325 | msgctxt "#30085"
326 | msgid "Version Warning"
327 | msgstr ""
328 |
329 | msgctxt "#30086"
330 | msgid "This version of Kodi is different than the one used to create the archive"
331 | msgstr ""
332 |
333 | msgctxt "#30087"
334 | msgid "Compress Archives"
335 | msgstr ""
336 |
337 | msgctxt "#30088"
338 | msgid "Copying Zip Archive"
339 | msgstr ""
340 |
341 | msgctxt "#30089"
342 | msgid "Write Error Detected"
343 | msgstr ""
344 |
345 | msgctxt "#30090"
346 | msgid "The destination may not be writeable"
347 | msgstr ""
348 |
349 | msgctxt "#30091"
350 | msgid "Zip archive could not be copied"
351 | msgstr ""
352 |
353 | msgctxt "#30092"
354 | msgid "Not all files were copied"
355 | msgstr ""
356 |
357 | msgctxt "#30093"
358 | msgid "Delete Authorization Info"
359 | msgstr ""
360 |
361 | msgctxt "#30094"
362 | msgid "This will delete any OAuth token files"
363 | msgstr ""
364 |
365 | msgctxt "#30095"
366 | msgid "Do you want to do this?"
367 | msgstr ""
368 |
369 | msgctxt "#30096"
370 | msgid "Old Zip Archive could not be deleted"
371 | msgstr ""
372 |
373 | msgctxt "#30097"
374 | msgid "This needs to happen before a backup can run"
375 | msgstr ""
376 |
377 | msgctxt "#30098"
378 | msgid "Google Drive"
379 | msgstr ""
380 |
381 | msgctxt "#30099"
382 | msgid "Open Settings"
383 | msgstr ""
384 |
385 | msgctxt "#30100"
386 | msgid "Extracting Archive"
387 | msgstr ""
388 |
389 | msgctxt "#30101"
390 | msgid "Error extracting the zip archive"
391 | msgstr ""
392 |
393 | msgctxt "#30102"
394 | msgid "Click OK to enter code"
395 | msgstr ""
396 |
397 | msgctxt "#30103"
398 | msgid "Validation Code"
399 | msgstr ""
400 |
401 | msgctxt "#30104"
402 | msgid "Authorize Now"
403 | msgstr ""
404 |
405 | msgctxt "#30105"
406 | msgid "Authorize this remote service in the settings first"
407 | msgstr ""
408 |
409 | msgctxt "#30106"
410 | msgid "is authorized"
411 | msgstr ""
412 |
413 | msgctxt "#30107"
414 | msgid "error authorizing"
415 | msgstr ""
416 |
417 | msgctxt "#30108"
418 | msgid "Visit https://console.developers.google.com/"
419 | msgstr ""
420 |
421 | msgctxt "#30109"
422 | msgid "Run on startup if missed"
423 | msgstr ""
424 |
425 | msgctxt "#30110"
426 | msgid "Set Name"
427 | msgstr ""
428 |
429 | msgctxt "#30111"
430 | msgid "Root folder selection"
431 | msgstr ""
432 |
433 | msgctxt "#30112"
434 | msgid "Browse Folder"
435 | msgstr ""
436 |
437 | msgctxt "#30113"
438 | msgid "Enter Own"
439 | msgstr ""
440 |
441 | msgctxt "#30114"
442 | msgid "starts in Kodi home"
443 | msgstr ""
444 |
445 | msgctxt "#30115"
446 | msgid "enter path to start there"
447 | msgstr ""
448 |
449 | msgctxt "#30116"
450 | msgid "Enter root path"
451 | msgstr ""
452 |
453 | msgctxt "#30117"
454 | msgid "Path Error"
455 | msgstr ""
456 |
457 | msgctxt "#30118"
458 | msgid "Path does not exist"
459 | msgstr ""
460 |
461 | msgctxt "#30119"
462 | msgid "Select root"
463 | msgstr ""
464 |
465 | msgctxt "#30120"
466 | msgid "Add Exclude Folder"
467 | msgstr ""
468 |
469 | msgctxt "#30121"
470 | msgid "Root Folder"
471 | msgstr ""
472 |
473 | msgctxt "#30122"
474 | msgid "Edit"
475 | msgstr ""
476 |
477 | msgctxt "#30123"
478 | msgid "Delete"
479 | msgstr ""
480 |
481 | msgctxt "#30124"
482 | msgid "Choose Action"
483 | msgstr ""
484 |
485 | msgctxt "#30125"
486 | msgid "Advanced Editor"
487 | msgstr ""
488 |
489 | msgctxt "#30126"
490 | msgid "Add Set"
491 | msgstr ""
492 |
493 | msgctxt "#30127"
494 | msgid "Delete Set"
495 | msgstr ""
496 |
497 | msgctxt "#30128"
498 | msgid "Are you sure you want to delete?"
499 | msgstr ""
500 |
501 | msgctxt "#30129"
502 | msgid "Exclude"
503 | msgstr ""
504 |
505 | msgctxt "#30130"
506 | msgid "The root folder cannot be changed"
507 | msgstr ""
508 |
509 | msgctxt "#30131"
510 | msgid "Choose Sets to Restore"
511 | msgstr ""
512 |
513 | msgctxt "#30132"
514 | msgid "Version 1.5.0 requires you to setup your file selections again - this is a breaking change"
515 | msgstr ""
516 |
517 | msgctxt "#30133"
518 | msgid "Game Saves"
519 | msgstr ""
520 |
521 | msgctxt "#30134"
522 | msgid "Include"
523 | msgstr ""
524 |
525 | msgctxt "#30135"
526 | msgid "Add Include Folder"
527 | msgstr ""
528 |
529 | msgctxt "#30136"
530 | msgid "Path must be within root folder"
531 | msgstr ""
532 |
533 | msgctxt "#30137"
534 | msgid "This path is part of a rule already"
535 | msgstr ""
536 |
537 | msgctxt "#30138"
538 | msgid "Set Name exists already"
539 | msgstr ""
540 |
541 | msgctxt "#30139"
542 | msgid "Copy Simple Config"
543 | msgstr ""
544 |
545 | msgctxt "#30140"
546 | msgid "This will copy the default Simple file selection to the Advanced Editor"
547 | msgstr ""
548 |
549 | msgctxt "#30141"
550 | msgid "This will erase any current Advanced Editor settings"
551 | msgstr ""
552 |
553 | msgctxt "#30142"
554 | msgid "Enable Verbose Logging"
555 | msgstr ""
556 |
557 | msgctxt "#30143"
558 | msgid "Exclude a specific folder from this backup set"
559 | msgstr ""
560 |
561 | msgctxt "#30144"
562 | msgid "Include a specific folder to this backup set"
563 | msgstr ""
564 |
565 | msgctxt "#30145"
566 | msgid "Type"
567 | msgstr ""
568 |
569 | msgctxt "#30146"
570 | msgid "Include Sub Folders"
571 | msgstr ""
572 |
573 | msgctxt "#30147"
574 | msgid "Toggle Sub Folders"
575 | msgstr ""
576 |
577 | msgctxt "#30148"
578 | msgid "Ask before restoring Kodi UI settings"
579 | msgstr ""
580 |
581 | msgctxt "#30149"
582 | msgid "Restore Kodi UI Settings"
583 | msgstr ""
584 |
585 | msgctxt "#30150"
586 | msgid "Restore saved Kodi system settings from backup?"
587 | msgstr ""
588 |
589 | msgctxt "#30151"
590 | msgid "Enable Verbose Logging"
591 | msgstr ""
592 |
593 | msgctxt "#30152"
594 | msgid "Set Zip File Location"
595 | msgstr ""
596 |
597 | msgctxt "#30153"
598 | msgid "Full path to where the zip file will be staged during backup or restore - must be local to this device"
599 | msgstr ""
600 |
601 | msgctxt "#30154"
602 | msgid "Always prompt if Kodi settings should be restored - no by default"
603 | msgstr ""
604 |
605 | msgctxt "#30155"
606 | msgid "Adds additional information to the log file"
607 | msgstr ""
608 |
609 | msgctxt "#30156"
610 | msgid "Must save key/secret first, then return to settings to authorize"
611 | msgstr ""
612 |
613 | msgctxt "#30157"
614 | msgid "Simple uses pre-defined folder locations, use Advanced Editor to define custom paths"
615 | msgstr ""
616 |
617 | msgctxt "#30158"
618 | msgid "Run backup on daily, weekly, monthly, or custom schedule"
619 | msgstr ""
620 |
621 | msgctxt "#30159"
622 | msgid "Backup started with unknown mode"
623 | msgstr ""
624 |
625 | msgctxt "#30160"
626 | msgid "Backup Filename Suffix"
627 | msgstr ""
628 |
629 | msgctxt "#30161"
630 | msgid "Amend a string to the end of each backup folder or ZIP file"
631 | msgstr ""
632 |
--------------------------------------------------------------------------------
/resources/language/resource.language.tg_tj/strings.po:
--------------------------------------------------------------------------------
1 | # Kodi Media Center language file
2 | # Addon Name: Backup
3 | # Addon id: script.xbmcbackup
4 | # Addon Provider: robweber
5 | # Translators:
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: XBMC Addons\n"
9 | "Report-Msgid-Bugs-To: alanwww1@xbmc.org\n"
10 | "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
11 | "PO-Revision-Date: 2022-04-04 00:13+0000\n"
12 | "Last-Translator: Christian Gade \n"
13 | "Language-Team: Tajik \n"
14 | "Language: tg_tj\n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 | "Plural-Forms: nplurals=1; plural=0;\n"
19 | "X-Generator: Weblate 4.11.2\n"
20 |
21 | msgctxt "Addon Summary"
22 | msgid "Backup and restore your Kodi database and configuration files in the event of a crash or file corruption."
23 | msgstr ""
24 |
25 | msgctxt "Addon Description"
26 | msgid "Ever hosed your Kodi configuration and wished you'd had a backup? Now you can with one easy click. You can export your database, playlist, thumbnails, addons and other configuration details to any source writeable by Kodi or directly to Dropbox cloud storage. Backups can be run on demand or via a scheduler. "
27 | msgstr ""
28 |
29 | msgctxt "#30010"
30 | msgid "Backup"
31 | msgstr ""
32 |
33 | msgctxt "#30011"
34 | msgid "General"
35 | msgstr "Умумӣ"
36 |
37 | msgctxt "#30012"
38 | msgid "File Selection"
39 | msgstr ""
40 |
41 | msgctxt "#30013"
42 | msgid "Scheduling"
43 | msgstr ""
44 |
45 | msgctxt "#30014"
46 | msgid "Simple"
47 | msgstr ""
48 |
49 | msgctxt "#30015"
50 | msgid "Advanced"
51 | msgstr ""
52 |
53 | msgctxt "#30016"
54 | msgid "Backup"
55 | msgstr ""
56 |
57 | msgctxt "#30017"
58 | msgid "Restore"
59 | msgstr ""
60 |
61 | msgctxt "#30018"
62 | msgid "Browse Path"
63 | msgstr ""
64 |
65 | msgctxt "#30019"
66 | msgid "Type Path"
67 | msgstr ""
68 |
69 | msgctxt "#30020"
70 | msgid "Browse Remote Path"
71 | msgstr ""
72 |
73 | msgctxt "#30021"
74 | msgid "Backup Folder Name"
75 | msgstr ""
76 |
77 | msgctxt "#30022"
78 | msgid "Progress Display"
79 | msgstr ""
80 |
81 | msgctxt "#30023"
82 | msgid "Mode"
83 | msgstr ""
84 |
85 | msgctxt "#30024"
86 | msgid "Type Remote Path"
87 | msgstr ""
88 |
89 | msgctxt "#30025"
90 | msgid "Remote Path Type"
91 | msgstr ""
92 |
93 | msgctxt "#30026"
94 | msgid "Backups to keep (0 for all)"
95 | msgstr ""
96 |
97 | msgctxt "#30027"
98 | msgid "Dropbox"
99 | msgstr ""
100 |
101 | msgctxt "#30028"
102 | msgid "Dropbox Key"
103 | msgstr ""
104 |
105 | msgctxt "#30029"
106 | msgid "Dropbox Secret"
107 | msgstr ""
108 |
109 | msgctxt "#30030"
110 | msgid "User Addons"
111 | msgstr ""
112 |
113 | msgctxt "#30031"
114 | msgid "Addon Data"
115 | msgstr ""
116 |
117 | msgctxt "#30032"
118 | msgid "Database"
119 | msgstr ""
120 |
121 | msgctxt "#30033"
122 | msgid "Playlist"
123 | msgstr ""
124 |
125 | msgctxt "#30034"
126 | msgid "Thumbnails/Fanart"
127 | msgstr ""
128 |
129 | msgctxt "#30035"
130 | msgid "Config Files"
131 | msgstr ""
132 |
133 | msgctxt "#30036"
134 | msgid "Disclaimer"
135 | msgstr ""
136 |
137 | msgctxt "#30037"
138 | msgid "Canceling this menu will close and save changes"
139 | msgstr ""
140 |
141 | msgctxt "#30038"
142 | msgid "Advanced Settings Detected"
143 | msgstr ""
144 |
145 | msgctxt "#30039"
146 | msgid "The advancedsettings file should be restored first"
147 | msgstr ""
148 |
149 | msgctxt "#30040"
150 | msgid "Select Yes to restore this file and restart Kodi"
151 | msgstr ""
152 |
153 | msgctxt "#30041"
154 | msgid "Select No to continue"
155 | msgstr ""
156 |
157 | msgctxt "#30042"
158 | msgid "Resume Restore"
159 | msgstr ""
160 |
161 | msgctxt "#30043"
162 | msgid "The Backup addon has detected an unfinished restore"
163 | msgstr ""
164 |
165 | msgctxt "#30044"
166 | msgid "Would you like to continue?"
167 | msgstr ""
168 |
169 | msgctxt "#30045"
170 | msgid "Error: Remote or zip file path doesn't exist"
171 | msgstr ""
172 |
173 | msgctxt "#30046"
174 | msgid "Starting"
175 | msgstr ""
176 |
177 | msgctxt "#30047"
178 | msgid "Local Dir"
179 | msgstr ""
180 |
181 | msgctxt "#30048"
182 | msgid "Remote Dir"
183 | msgstr ""
184 |
185 | msgctxt "#30049"
186 | msgid "Gathering file list"
187 | msgstr ""
188 |
189 | msgctxt "#30050"
190 | msgid "Remote Path exists - may have old files in it!"
191 | msgstr ""
192 |
193 | msgctxt "#30051"
194 | msgid "Creating Files List"
195 | msgstr ""
196 |
197 | msgctxt "#30052"
198 | msgid "Writing file"
199 | msgstr ""
200 |
201 | msgctxt "#30053"
202 | msgid "Starting scheduled backup"
203 | msgstr ""
204 |
205 | msgctxt "#30054"
206 | msgid "Removing backup"
207 | msgstr ""
208 |
209 | msgctxt "#30056"
210 | msgid "Scan or click this URL to authorize, click OK AFTER completion"
211 | msgstr ""
212 |
213 | msgctxt "#30057"
214 | msgid "Click OK AFTER completion"
215 | msgstr ""
216 |
217 | msgctxt "#30058"
218 | msgid "Developer Code Needed"
219 | msgstr ""
220 |
221 | msgctxt "#30059"
222 | msgid "Visit https://www.dropbox.com/developers"
223 | msgstr ""
224 |
225 | msgctxt "#30060"
226 | msgid "Enable Scheduler"
227 | msgstr ""
228 |
229 | msgctxt "#30061"
230 | msgid "Schedule"
231 | msgstr ""
232 |
233 | msgctxt "#30062"
234 | msgid "Hour of Day"
235 | msgstr ""
236 |
237 | msgctxt "#30063"
238 | msgid "Day of Week"
239 | msgstr ""
240 |
241 | msgctxt "#30064"
242 | msgid "Cron Schedule"
243 | msgstr ""
244 |
245 | msgctxt "#30065"
246 | msgid "Sunday"
247 | msgstr ""
248 |
249 | msgctxt "#30066"
250 | msgid "Monday"
251 | msgstr ""
252 |
253 | msgctxt "#30067"
254 | msgid "Tuesday"
255 | msgstr ""
256 |
257 | msgctxt "#30068"
258 | msgid "Wednesday"
259 | msgstr ""
260 |
261 | msgctxt "#30069"
262 | msgid "Thursday"
263 | msgstr ""
264 |
265 | msgctxt "#30070"
266 | msgid "Friday"
267 | msgstr ""
268 |
269 | msgctxt "#30071"
270 | msgid "Saturday"
271 | msgstr ""
272 |
273 | msgctxt "#30072"
274 | msgid "Every Day"
275 | msgstr ""
276 |
277 | msgctxt "#30073"
278 | msgid "Every Week"
279 | msgstr ""
280 |
281 | msgctxt "#30074"
282 | msgid "First Day of Month"
283 | msgstr ""
284 |
285 | msgctxt "#30075"
286 | msgid "Custom Schedule"
287 | msgstr ""
288 |
289 | msgctxt "#30076"
290 | msgid "Shutdown After Backup"
291 | msgstr ""
292 |
293 | msgctxt "#30077"
294 | msgid "Restart Kodi"
295 | msgstr ""
296 |
297 | msgctxt "#30078"
298 | msgid "You should restart Kodi to continue"
299 | msgstr ""
300 |
301 | msgctxt "#30079"
302 | msgid "Just Today"
303 | msgstr ""
304 |
305 | msgctxt "#30080"
306 | msgid "Profiles"
307 | msgstr ""
308 |
309 | msgctxt "#30081"
310 | msgid "Scheduler will run again on"
311 | msgstr ""
312 |
313 | msgctxt "#30082"
314 | msgid "Progress Bar"
315 | msgstr ""
316 |
317 | msgctxt "#30083"
318 | msgid "Background Progress Bar"
319 | msgstr ""
320 |
321 | msgctxt "#30084"
322 | msgid "None (Silent)"
323 | msgstr ""
324 |
325 | msgctxt "#30085"
326 | msgid "Version Warning"
327 | msgstr ""
328 |
329 | msgctxt "#30086"
330 | msgid "This version of Kodi is different than the one used to create the archive"
331 | msgstr ""
332 |
333 | msgctxt "#30087"
334 | msgid "Compress Archives"
335 | msgstr ""
336 |
337 | msgctxt "#30088"
338 | msgid "Copying Zip Archive"
339 | msgstr ""
340 |
341 | msgctxt "#30089"
342 | msgid "Write Error Detected"
343 | msgstr ""
344 |
345 | msgctxt "#30090"
346 | msgid "The destination may not be writeable"
347 | msgstr ""
348 |
349 | msgctxt "#30091"
350 | msgid "Zip archive could not be copied"
351 | msgstr ""
352 |
353 | msgctxt "#30092"
354 | msgid "Not all files were copied"
355 | msgstr ""
356 |
357 | msgctxt "#30093"
358 | msgid "Delete Authorization Info"
359 | msgstr ""
360 |
361 | msgctxt "#30094"
362 | msgid "This will delete any OAuth token files"
363 | msgstr ""
364 |
365 | msgctxt "#30095"
366 | msgid "Do you want to do this?"
367 | msgstr ""
368 |
369 | msgctxt "#30096"
370 | msgid "Old Zip Archive could not be deleted"
371 | msgstr ""
372 |
373 | msgctxt "#30097"
374 | msgid "This needs to happen before a backup can run"
375 | msgstr ""
376 |
377 | msgctxt "#30098"
378 | msgid "Google Drive"
379 | msgstr ""
380 |
381 | msgctxt "#30099"
382 | msgid "Open Settings"
383 | msgstr ""
384 |
385 | msgctxt "#30100"
386 | msgid "Extracting Archive"
387 | msgstr ""
388 |
389 | msgctxt "#30101"
390 | msgid "Error extracting the zip archive"
391 | msgstr ""
392 |
393 | msgctxt "#30102"
394 | msgid "Click OK to enter code"
395 | msgstr ""
396 |
397 | msgctxt "#30103"
398 | msgid "Validation Code"
399 | msgstr ""
400 |
401 | msgctxt "#30104"
402 | msgid "Authorize Now"
403 | msgstr ""
404 |
405 | msgctxt "#30105"
406 | msgid "Authorize this remote service in the settings first"
407 | msgstr ""
408 |
409 | msgctxt "#30106"
410 | msgid "is authorized"
411 | msgstr ""
412 |
413 | msgctxt "#30107"
414 | msgid "error authorizing"
415 | msgstr ""
416 |
417 | msgctxt "#30108"
418 | msgid "Visit https://console.developers.google.com/"
419 | msgstr ""
420 |
421 | msgctxt "#30109"
422 | msgid "Run on startup if missed"
423 | msgstr ""
424 |
425 | msgctxt "#30110"
426 | msgid "Set Name"
427 | msgstr ""
428 |
429 | msgctxt "#30111"
430 | msgid "Root folder selection"
431 | msgstr ""
432 |
433 | msgctxt "#30112"
434 | msgid "Browse Folder"
435 | msgstr ""
436 |
437 | msgctxt "#30113"
438 | msgid "Enter Own"
439 | msgstr ""
440 |
441 | msgctxt "#30114"
442 | msgid "starts in Kodi home"
443 | msgstr ""
444 |
445 | msgctxt "#30115"
446 | msgid "enter path to start there"
447 | msgstr ""
448 |
449 | msgctxt "#30116"
450 | msgid "Enter root path"
451 | msgstr ""
452 |
453 | msgctxt "#30117"
454 | msgid "Path Error"
455 | msgstr ""
456 |
457 | msgctxt "#30118"
458 | msgid "Path does not exist"
459 | msgstr ""
460 |
461 | msgctxt "#30119"
462 | msgid "Select root"
463 | msgstr ""
464 |
465 | msgctxt "#30120"
466 | msgid "Add Exclude Folder"
467 | msgstr ""
468 |
469 | msgctxt "#30121"
470 | msgid "Root Folder"
471 | msgstr ""
472 |
473 | msgctxt "#30122"
474 | msgid "Edit"
475 | msgstr ""
476 |
477 | msgctxt "#30123"
478 | msgid "Delete"
479 | msgstr ""
480 |
481 | msgctxt "#30124"
482 | msgid "Choose Action"
483 | msgstr ""
484 |
485 | msgctxt "#30125"
486 | msgid "Advanced Editor"
487 | msgstr ""
488 |
489 | msgctxt "#30126"
490 | msgid "Add Set"
491 | msgstr ""
492 |
493 | msgctxt "#30127"
494 | msgid "Delete Set"
495 | msgstr ""
496 |
497 | msgctxt "#30128"
498 | msgid "Are you sure you want to delete?"
499 | msgstr ""
500 |
501 | msgctxt "#30129"
502 | msgid "Exclude"
503 | msgstr ""
504 |
505 | msgctxt "#30130"
506 | msgid "The root folder cannot be changed"
507 | msgstr ""
508 |
509 | msgctxt "#30131"
510 | msgid "Choose Sets to Restore"
511 | msgstr ""
512 |
513 | msgctxt "#30132"
514 | msgid "Version 1.5.0 requires you to setup your file selections again - this is a breaking change"
515 | msgstr ""
516 |
517 | msgctxt "#30133"
518 | msgid "Game Saves"
519 | msgstr ""
520 |
521 | msgctxt "#30134"
522 | msgid "Include"
523 | msgstr ""
524 |
525 | msgctxt "#30135"
526 | msgid "Add Include Folder"
527 | msgstr ""
528 |
529 | msgctxt "#30136"
530 | msgid "Path must be within root folder"
531 | msgstr ""
532 |
533 | msgctxt "#30137"
534 | msgid "This path is part of a rule already"
535 | msgstr ""
536 |
537 | msgctxt "#30138"
538 | msgid "Set Name exists already"
539 | msgstr ""
540 |
541 | msgctxt "#30139"
542 | msgid "Copy Simple Config"
543 | msgstr ""
544 |
545 | msgctxt "#30140"
546 | msgid "This will copy the default Simple file selection to the Advanced Editor"
547 | msgstr ""
548 |
549 | msgctxt "#30141"
550 | msgid "This will erase any current Advanced Editor settings"
551 | msgstr ""
552 |
553 | msgctxt "#30142"
554 | msgid "Enable Verbose Logging"
555 | msgstr ""
556 |
557 | msgctxt "#30143"
558 | msgid "Exclude a specific folder from this backup set"
559 | msgstr ""
560 |
561 | msgctxt "#30144"
562 | msgid "Include a specific folder to this backup set"
563 | msgstr ""
564 |
565 | msgctxt "#30145"
566 | msgid "Type"
567 | msgstr ""
568 |
569 | msgctxt "#30146"
570 | msgid "Include Sub Folders"
571 | msgstr ""
572 |
573 | msgctxt "#30147"
574 | msgid "Toggle Sub Folders"
575 | msgstr ""
576 |
577 | msgctxt "#30148"
578 | msgid "Ask before restoring Kodi UI settings"
579 | msgstr ""
580 |
581 | msgctxt "#30149"
582 | msgid "Restore Kodi UI Settings"
583 | msgstr ""
584 |
585 | msgctxt "#30150"
586 | msgid "Restore saved Kodi system settings from backup?"
587 | msgstr ""
588 |
589 | msgctxt "#30151"
590 | msgid "Enable Verbose Logging"
591 | msgstr ""
592 |
593 | msgctxt "#30152"
594 | msgid "Set Zip File Location"
595 | msgstr ""
596 |
597 | msgctxt "#30153"
598 | msgid "Full path to where the zip file will be staged during backup or restore - must be local to this device"
599 | msgstr ""
600 |
601 | msgctxt "#30154"
602 | msgid "Always prompt if Kodi settings should be restored - no by default"
603 | msgstr ""
604 |
605 | msgctxt "#30155"
606 | msgid "Adds additional information to the log file"
607 | msgstr ""
608 |
609 | msgctxt "#30156"
610 | msgid "Must save key/secret first, then return to settings to authorize"
611 | msgstr ""
612 |
613 | msgctxt "#30157"
614 | msgid "Simple uses pre-defined folder locations, use Advanced Editor to define custom paths"
615 | msgstr ""
616 |
617 | msgctxt "#30158"
618 | msgid "Run backup on daily, weekly, monthly, or custom schedule"
619 | msgstr ""
620 |
621 | msgctxt "#30159"
622 | msgid "Backup started with unknown mode"
623 | msgstr ""
624 |
625 | msgctxt "#30160"
626 | msgid "Backup Filename Suffix"
627 | msgstr ""
628 |
629 | msgctxt "#30161"
630 | msgid "Amend a string to the end of each backup folder or ZIP file"
631 | msgstr ""
632 |
--------------------------------------------------------------------------------
/resources/language/resource.language.cy_gb/strings.po:
--------------------------------------------------------------------------------
1 | # Kodi Media Center language file
2 | # Addon Name: Backup
3 | # Addon id: script.xbmcbackup
4 | # Addon Provider: robweber
5 | # Translators:
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: XBMC Addons\n"
9 | "Report-Msgid-Bugs-To: alanwww1@xbmc.org\n"
10 | "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
11 | "PO-Revision-Date: 2017-09-21 18:34+0000\n"
12 | "Last-Translator: Martijn Kaijser \n"
13 | "Language-Team: Welsh (http://www.transifex.com/teamxbmc/xbmc-addons/language/cy/)\n"
14 | "Language: cy\n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 | "Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;\n"
19 |
20 | msgctxt "Addon Summary"
21 | msgid "Backup and restore your Kodi database and configuration files in the event of a crash or file corruption."
22 | msgstr ""
23 |
24 | msgctxt "Addon Description"
25 | msgid "Ever hosed your Kodi configuration and wished you'd had a backup? Now you can with one easy click. You can export your database, playlist, thumbnails, addons and other configuration details to any source writeable by Kodi or directly to Dropbox cloud storage. Backups can be run on demand or via a scheduler. "
26 | msgstr ""
27 |
28 | msgctxt "#30010"
29 | msgid "Backup"
30 | msgstr ""
31 |
32 | msgctxt "#30011"
33 | msgid "General"
34 | msgstr "Cyffredinol"
35 |
36 | msgctxt "#30012"
37 | msgid "File Selection"
38 | msgstr ""
39 |
40 | msgctxt "#30013"
41 | msgid "Scheduling"
42 | msgstr ""
43 |
44 | msgctxt "#30014"
45 | msgid "Simple"
46 | msgstr ""
47 |
48 | msgctxt "#30015"
49 | msgid "Advanced"
50 | msgstr ""
51 |
52 | msgctxt "#30016"
53 | msgid "Backup"
54 | msgstr ""
55 |
56 | msgctxt "#30017"
57 | msgid "Restore"
58 | msgstr ""
59 |
60 | msgctxt "#30018"
61 | msgid "Browse Path"
62 | msgstr ""
63 |
64 | msgctxt "#30019"
65 | msgid "Type Path"
66 | msgstr ""
67 |
68 | msgctxt "#30020"
69 | msgid "Browse Remote Path"
70 | msgstr ""
71 |
72 | msgctxt "#30021"
73 | msgid "Backup Folder Name"
74 | msgstr ""
75 |
76 | msgctxt "#30022"
77 | msgid "Progress Display"
78 | msgstr ""
79 |
80 | msgctxt "#30023"
81 | msgid "Mode"
82 | msgstr ""
83 |
84 | msgctxt "#30024"
85 | msgid "Type Remote Path"
86 | msgstr ""
87 |
88 | msgctxt "#30025"
89 | msgid "Remote Path Type"
90 | msgstr ""
91 |
92 | msgctxt "#30026"
93 | msgid "Backups to keep (0 for all)"
94 | msgstr ""
95 |
96 | msgctxt "#30027"
97 | msgid "Dropbox"
98 | msgstr ""
99 |
100 | msgctxt "#30028"
101 | msgid "Dropbox Key"
102 | msgstr ""
103 |
104 | msgctxt "#30029"
105 | msgid "Dropbox Secret"
106 | msgstr ""
107 |
108 | msgctxt "#30030"
109 | msgid "User Addons"
110 | msgstr ""
111 |
112 | msgctxt "#30031"
113 | msgid "Addon Data"
114 | msgstr ""
115 |
116 | msgctxt "#30032"
117 | msgid "Database"
118 | msgstr ""
119 |
120 | msgctxt "#30033"
121 | msgid "Playlist"
122 | msgstr ""
123 |
124 | msgctxt "#30034"
125 | msgid "Thumbnails/Fanart"
126 | msgstr ""
127 |
128 | msgctxt "#30035"
129 | msgid "Config Files"
130 | msgstr ""
131 |
132 | msgctxt "#30036"
133 | msgid "Disclaimer"
134 | msgstr ""
135 |
136 | msgctxt "#30037"
137 | msgid "Canceling this menu will close and save changes"
138 | msgstr ""
139 |
140 | msgctxt "#30038"
141 | msgid "Advanced Settings Detected"
142 | msgstr ""
143 |
144 | msgctxt "#30039"
145 | msgid "The advancedsettings file should be restored first"
146 | msgstr ""
147 |
148 | msgctxt "#30040"
149 | msgid "Select Yes to restore this file and restart Kodi"
150 | msgstr ""
151 |
152 | msgctxt "#30041"
153 | msgid "Select No to continue"
154 | msgstr ""
155 |
156 | msgctxt "#30042"
157 | msgid "Resume Restore"
158 | msgstr ""
159 |
160 | msgctxt "#30043"
161 | msgid "The Backup addon has detected an unfinished restore"
162 | msgstr ""
163 |
164 | msgctxt "#30044"
165 | msgid "Would you like to continue?"
166 | msgstr ""
167 |
168 | msgctxt "#30045"
169 | msgid "Error: Remote or zip file path doesn't exist"
170 | msgstr ""
171 |
172 | msgctxt "#30046"
173 | msgid "Starting"
174 | msgstr ""
175 |
176 | msgctxt "#30047"
177 | msgid "Local Dir"
178 | msgstr ""
179 |
180 | msgctxt "#30048"
181 | msgid "Remote Dir"
182 | msgstr ""
183 |
184 | msgctxt "#30049"
185 | msgid "Gathering file list"
186 | msgstr ""
187 |
188 | msgctxt "#30050"
189 | msgid "Remote Path exists - may have old files in it!"
190 | msgstr ""
191 |
192 | msgctxt "#30051"
193 | msgid "Creating Files List"
194 | msgstr ""
195 |
196 | msgctxt "#30052"
197 | msgid "Writing file"
198 | msgstr ""
199 |
200 | msgctxt "#30053"
201 | msgid "Starting scheduled backup"
202 | msgstr ""
203 |
204 | msgctxt "#30054"
205 | msgid "Removing backup"
206 | msgstr ""
207 |
208 | msgctxt "#30056"
209 | msgid "Scan or click this URL to authorize, click OK AFTER completion"
210 | msgstr ""
211 |
212 | msgctxt "#30057"
213 | msgid "Click OK AFTER completion"
214 | msgstr ""
215 |
216 | msgctxt "#30058"
217 | msgid "Developer Code Needed"
218 | msgstr ""
219 |
220 | msgctxt "#30059"
221 | msgid "Visit https://www.dropbox.com/developers"
222 | msgstr ""
223 |
224 | msgctxt "#30060"
225 | msgid "Enable Scheduler"
226 | msgstr ""
227 |
228 | msgctxt "#30061"
229 | msgid "Schedule"
230 | msgstr ""
231 |
232 | msgctxt "#30062"
233 | msgid "Hour of Day"
234 | msgstr ""
235 |
236 | msgctxt "#30063"
237 | msgid "Day of Week"
238 | msgstr ""
239 |
240 | msgctxt "#30064"
241 | msgid "Cron Schedule"
242 | msgstr ""
243 |
244 | msgctxt "#30065"
245 | msgid "Sunday"
246 | msgstr ""
247 |
248 | msgctxt "#30066"
249 | msgid "Monday"
250 | msgstr ""
251 |
252 | msgctxt "#30067"
253 | msgid "Tuesday"
254 | msgstr ""
255 |
256 | msgctxt "#30068"
257 | msgid "Wednesday"
258 | msgstr ""
259 |
260 | msgctxt "#30069"
261 | msgid "Thursday"
262 | msgstr ""
263 |
264 | msgctxt "#30070"
265 | msgid "Friday"
266 | msgstr ""
267 |
268 | msgctxt "#30071"
269 | msgid "Saturday"
270 | msgstr ""
271 |
272 | msgctxt "#30072"
273 | msgid "Every Day"
274 | msgstr ""
275 |
276 | msgctxt "#30073"
277 | msgid "Every Week"
278 | msgstr ""
279 |
280 | msgctxt "#30074"
281 | msgid "First Day of Month"
282 | msgstr ""
283 |
284 | msgctxt "#30075"
285 | msgid "Custom Schedule"
286 | msgstr ""
287 |
288 | msgctxt "#30076"
289 | msgid "Shutdown After Backup"
290 | msgstr ""
291 |
292 | msgctxt "#30077"
293 | msgid "Restart Kodi"
294 | msgstr ""
295 |
296 | msgctxt "#30078"
297 | msgid "You should restart Kodi to continue"
298 | msgstr ""
299 |
300 | msgctxt "#30079"
301 | msgid "Just Today"
302 | msgstr ""
303 |
304 | msgctxt "#30080"
305 | msgid "Profiles"
306 | msgstr ""
307 |
308 | msgctxt "#30081"
309 | msgid "Scheduler will run again on"
310 | msgstr ""
311 |
312 | msgctxt "#30082"
313 | msgid "Progress Bar"
314 | msgstr ""
315 |
316 | msgctxt "#30083"
317 | msgid "Background Progress Bar"
318 | msgstr ""
319 |
320 | msgctxt "#30084"
321 | msgid "None (Silent)"
322 | msgstr ""
323 |
324 | msgctxt "#30085"
325 | msgid "Version Warning"
326 | msgstr ""
327 |
328 | msgctxt "#30086"
329 | msgid "This version of Kodi is different than the one used to create the archive"
330 | msgstr ""
331 |
332 | msgctxt "#30087"
333 | msgid "Compress Archives"
334 | msgstr ""
335 |
336 | msgctxt "#30088"
337 | msgid "Copying Zip Archive"
338 | msgstr ""
339 |
340 | msgctxt "#30089"
341 | msgid "Write Error Detected"
342 | msgstr ""
343 |
344 | msgctxt "#30090"
345 | msgid "The destination may not be writeable"
346 | msgstr ""
347 |
348 | msgctxt "#30091"
349 | msgid "Zip archive could not be copied"
350 | msgstr ""
351 |
352 | msgctxt "#30092"
353 | msgid "Not all files were copied"
354 | msgstr ""
355 |
356 | msgctxt "#30093"
357 | msgid "Delete Authorization Info"
358 | msgstr ""
359 |
360 | msgctxt "#30094"
361 | msgid "This will delete any OAuth token files"
362 | msgstr ""
363 |
364 | msgctxt "#30095"
365 | msgid "Do you want to do this?"
366 | msgstr ""
367 |
368 | msgctxt "#30096"
369 | msgid "Old Zip Archive could not be deleted"
370 | msgstr ""
371 |
372 | msgctxt "#30097"
373 | msgid "This needs to happen before a backup can run"
374 | msgstr ""
375 |
376 | msgctxt "#30098"
377 | msgid "Google Drive"
378 | msgstr ""
379 |
380 | msgctxt "#30099"
381 | msgid "Open Settings"
382 | msgstr ""
383 |
384 | msgctxt "#30100"
385 | msgid "Extracting Archive"
386 | msgstr ""
387 |
388 | msgctxt "#30101"
389 | msgid "Error extracting the zip archive"
390 | msgstr ""
391 |
392 | msgctxt "#30102"
393 | msgid "Click OK to enter code"
394 | msgstr ""
395 |
396 | msgctxt "#30103"
397 | msgid "Validation Code"
398 | msgstr ""
399 |
400 | msgctxt "#30104"
401 | msgid "Authorize Now"
402 | msgstr ""
403 |
404 | msgctxt "#30105"
405 | msgid "Authorize this remote service in the settings first"
406 | msgstr ""
407 |
408 | msgctxt "#30106"
409 | msgid "is authorized"
410 | msgstr ""
411 |
412 | msgctxt "#30107"
413 | msgid "error authorizing"
414 | msgstr ""
415 |
416 | msgctxt "#30108"
417 | msgid "Visit https://console.developers.google.com/"
418 | msgstr ""
419 |
420 | msgctxt "#30109"
421 | msgid "Run on startup if missed"
422 | msgstr ""
423 |
424 | msgctxt "#30110"
425 | msgid "Set Name"
426 | msgstr ""
427 |
428 | msgctxt "#30111"
429 | msgid "Root folder selection"
430 | msgstr ""
431 |
432 | msgctxt "#30112"
433 | msgid "Browse Folder"
434 | msgstr ""
435 |
436 | msgctxt "#30113"
437 | msgid "Enter Own"
438 | msgstr ""
439 |
440 | msgctxt "#30114"
441 | msgid "starts in Kodi home"
442 | msgstr ""
443 |
444 | msgctxt "#30115"
445 | msgid "enter path to start there"
446 | msgstr ""
447 |
448 | msgctxt "#30116"
449 | msgid "Enter root path"
450 | msgstr ""
451 |
452 | msgctxt "#30117"
453 | msgid "Path Error"
454 | msgstr ""
455 |
456 | msgctxt "#30118"
457 | msgid "Path does not exist"
458 | msgstr ""
459 |
460 | msgctxt "#30119"
461 | msgid "Select root"
462 | msgstr ""
463 |
464 | msgctxt "#30120"
465 | msgid "Add Exclude Folder"
466 | msgstr ""
467 |
468 | msgctxt "#30121"
469 | msgid "Root Folder"
470 | msgstr ""
471 |
472 | msgctxt "#30122"
473 | msgid "Edit"
474 | msgstr ""
475 |
476 | msgctxt "#30123"
477 | msgid "Delete"
478 | msgstr ""
479 |
480 | msgctxt "#30124"
481 | msgid "Choose Action"
482 | msgstr ""
483 |
484 | msgctxt "#30125"
485 | msgid "Advanced Editor"
486 | msgstr ""
487 |
488 | msgctxt "#30126"
489 | msgid "Add Set"
490 | msgstr ""
491 |
492 | msgctxt "#30127"
493 | msgid "Delete Set"
494 | msgstr ""
495 |
496 | msgctxt "#30128"
497 | msgid "Are you sure you want to delete?"
498 | msgstr ""
499 |
500 | msgctxt "#30129"
501 | msgid "Exclude"
502 | msgstr ""
503 |
504 | msgctxt "#30130"
505 | msgid "The root folder cannot be changed"
506 | msgstr ""
507 |
508 | msgctxt "#30131"
509 | msgid "Choose Sets to Restore"
510 | msgstr ""
511 |
512 | msgctxt "#30132"
513 | msgid "Version 1.5.0 requires you to setup your file selections again - this is a breaking change"
514 | msgstr ""
515 |
516 | msgctxt "#30133"
517 | msgid "Game Saves"
518 | msgstr ""
519 |
520 | msgctxt "#30134"
521 | msgid "Include"
522 | msgstr ""
523 |
524 | msgctxt "#30135"
525 | msgid "Add Include Folder"
526 | msgstr ""
527 |
528 | msgctxt "#30136"
529 | msgid "Path must be within root folder"
530 | msgstr ""
531 |
532 | msgctxt "#30137"
533 | msgid "This path is part of a rule already"
534 | msgstr ""
535 |
536 | msgctxt "#30138"
537 | msgid "Set Name exists already"
538 | msgstr ""
539 |
540 | msgctxt "#30139"
541 | msgid "Copy Simple Config"
542 | msgstr ""
543 |
544 | msgctxt "#30140"
545 | msgid "This will copy the default Simple file selection to the Advanced Editor"
546 | msgstr ""
547 |
548 | msgctxt "#30141"
549 | msgid "This will erase any current Advanced Editor settings"
550 | msgstr ""
551 |
552 | msgctxt "#30142"
553 | msgid "Enable Verbose Logging"
554 | msgstr ""
555 |
556 | msgctxt "#30143"
557 | msgid "Exclude a specific folder from this backup set"
558 | msgstr ""
559 |
560 | msgctxt "#30144"
561 | msgid "Include a specific folder to this backup set"
562 | msgstr ""
563 |
564 | msgctxt "#30145"
565 | msgid "Type"
566 | msgstr ""
567 |
568 | msgctxt "#30146"
569 | msgid "Include Sub Folders"
570 | msgstr ""
571 |
572 | msgctxt "#30147"
573 | msgid "Toggle Sub Folders"
574 | msgstr ""
575 |
576 | msgctxt "#30148"
577 | msgid "Ask before restoring Kodi UI settings"
578 | msgstr ""
579 |
580 | msgctxt "#30149"
581 | msgid "Restore Kodi UI Settings"
582 | msgstr ""
583 |
584 | msgctxt "#30150"
585 | msgid "Restore saved Kodi system settings from backup?"
586 | msgstr ""
587 |
588 | msgctxt "#30151"
589 | msgid "Enable Verbose Logging"
590 | msgstr ""
591 |
592 | msgctxt "#30152"
593 | msgid "Set Zip File Location"
594 | msgstr ""
595 |
596 | msgctxt "#30153"
597 | msgid "Full path to where the zip file will be staged during backup or restore - must be local to this device"
598 | msgstr ""
599 |
600 | msgctxt "#30154"
601 | msgid "Always prompt if Kodi settings should be restored - no by default"
602 | msgstr ""
603 |
604 | msgctxt "#30155"
605 | msgid "Adds additional information to the log file"
606 | msgstr ""
607 |
608 | msgctxt "#30156"
609 | msgid "Must save key/secret first, then return to settings to authorize"
610 | msgstr ""
611 |
612 | msgctxt "#30157"
613 | msgid "Simple uses pre-defined folder locations, use Advanced Editor to define custom paths"
614 | msgstr ""
615 |
616 | msgctxt "#30158"
617 | msgid "Run backup on daily, weekly, monthly, or custom schedule"
618 | msgstr ""
619 |
620 | msgctxt "#30159"
621 | msgid "Backup started with unknown mode"
622 | msgstr ""
623 |
624 | msgctxt "#30160"
625 | msgid "Backup Filename Suffix"
626 | msgstr ""
627 |
628 | msgctxt "#30161"
629 | msgid "Amend a string to the end of each backup folder or ZIP file"
630 | msgstr ""
631 |
--------------------------------------------------------------------------------
/resources/language/resource.language.os_os/strings.po:
--------------------------------------------------------------------------------
1 | # Kodi Media Center language file
2 | # Addon Name: Backup
3 | # Addon id: script.xbmcbackup
4 | # Addon Provider: robweber
5 | # Translators:
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: XBMC Addons\n"
9 | "Report-Msgid-Bugs-To: alanwww1@xbmc.org\n"
10 | "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
11 | "PO-Revision-Date: 2022-03-09 14:05+0000\n"
12 | "Last-Translator: Christian Gade \n"
13 | "Language-Team: Ossetian \n"
14 | "Language: os_os\n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 | "Plural-Forms: nplurals=2; plural=n != 1;\n"
19 | "X-Generator: Weblate 4.11.2\n"
20 |
21 | msgctxt "Addon Summary"
22 | msgid "Backup and restore your Kodi database and configuration files in the event of a crash or file corruption."
23 | msgstr ""
24 |
25 | msgctxt "Addon Description"
26 | msgid "Ever hosed your Kodi configuration and wished you'd had a backup? Now you can with one easy click. You can export your database, playlist, thumbnails, addons and other configuration details to any source writeable by Kodi or directly to Dropbox cloud storage. Backups can be run on demand or via a scheduler. "
27 | msgstr ""
28 |
29 | msgctxt "#30010"
30 | msgid "Backup"
31 | msgstr ""
32 |
33 | msgctxt "#30011"
34 | msgid "General"
35 | msgstr "Сӕйраг"
36 |
37 | msgctxt "#30012"
38 | msgid "File Selection"
39 | msgstr ""
40 |
41 | msgctxt "#30013"
42 | msgid "Scheduling"
43 | msgstr ""
44 |
45 | msgctxt "#30014"
46 | msgid "Simple"
47 | msgstr ""
48 |
49 | msgctxt "#30015"
50 | msgid "Advanced"
51 | msgstr ""
52 |
53 | msgctxt "#30016"
54 | msgid "Backup"
55 | msgstr ""
56 |
57 | msgctxt "#30017"
58 | msgid "Restore"
59 | msgstr ""
60 |
61 | msgctxt "#30018"
62 | msgid "Browse Path"
63 | msgstr ""
64 |
65 | msgctxt "#30019"
66 | msgid "Type Path"
67 | msgstr ""
68 |
69 | msgctxt "#30020"
70 | msgid "Browse Remote Path"
71 | msgstr ""
72 |
73 | msgctxt "#30021"
74 | msgid "Backup Folder Name"
75 | msgstr ""
76 |
77 | msgctxt "#30022"
78 | msgid "Progress Display"
79 | msgstr ""
80 |
81 | msgctxt "#30023"
82 | msgid "Mode"
83 | msgstr ""
84 |
85 | msgctxt "#30024"
86 | msgid "Type Remote Path"
87 | msgstr ""
88 |
89 | msgctxt "#30025"
90 | msgid "Remote Path Type"
91 | msgstr ""
92 |
93 | msgctxt "#30026"
94 | msgid "Backups to keep (0 for all)"
95 | msgstr ""
96 |
97 | msgctxt "#30027"
98 | msgid "Dropbox"
99 | msgstr ""
100 |
101 | msgctxt "#30028"
102 | msgid "Dropbox Key"
103 | msgstr ""
104 |
105 | msgctxt "#30029"
106 | msgid "Dropbox Secret"
107 | msgstr ""
108 |
109 | msgctxt "#30030"
110 | msgid "User Addons"
111 | msgstr ""
112 |
113 | msgctxt "#30031"
114 | msgid "Addon Data"
115 | msgstr ""
116 |
117 | msgctxt "#30032"
118 | msgid "Database"
119 | msgstr ""
120 |
121 | msgctxt "#30033"
122 | msgid "Playlist"
123 | msgstr ""
124 |
125 | msgctxt "#30034"
126 | msgid "Thumbnails/Fanart"
127 | msgstr ""
128 |
129 | msgctxt "#30035"
130 | msgid "Config Files"
131 | msgstr ""
132 |
133 | msgctxt "#30036"
134 | msgid "Disclaimer"
135 | msgstr ""
136 |
137 | msgctxt "#30037"
138 | msgid "Canceling this menu will close and save changes"
139 | msgstr ""
140 |
141 | msgctxt "#30038"
142 | msgid "Advanced Settings Detected"
143 | msgstr ""
144 |
145 | msgctxt "#30039"
146 | msgid "The advancedsettings file should be restored first"
147 | msgstr ""
148 |
149 | msgctxt "#30040"
150 | msgid "Select Yes to restore this file and restart Kodi"
151 | msgstr ""
152 |
153 | msgctxt "#30041"
154 | msgid "Select No to continue"
155 | msgstr ""
156 |
157 | msgctxt "#30042"
158 | msgid "Resume Restore"
159 | msgstr ""
160 |
161 | msgctxt "#30043"
162 | msgid "The Backup addon has detected an unfinished restore"
163 | msgstr ""
164 |
165 | msgctxt "#30044"
166 | msgid "Would you like to continue?"
167 | msgstr ""
168 |
169 | msgctxt "#30045"
170 | msgid "Error: Remote or zip file path doesn't exist"
171 | msgstr ""
172 |
173 | msgctxt "#30046"
174 | msgid "Starting"
175 | msgstr ""
176 |
177 | msgctxt "#30047"
178 | msgid "Local Dir"
179 | msgstr ""
180 |
181 | msgctxt "#30048"
182 | msgid "Remote Dir"
183 | msgstr ""
184 |
185 | msgctxt "#30049"
186 | msgid "Gathering file list"
187 | msgstr ""
188 |
189 | msgctxt "#30050"
190 | msgid "Remote Path exists - may have old files in it!"
191 | msgstr ""
192 |
193 | msgctxt "#30051"
194 | msgid "Creating Files List"
195 | msgstr ""
196 |
197 | msgctxt "#30052"
198 | msgid "Writing file"
199 | msgstr ""
200 |
201 | msgctxt "#30053"
202 | msgid "Starting scheduled backup"
203 | msgstr ""
204 |
205 | msgctxt "#30054"
206 | msgid "Removing backup"
207 | msgstr ""
208 |
209 | msgctxt "#30056"
210 | msgid "Scan or click this URL to authorize, click OK AFTER completion"
211 | msgstr ""
212 |
213 | msgctxt "#30057"
214 | msgid "Click OK AFTER completion"
215 | msgstr ""
216 |
217 | msgctxt "#30058"
218 | msgid "Developer Code Needed"
219 | msgstr ""
220 |
221 | msgctxt "#30059"
222 | msgid "Visit https://www.dropbox.com/developers"
223 | msgstr ""
224 |
225 | msgctxt "#30060"
226 | msgid "Enable Scheduler"
227 | msgstr ""
228 |
229 | msgctxt "#30061"
230 | msgid "Schedule"
231 | msgstr ""
232 |
233 | msgctxt "#30062"
234 | msgid "Hour of Day"
235 | msgstr ""
236 |
237 | msgctxt "#30063"
238 | msgid "Day of Week"
239 | msgstr ""
240 |
241 | msgctxt "#30064"
242 | msgid "Cron Schedule"
243 | msgstr ""
244 |
245 | msgctxt "#30065"
246 | msgid "Sunday"
247 | msgstr ""
248 |
249 | msgctxt "#30066"
250 | msgid "Monday"
251 | msgstr ""
252 |
253 | msgctxt "#30067"
254 | msgid "Tuesday"
255 | msgstr ""
256 |
257 | msgctxt "#30068"
258 | msgid "Wednesday"
259 | msgstr ""
260 |
261 | msgctxt "#30069"
262 | msgid "Thursday"
263 | msgstr ""
264 |
265 | msgctxt "#30070"
266 | msgid "Friday"
267 | msgstr ""
268 |
269 | msgctxt "#30071"
270 | msgid "Saturday"
271 | msgstr ""
272 |
273 | msgctxt "#30072"
274 | msgid "Every Day"
275 | msgstr ""
276 |
277 | msgctxt "#30073"
278 | msgid "Every Week"
279 | msgstr ""
280 |
281 | msgctxt "#30074"
282 | msgid "First Day of Month"
283 | msgstr ""
284 |
285 | msgctxt "#30075"
286 | msgid "Custom Schedule"
287 | msgstr ""
288 |
289 | msgctxt "#30076"
290 | msgid "Shutdown After Backup"
291 | msgstr ""
292 |
293 | msgctxt "#30077"
294 | msgid "Restart Kodi"
295 | msgstr ""
296 |
297 | msgctxt "#30078"
298 | msgid "You should restart Kodi to continue"
299 | msgstr ""
300 |
301 | msgctxt "#30079"
302 | msgid "Just Today"
303 | msgstr ""
304 |
305 | msgctxt "#30080"
306 | msgid "Profiles"
307 | msgstr ""
308 |
309 | msgctxt "#30081"
310 | msgid "Scheduler will run again on"
311 | msgstr ""
312 |
313 | msgctxt "#30082"
314 | msgid "Progress Bar"
315 | msgstr ""
316 |
317 | msgctxt "#30083"
318 | msgid "Background Progress Bar"
319 | msgstr ""
320 |
321 | msgctxt "#30084"
322 | msgid "None (Silent)"
323 | msgstr ""
324 |
325 | msgctxt "#30085"
326 | msgid "Version Warning"
327 | msgstr ""
328 |
329 | msgctxt "#30086"
330 | msgid "This version of Kodi is different than the one used to create the archive"
331 | msgstr ""
332 |
333 | msgctxt "#30087"
334 | msgid "Compress Archives"
335 | msgstr ""
336 |
337 | msgctxt "#30088"
338 | msgid "Copying Zip Archive"
339 | msgstr ""
340 |
341 | msgctxt "#30089"
342 | msgid "Write Error Detected"
343 | msgstr ""
344 |
345 | msgctxt "#30090"
346 | msgid "The destination may not be writeable"
347 | msgstr ""
348 |
349 | msgctxt "#30091"
350 | msgid "Zip archive could not be copied"
351 | msgstr ""
352 |
353 | msgctxt "#30092"
354 | msgid "Not all files were copied"
355 | msgstr ""
356 |
357 | msgctxt "#30093"
358 | msgid "Delete Authorization Info"
359 | msgstr ""
360 |
361 | msgctxt "#30094"
362 | msgid "This will delete any OAuth token files"
363 | msgstr ""
364 |
365 | msgctxt "#30095"
366 | msgid "Do you want to do this?"
367 | msgstr ""
368 |
369 | msgctxt "#30096"
370 | msgid "Old Zip Archive could not be deleted"
371 | msgstr ""
372 |
373 | msgctxt "#30097"
374 | msgid "This needs to happen before a backup can run"
375 | msgstr ""
376 |
377 | msgctxt "#30098"
378 | msgid "Google Drive"
379 | msgstr ""
380 |
381 | msgctxt "#30099"
382 | msgid "Open Settings"
383 | msgstr ""
384 |
385 | msgctxt "#30100"
386 | msgid "Extracting Archive"
387 | msgstr ""
388 |
389 | msgctxt "#30101"
390 | msgid "Error extracting the zip archive"
391 | msgstr ""
392 |
393 | msgctxt "#30102"
394 | msgid "Click OK to enter code"
395 | msgstr ""
396 |
397 | msgctxt "#30103"
398 | msgid "Validation Code"
399 | msgstr ""
400 |
401 | msgctxt "#30104"
402 | msgid "Authorize Now"
403 | msgstr ""
404 |
405 | msgctxt "#30105"
406 | msgid "Authorize this remote service in the settings first"
407 | msgstr ""
408 |
409 | msgctxt "#30106"
410 | msgid "is authorized"
411 | msgstr ""
412 |
413 | msgctxt "#30107"
414 | msgid "error authorizing"
415 | msgstr ""
416 |
417 | msgctxt "#30108"
418 | msgid "Visit https://console.developers.google.com/"
419 | msgstr ""
420 |
421 | msgctxt "#30109"
422 | msgid "Run on startup if missed"
423 | msgstr ""
424 |
425 | msgctxt "#30110"
426 | msgid "Set Name"
427 | msgstr ""
428 |
429 | msgctxt "#30111"
430 | msgid "Root folder selection"
431 | msgstr ""
432 |
433 | msgctxt "#30112"
434 | msgid "Browse Folder"
435 | msgstr ""
436 |
437 | msgctxt "#30113"
438 | msgid "Enter Own"
439 | msgstr ""
440 |
441 | msgctxt "#30114"
442 | msgid "starts in Kodi home"
443 | msgstr ""
444 |
445 | msgctxt "#30115"
446 | msgid "enter path to start there"
447 | msgstr ""
448 |
449 | msgctxt "#30116"
450 | msgid "Enter root path"
451 | msgstr ""
452 |
453 | msgctxt "#30117"
454 | msgid "Path Error"
455 | msgstr ""
456 |
457 | msgctxt "#30118"
458 | msgid "Path does not exist"
459 | msgstr ""
460 |
461 | msgctxt "#30119"
462 | msgid "Select root"
463 | msgstr ""
464 |
465 | msgctxt "#30120"
466 | msgid "Add Exclude Folder"
467 | msgstr ""
468 |
469 | msgctxt "#30121"
470 | msgid "Root Folder"
471 | msgstr ""
472 |
473 | msgctxt "#30122"
474 | msgid "Edit"
475 | msgstr ""
476 |
477 | msgctxt "#30123"
478 | msgid "Delete"
479 | msgstr ""
480 |
481 | msgctxt "#30124"
482 | msgid "Choose Action"
483 | msgstr ""
484 |
485 | msgctxt "#30125"
486 | msgid "Advanced Editor"
487 | msgstr ""
488 |
489 | msgctxt "#30126"
490 | msgid "Add Set"
491 | msgstr ""
492 |
493 | msgctxt "#30127"
494 | msgid "Delete Set"
495 | msgstr ""
496 |
497 | msgctxt "#30128"
498 | msgid "Are you sure you want to delete?"
499 | msgstr ""
500 |
501 | msgctxt "#30129"
502 | msgid "Exclude"
503 | msgstr ""
504 |
505 | msgctxt "#30130"
506 | msgid "The root folder cannot be changed"
507 | msgstr ""
508 |
509 | msgctxt "#30131"
510 | msgid "Choose Sets to Restore"
511 | msgstr ""
512 |
513 | msgctxt "#30132"
514 | msgid "Version 1.5.0 requires you to setup your file selections again - this is a breaking change"
515 | msgstr ""
516 |
517 | msgctxt "#30133"
518 | msgid "Game Saves"
519 | msgstr ""
520 |
521 | msgctxt "#30134"
522 | msgid "Include"
523 | msgstr ""
524 |
525 | msgctxt "#30135"
526 | msgid "Add Include Folder"
527 | msgstr ""
528 |
529 | msgctxt "#30136"
530 | msgid "Path must be within root folder"
531 | msgstr ""
532 |
533 | msgctxt "#30137"
534 | msgid "This path is part of a rule already"
535 | msgstr ""
536 |
537 | msgctxt "#30138"
538 | msgid "Set Name exists already"
539 | msgstr ""
540 |
541 | msgctxt "#30139"
542 | msgid "Copy Simple Config"
543 | msgstr ""
544 |
545 | msgctxt "#30140"
546 | msgid "This will copy the default Simple file selection to the Advanced Editor"
547 | msgstr ""
548 |
549 | msgctxt "#30141"
550 | msgid "This will erase any current Advanced Editor settings"
551 | msgstr ""
552 |
553 | msgctxt "#30142"
554 | msgid "Enable Verbose Logging"
555 | msgstr ""
556 |
557 | msgctxt "#30143"
558 | msgid "Exclude a specific folder from this backup set"
559 | msgstr ""
560 |
561 | msgctxt "#30144"
562 | msgid "Include a specific folder to this backup set"
563 | msgstr ""
564 |
565 | msgctxt "#30145"
566 | msgid "Type"
567 | msgstr ""
568 |
569 | msgctxt "#30146"
570 | msgid "Include Sub Folders"
571 | msgstr ""
572 |
573 | msgctxt "#30147"
574 | msgid "Toggle Sub Folders"
575 | msgstr ""
576 |
577 | msgctxt "#30148"
578 | msgid "Ask before restoring Kodi UI settings"
579 | msgstr ""
580 |
581 | msgctxt "#30149"
582 | msgid "Restore Kodi UI Settings"
583 | msgstr ""
584 |
585 | msgctxt "#30150"
586 | msgid "Restore saved Kodi system settings from backup?"
587 | msgstr ""
588 |
589 | msgctxt "#30151"
590 | msgid "Enable Verbose Logging"
591 | msgstr ""
592 |
593 | msgctxt "#30152"
594 | msgid "Set Zip File Location"
595 | msgstr ""
596 |
597 | msgctxt "#30153"
598 | msgid "Full path to where the zip file will be staged during backup or restore - must be local to this device"
599 | msgstr ""
600 |
601 | msgctxt "#30154"
602 | msgid "Always prompt if Kodi settings should be restored - no by default"
603 | msgstr ""
604 |
605 | msgctxt "#30155"
606 | msgid "Adds additional information to the log file"
607 | msgstr ""
608 |
609 | msgctxt "#30156"
610 | msgid "Must save key/secret first, then return to settings to authorize"
611 | msgstr ""
612 |
613 | msgctxt "#30157"
614 | msgid "Simple uses pre-defined folder locations, use Advanced Editor to define custom paths"
615 | msgstr ""
616 |
617 | msgctxt "#30158"
618 | msgid "Run backup on daily, weekly, monthly, or custom schedule"
619 | msgstr ""
620 |
621 | msgctxt "#30159"
622 | msgid "Backup started with unknown mode"
623 | msgstr ""
624 |
625 | msgctxt "#30160"
626 | msgid "Backup Filename Suffix"
627 | msgstr ""
628 |
629 | msgctxt "#30161"
630 | msgid "Amend a string to the end of each backup folder or ZIP file"
631 | msgstr ""
632 |
--------------------------------------------------------------------------------
/resources/language/resource.language.mn_mn/strings.po:
--------------------------------------------------------------------------------
1 | # Kodi Media Center language file
2 | # Addon Name: Backup
3 | # Addon id: script.xbmcbackup
4 | # Addon Provider: robweber
5 | # Translators:
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: XBMC Addons\n"
9 | "Report-Msgid-Bugs-To: alanwww1@xbmc.org\n"
10 | "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
11 | "PO-Revision-Date: 2022-03-09 14:05+0000\n"
12 | "Last-Translator: Christian Gade \n"
13 | "Language-Team: Mongolian \n"
14 | "Language: mn_mn\n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 | "Plural-Forms: nplurals=2; plural=n != 1;\n"
19 | "X-Generator: Weblate 4.11.2\n"
20 |
21 | msgctxt "Addon Summary"
22 | msgid "Backup and restore your Kodi database and configuration files in the event of a crash or file corruption."
23 | msgstr ""
24 |
25 | msgctxt "Addon Description"
26 | msgid "Ever hosed your Kodi configuration and wished you'd had a backup? Now you can with one easy click. You can export your database, playlist, thumbnails, addons and other configuration details to any source writeable by Kodi or directly to Dropbox cloud storage. Backups can be run on demand or via a scheduler. "
27 | msgstr ""
28 |
29 | msgctxt "#30010"
30 | msgid "Backup"
31 | msgstr ""
32 |
33 | msgctxt "#30011"
34 | msgid "General"
35 | msgstr "Ерөнхий"
36 |
37 | msgctxt "#30012"
38 | msgid "File Selection"
39 | msgstr ""
40 |
41 | msgctxt "#30013"
42 | msgid "Scheduling"
43 | msgstr ""
44 |
45 | msgctxt "#30014"
46 | msgid "Simple"
47 | msgstr ""
48 |
49 | msgctxt "#30015"
50 | msgid "Advanced"
51 | msgstr ""
52 |
53 | msgctxt "#30016"
54 | msgid "Backup"
55 | msgstr ""
56 |
57 | msgctxt "#30017"
58 | msgid "Restore"
59 | msgstr ""
60 |
61 | msgctxt "#30018"
62 | msgid "Browse Path"
63 | msgstr ""
64 |
65 | msgctxt "#30019"
66 | msgid "Type Path"
67 | msgstr ""
68 |
69 | msgctxt "#30020"
70 | msgid "Browse Remote Path"
71 | msgstr ""
72 |
73 | msgctxt "#30021"
74 | msgid "Backup Folder Name"
75 | msgstr ""
76 |
77 | msgctxt "#30022"
78 | msgid "Progress Display"
79 | msgstr ""
80 |
81 | msgctxt "#30023"
82 | msgid "Mode"
83 | msgstr ""
84 |
85 | msgctxt "#30024"
86 | msgid "Type Remote Path"
87 | msgstr ""
88 |
89 | msgctxt "#30025"
90 | msgid "Remote Path Type"
91 | msgstr ""
92 |
93 | msgctxt "#30026"
94 | msgid "Backups to keep (0 for all)"
95 | msgstr ""
96 |
97 | msgctxt "#30027"
98 | msgid "Dropbox"
99 | msgstr ""
100 |
101 | msgctxt "#30028"
102 | msgid "Dropbox Key"
103 | msgstr ""
104 |
105 | msgctxt "#30029"
106 | msgid "Dropbox Secret"
107 | msgstr ""
108 |
109 | msgctxt "#30030"
110 | msgid "User Addons"
111 | msgstr ""
112 |
113 | msgctxt "#30031"
114 | msgid "Addon Data"
115 | msgstr ""
116 |
117 | msgctxt "#30032"
118 | msgid "Database"
119 | msgstr ""
120 |
121 | msgctxt "#30033"
122 | msgid "Playlist"
123 | msgstr ""
124 |
125 | msgctxt "#30034"
126 | msgid "Thumbnails/Fanart"
127 | msgstr ""
128 |
129 | msgctxt "#30035"
130 | msgid "Config Files"
131 | msgstr ""
132 |
133 | msgctxt "#30036"
134 | msgid "Disclaimer"
135 | msgstr ""
136 |
137 | msgctxt "#30037"
138 | msgid "Canceling this menu will close and save changes"
139 | msgstr ""
140 |
141 | msgctxt "#30038"
142 | msgid "Advanced Settings Detected"
143 | msgstr ""
144 |
145 | msgctxt "#30039"
146 | msgid "The advancedsettings file should be restored first"
147 | msgstr ""
148 |
149 | msgctxt "#30040"
150 | msgid "Select Yes to restore this file and restart Kodi"
151 | msgstr ""
152 |
153 | msgctxt "#30041"
154 | msgid "Select No to continue"
155 | msgstr ""
156 |
157 | msgctxt "#30042"
158 | msgid "Resume Restore"
159 | msgstr ""
160 |
161 | msgctxt "#30043"
162 | msgid "The Backup addon has detected an unfinished restore"
163 | msgstr ""
164 |
165 | msgctxt "#30044"
166 | msgid "Would you like to continue?"
167 | msgstr ""
168 |
169 | msgctxt "#30045"
170 | msgid "Error: Remote or zip file path doesn't exist"
171 | msgstr ""
172 |
173 | msgctxt "#30046"
174 | msgid "Starting"
175 | msgstr ""
176 |
177 | msgctxt "#30047"
178 | msgid "Local Dir"
179 | msgstr ""
180 |
181 | msgctxt "#30048"
182 | msgid "Remote Dir"
183 | msgstr ""
184 |
185 | msgctxt "#30049"
186 | msgid "Gathering file list"
187 | msgstr ""
188 |
189 | msgctxt "#30050"
190 | msgid "Remote Path exists - may have old files in it!"
191 | msgstr ""
192 |
193 | msgctxt "#30051"
194 | msgid "Creating Files List"
195 | msgstr ""
196 |
197 | msgctxt "#30052"
198 | msgid "Writing file"
199 | msgstr ""
200 |
201 | msgctxt "#30053"
202 | msgid "Starting scheduled backup"
203 | msgstr ""
204 |
205 | msgctxt "#30054"
206 | msgid "Removing backup"
207 | msgstr ""
208 |
209 | msgctxt "#30056"
210 | msgid "Scan or click this URL to authorize, click OK AFTER completion"
211 | msgstr ""
212 |
213 | msgctxt "#30057"
214 | msgid "Click OK AFTER completion"
215 | msgstr ""
216 |
217 | msgctxt "#30058"
218 | msgid "Developer Code Needed"
219 | msgstr ""
220 |
221 | msgctxt "#30059"
222 | msgid "Visit https://www.dropbox.com/developers"
223 | msgstr ""
224 |
225 | msgctxt "#30060"
226 | msgid "Enable Scheduler"
227 | msgstr ""
228 |
229 | msgctxt "#30061"
230 | msgid "Schedule"
231 | msgstr ""
232 |
233 | msgctxt "#30062"
234 | msgid "Hour of Day"
235 | msgstr ""
236 |
237 | msgctxt "#30063"
238 | msgid "Day of Week"
239 | msgstr ""
240 |
241 | msgctxt "#30064"
242 | msgid "Cron Schedule"
243 | msgstr ""
244 |
245 | msgctxt "#30065"
246 | msgid "Sunday"
247 | msgstr ""
248 |
249 | msgctxt "#30066"
250 | msgid "Monday"
251 | msgstr ""
252 |
253 | msgctxt "#30067"
254 | msgid "Tuesday"
255 | msgstr ""
256 |
257 | msgctxt "#30068"
258 | msgid "Wednesday"
259 | msgstr ""
260 |
261 | msgctxt "#30069"
262 | msgid "Thursday"
263 | msgstr ""
264 |
265 | msgctxt "#30070"
266 | msgid "Friday"
267 | msgstr ""
268 |
269 | msgctxt "#30071"
270 | msgid "Saturday"
271 | msgstr ""
272 |
273 | msgctxt "#30072"
274 | msgid "Every Day"
275 | msgstr ""
276 |
277 | msgctxt "#30073"
278 | msgid "Every Week"
279 | msgstr ""
280 |
281 | msgctxt "#30074"
282 | msgid "First Day of Month"
283 | msgstr ""
284 |
285 | msgctxt "#30075"
286 | msgid "Custom Schedule"
287 | msgstr ""
288 |
289 | msgctxt "#30076"
290 | msgid "Shutdown After Backup"
291 | msgstr ""
292 |
293 | msgctxt "#30077"
294 | msgid "Restart Kodi"
295 | msgstr ""
296 |
297 | msgctxt "#30078"
298 | msgid "You should restart Kodi to continue"
299 | msgstr ""
300 |
301 | msgctxt "#30079"
302 | msgid "Just Today"
303 | msgstr ""
304 |
305 | msgctxt "#30080"
306 | msgid "Profiles"
307 | msgstr ""
308 |
309 | msgctxt "#30081"
310 | msgid "Scheduler will run again on"
311 | msgstr ""
312 |
313 | msgctxt "#30082"
314 | msgid "Progress Bar"
315 | msgstr ""
316 |
317 | msgctxt "#30083"
318 | msgid "Background Progress Bar"
319 | msgstr ""
320 |
321 | msgctxt "#30084"
322 | msgid "None (Silent)"
323 | msgstr ""
324 |
325 | msgctxt "#30085"
326 | msgid "Version Warning"
327 | msgstr ""
328 |
329 | msgctxt "#30086"
330 | msgid "This version of Kodi is different than the one used to create the archive"
331 | msgstr ""
332 |
333 | msgctxt "#30087"
334 | msgid "Compress Archives"
335 | msgstr ""
336 |
337 | msgctxt "#30088"
338 | msgid "Copying Zip Archive"
339 | msgstr ""
340 |
341 | msgctxt "#30089"
342 | msgid "Write Error Detected"
343 | msgstr ""
344 |
345 | msgctxt "#30090"
346 | msgid "The destination may not be writeable"
347 | msgstr ""
348 |
349 | msgctxt "#30091"
350 | msgid "Zip archive could not be copied"
351 | msgstr ""
352 |
353 | msgctxt "#30092"
354 | msgid "Not all files were copied"
355 | msgstr ""
356 |
357 | msgctxt "#30093"
358 | msgid "Delete Authorization Info"
359 | msgstr ""
360 |
361 | msgctxt "#30094"
362 | msgid "This will delete any OAuth token files"
363 | msgstr ""
364 |
365 | msgctxt "#30095"
366 | msgid "Do you want to do this?"
367 | msgstr ""
368 |
369 | msgctxt "#30096"
370 | msgid "Old Zip Archive could not be deleted"
371 | msgstr ""
372 |
373 | msgctxt "#30097"
374 | msgid "This needs to happen before a backup can run"
375 | msgstr ""
376 |
377 | msgctxt "#30098"
378 | msgid "Google Drive"
379 | msgstr ""
380 |
381 | msgctxt "#30099"
382 | msgid "Open Settings"
383 | msgstr ""
384 |
385 | msgctxt "#30100"
386 | msgid "Extracting Archive"
387 | msgstr ""
388 |
389 | msgctxt "#30101"
390 | msgid "Error extracting the zip archive"
391 | msgstr ""
392 |
393 | msgctxt "#30102"
394 | msgid "Click OK to enter code"
395 | msgstr ""
396 |
397 | msgctxt "#30103"
398 | msgid "Validation Code"
399 | msgstr ""
400 |
401 | msgctxt "#30104"
402 | msgid "Authorize Now"
403 | msgstr ""
404 |
405 | msgctxt "#30105"
406 | msgid "Authorize this remote service in the settings first"
407 | msgstr ""
408 |
409 | msgctxt "#30106"
410 | msgid "is authorized"
411 | msgstr ""
412 |
413 | msgctxt "#30107"
414 | msgid "error authorizing"
415 | msgstr ""
416 |
417 | msgctxt "#30108"
418 | msgid "Visit https://console.developers.google.com/"
419 | msgstr ""
420 |
421 | msgctxt "#30109"
422 | msgid "Run on startup if missed"
423 | msgstr ""
424 |
425 | msgctxt "#30110"
426 | msgid "Set Name"
427 | msgstr ""
428 |
429 | msgctxt "#30111"
430 | msgid "Root folder selection"
431 | msgstr ""
432 |
433 | msgctxt "#30112"
434 | msgid "Browse Folder"
435 | msgstr ""
436 |
437 | msgctxt "#30113"
438 | msgid "Enter Own"
439 | msgstr ""
440 |
441 | msgctxt "#30114"
442 | msgid "starts in Kodi home"
443 | msgstr ""
444 |
445 | msgctxt "#30115"
446 | msgid "enter path to start there"
447 | msgstr ""
448 |
449 | msgctxt "#30116"
450 | msgid "Enter root path"
451 | msgstr ""
452 |
453 | msgctxt "#30117"
454 | msgid "Path Error"
455 | msgstr ""
456 |
457 | msgctxt "#30118"
458 | msgid "Path does not exist"
459 | msgstr ""
460 |
461 | msgctxt "#30119"
462 | msgid "Select root"
463 | msgstr ""
464 |
465 | msgctxt "#30120"
466 | msgid "Add Exclude Folder"
467 | msgstr ""
468 |
469 | msgctxt "#30121"
470 | msgid "Root Folder"
471 | msgstr ""
472 |
473 | msgctxt "#30122"
474 | msgid "Edit"
475 | msgstr ""
476 |
477 | msgctxt "#30123"
478 | msgid "Delete"
479 | msgstr "Устгах"
480 |
481 | msgctxt "#30124"
482 | msgid "Choose Action"
483 | msgstr ""
484 |
485 | msgctxt "#30125"
486 | msgid "Advanced Editor"
487 | msgstr ""
488 |
489 | msgctxt "#30126"
490 | msgid "Add Set"
491 | msgstr ""
492 |
493 | msgctxt "#30127"
494 | msgid "Delete Set"
495 | msgstr ""
496 |
497 | msgctxt "#30128"
498 | msgid "Are you sure you want to delete?"
499 | msgstr ""
500 |
501 | msgctxt "#30129"
502 | msgid "Exclude"
503 | msgstr ""
504 |
505 | msgctxt "#30130"
506 | msgid "The root folder cannot be changed"
507 | msgstr ""
508 |
509 | msgctxt "#30131"
510 | msgid "Choose Sets to Restore"
511 | msgstr ""
512 |
513 | msgctxt "#30132"
514 | msgid "Version 1.5.0 requires you to setup your file selections again - this is a breaking change"
515 | msgstr ""
516 |
517 | msgctxt "#30133"
518 | msgid "Game Saves"
519 | msgstr ""
520 |
521 | msgctxt "#30134"
522 | msgid "Include"
523 | msgstr ""
524 |
525 | msgctxt "#30135"
526 | msgid "Add Include Folder"
527 | msgstr ""
528 |
529 | msgctxt "#30136"
530 | msgid "Path must be within root folder"
531 | msgstr ""
532 |
533 | msgctxt "#30137"
534 | msgid "This path is part of a rule already"
535 | msgstr ""
536 |
537 | msgctxt "#30138"
538 | msgid "Set Name exists already"
539 | msgstr ""
540 |
541 | msgctxt "#30139"
542 | msgid "Copy Simple Config"
543 | msgstr ""
544 |
545 | msgctxt "#30140"
546 | msgid "This will copy the default Simple file selection to the Advanced Editor"
547 | msgstr ""
548 |
549 | msgctxt "#30141"
550 | msgid "This will erase any current Advanced Editor settings"
551 | msgstr ""
552 |
553 | msgctxt "#30142"
554 | msgid "Enable Verbose Logging"
555 | msgstr ""
556 |
557 | msgctxt "#30143"
558 | msgid "Exclude a specific folder from this backup set"
559 | msgstr ""
560 |
561 | msgctxt "#30144"
562 | msgid "Include a specific folder to this backup set"
563 | msgstr ""
564 |
565 | msgctxt "#30145"
566 | msgid "Type"
567 | msgstr ""
568 |
569 | msgctxt "#30146"
570 | msgid "Include Sub Folders"
571 | msgstr ""
572 |
573 | msgctxt "#30147"
574 | msgid "Toggle Sub Folders"
575 | msgstr ""
576 |
577 | msgctxt "#30148"
578 | msgid "Ask before restoring Kodi UI settings"
579 | msgstr ""
580 |
581 | msgctxt "#30149"
582 | msgid "Restore Kodi UI Settings"
583 | msgstr ""
584 |
585 | msgctxt "#30150"
586 | msgid "Restore saved Kodi system settings from backup?"
587 | msgstr ""
588 |
589 | msgctxt "#30151"
590 | msgid "Enable Verbose Logging"
591 | msgstr ""
592 |
593 | msgctxt "#30152"
594 | msgid "Set Zip File Location"
595 | msgstr ""
596 |
597 | msgctxt "#30153"
598 | msgid "Full path to where the zip file will be staged during backup or restore - must be local to this device"
599 | msgstr ""
600 |
601 | msgctxt "#30154"
602 | msgid "Always prompt if Kodi settings should be restored - no by default"
603 | msgstr ""
604 |
605 | msgctxt "#30155"
606 | msgid "Adds additional information to the log file"
607 | msgstr ""
608 |
609 | msgctxt "#30156"
610 | msgid "Must save key/secret first, then return to settings to authorize"
611 | msgstr ""
612 |
613 | msgctxt "#30157"
614 | msgid "Simple uses pre-defined folder locations, use Advanced Editor to define custom paths"
615 | msgstr ""
616 |
617 | msgctxt "#30158"
618 | msgid "Run backup on daily, weekly, monthly, or custom schedule"
619 | msgstr ""
620 |
621 | msgctxt "#30159"
622 | msgid "Backup started with unknown mode"
623 | msgstr ""
624 |
625 | msgctxt "#30160"
626 | msgid "Backup Filename Suffix"
627 | msgstr ""
628 |
629 | msgctxt "#30161"
630 | msgid "Amend a string to the end of each backup folder or ZIP file"
631 | msgstr ""
632 |
--------------------------------------------------------------------------------
/resources/language/resource.language.te_in/strings.po:
--------------------------------------------------------------------------------
1 | # Kodi Media Center language file
2 | # Addon Name: Backup
3 | # Addon id: script.xbmcbackup
4 | # Addon Provider: robweber
5 | # Translators:
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: XBMC Addons\n"
9 | "Report-Msgid-Bugs-To: alanwww1@xbmc.org\n"
10 | "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
11 | "PO-Revision-Date: 2022-03-09 14:05+0000\n"
12 | "Last-Translator: Christian Gade \n"
13 | "Language-Team: Telugu (India) \n"
14 | "Language: te_in\n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 | "Plural-Forms: nplurals=2; plural=n != 1;\n"
19 | "X-Generator: Weblate 4.11.2\n"
20 |
21 | msgctxt "Addon Summary"
22 | msgid "Backup and restore your Kodi database and configuration files in the event of a crash or file corruption."
23 | msgstr ""
24 |
25 | msgctxt "Addon Description"
26 | msgid "Ever hosed your Kodi configuration and wished you'd had a backup? Now you can with one easy click. You can export your database, playlist, thumbnails, addons and other configuration details to any source writeable by Kodi or directly to Dropbox cloud storage. Backups can be run on demand or via a scheduler. "
27 | msgstr ""
28 |
29 | msgctxt "#30010"
30 | msgid "Backup"
31 | msgstr ""
32 |
33 | msgctxt "#30011"
34 | msgid "General"
35 | msgstr "సాధారణం"
36 |
37 | msgctxt "#30012"
38 | msgid "File Selection"
39 | msgstr ""
40 |
41 | msgctxt "#30013"
42 | msgid "Scheduling"
43 | msgstr ""
44 |
45 | msgctxt "#30014"
46 | msgid "Simple"
47 | msgstr ""
48 |
49 | msgctxt "#30015"
50 | msgid "Advanced"
51 | msgstr ""
52 |
53 | msgctxt "#30016"
54 | msgid "Backup"
55 | msgstr ""
56 |
57 | msgctxt "#30017"
58 | msgid "Restore"
59 | msgstr ""
60 |
61 | msgctxt "#30018"
62 | msgid "Browse Path"
63 | msgstr ""
64 |
65 | msgctxt "#30019"
66 | msgid "Type Path"
67 | msgstr ""
68 |
69 | msgctxt "#30020"
70 | msgid "Browse Remote Path"
71 | msgstr ""
72 |
73 | msgctxt "#30021"
74 | msgid "Backup Folder Name"
75 | msgstr ""
76 |
77 | msgctxt "#30022"
78 | msgid "Progress Display"
79 | msgstr ""
80 |
81 | msgctxt "#30023"
82 | msgid "Mode"
83 | msgstr ""
84 |
85 | msgctxt "#30024"
86 | msgid "Type Remote Path"
87 | msgstr ""
88 |
89 | msgctxt "#30025"
90 | msgid "Remote Path Type"
91 | msgstr ""
92 |
93 | msgctxt "#30026"
94 | msgid "Backups to keep (0 for all)"
95 | msgstr ""
96 |
97 | msgctxt "#30027"
98 | msgid "Dropbox"
99 | msgstr ""
100 |
101 | msgctxt "#30028"
102 | msgid "Dropbox Key"
103 | msgstr ""
104 |
105 | msgctxt "#30029"
106 | msgid "Dropbox Secret"
107 | msgstr ""
108 |
109 | msgctxt "#30030"
110 | msgid "User Addons"
111 | msgstr ""
112 |
113 | msgctxt "#30031"
114 | msgid "Addon Data"
115 | msgstr ""
116 |
117 | msgctxt "#30032"
118 | msgid "Database"
119 | msgstr ""
120 |
121 | msgctxt "#30033"
122 | msgid "Playlist"
123 | msgstr ""
124 |
125 | msgctxt "#30034"
126 | msgid "Thumbnails/Fanart"
127 | msgstr ""
128 |
129 | msgctxt "#30035"
130 | msgid "Config Files"
131 | msgstr ""
132 |
133 | msgctxt "#30036"
134 | msgid "Disclaimer"
135 | msgstr ""
136 |
137 | msgctxt "#30037"
138 | msgid "Canceling this menu will close and save changes"
139 | msgstr ""
140 |
141 | msgctxt "#30038"
142 | msgid "Advanced Settings Detected"
143 | msgstr ""
144 |
145 | msgctxt "#30039"
146 | msgid "The advancedsettings file should be restored first"
147 | msgstr ""
148 |
149 | msgctxt "#30040"
150 | msgid "Select Yes to restore this file and restart Kodi"
151 | msgstr ""
152 |
153 | msgctxt "#30041"
154 | msgid "Select No to continue"
155 | msgstr ""
156 |
157 | msgctxt "#30042"
158 | msgid "Resume Restore"
159 | msgstr ""
160 |
161 | msgctxt "#30043"
162 | msgid "The Backup addon has detected an unfinished restore"
163 | msgstr ""
164 |
165 | msgctxt "#30044"
166 | msgid "Would you like to continue?"
167 | msgstr ""
168 |
169 | msgctxt "#30045"
170 | msgid "Error: Remote or zip file path doesn't exist"
171 | msgstr ""
172 |
173 | msgctxt "#30046"
174 | msgid "Starting"
175 | msgstr ""
176 |
177 | msgctxt "#30047"
178 | msgid "Local Dir"
179 | msgstr ""
180 |
181 | msgctxt "#30048"
182 | msgid "Remote Dir"
183 | msgstr ""
184 |
185 | msgctxt "#30049"
186 | msgid "Gathering file list"
187 | msgstr ""
188 |
189 | msgctxt "#30050"
190 | msgid "Remote Path exists - may have old files in it!"
191 | msgstr ""
192 |
193 | msgctxt "#30051"
194 | msgid "Creating Files List"
195 | msgstr ""
196 |
197 | msgctxt "#30052"
198 | msgid "Writing file"
199 | msgstr ""
200 |
201 | msgctxt "#30053"
202 | msgid "Starting scheduled backup"
203 | msgstr ""
204 |
205 | msgctxt "#30054"
206 | msgid "Removing backup"
207 | msgstr ""
208 |
209 | msgctxt "#30056"
210 | msgid "Scan or click this URL to authorize, click OK AFTER completion"
211 | msgstr ""
212 |
213 | msgctxt "#30057"
214 | msgid "Click OK AFTER completion"
215 | msgstr ""
216 |
217 | msgctxt "#30058"
218 | msgid "Developer Code Needed"
219 | msgstr ""
220 |
221 | msgctxt "#30059"
222 | msgid "Visit https://www.dropbox.com/developers"
223 | msgstr ""
224 |
225 | msgctxt "#30060"
226 | msgid "Enable Scheduler"
227 | msgstr ""
228 |
229 | msgctxt "#30061"
230 | msgid "Schedule"
231 | msgstr ""
232 |
233 | msgctxt "#30062"
234 | msgid "Hour of Day"
235 | msgstr ""
236 |
237 | msgctxt "#30063"
238 | msgid "Day of Week"
239 | msgstr ""
240 |
241 | msgctxt "#30064"
242 | msgid "Cron Schedule"
243 | msgstr ""
244 |
245 | msgctxt "#30065"
246 | msgid "Sunday"
247 | msgstr ""
248 |
249 | msgctxt "#30066"
250 | msgid "Monday"
251 | msgstr ""
252 |
253 | msgctxt "#30067"
254 | msgid "Tuesday"
255 | msgstr ""
256 |
257 | msgctxt "#30068"
258 | msgid "Wednesday"
259 | msgstr ""
260 |
261 | msgctxt "#30069"
262 | msgid "Thursday"
263 | msgstr ""
264 |
265 | msgctxt "#30070"
266 | msgid "Friday"
267 | msgstr ""
268 |
269 | msgctxt "#30071"
270 | msgid "Saturday"
271 | msgstr ""
272 |
273 | msgctxt "#30072"
274 | msgid "Every Day"
275 | msgstr ""
276 |
277 | msgctxt "#30073"
278 | msgid "Every Week"
279 | msgstr ""
280 |
281 | msgctxt "#30074"
282 | msgid "First Day of Month"
283 | msgstr ""
284 |
285 | msgctxt "#30075"
286 | msgid "Custom Schedule"
287 | msgstr ""
288 |
289 | msgctxt "#30076"
290 | msgid "Shutdown After Backup"
291 | msgstr ""
292 |
293 | msgctxt "#30077"
294 | msgid "Restart Kodi"
295 | msgstr ""
296 |
297 | msgctxt "#30078"
298 | msgid "You should restart Kodi to continue"
299 | msgstr ""
300 |
301 | msgctxt "#30079"
302 | msgid "Just Today"
303 | msgstr ""
304 |
305 | msgctxt "#30080"
306 | msgid "Profiles"
307 | msgstr ""
308 |
309 | msgctxt "#30081"
310 | msgid "Scheduler will run again on"
311 | msgstr ""
312 |
313 | msgctxt "#30082"
314 | msgid "Progress Bar"
315 | msgstr ""
316 |
317 | msgctxt "#30083"
318 | msgid "Background Progress Bar"
319 | msgstr ""
320 |
321 | msgctxt "#30084"
322 | msgid "None (Silent)"
323 | msgstr ""
324 |
325 | msgctxt "#30085"
326 | msgid "Version Warning"
327 | msgstr ""
328 |
329 | msgctxt "#30086"
330 | msgid "This version of Kodi is different than the one used to create the archive"
331 | msgstr ""
332 |
333 | msgctxt "#30087"
334 | msgid "Compress Archives"
335 | msgstr ""
336 |
337 | msgctxt "#30088"
338 | msgid "Copying Zip Archive"
339 | msgstr ""
340 |
341 | msgctxt "#30089"
342 | msgid "Write Error Detected"
343 | msgstr ""
344 |
345 | msgctxt "#30090"
346 | msgid "The destination may not be writeable"
347 | msgstr ""
348 |
349 | msgctxt "#30091"
350 | msgid "Zip archive could not be copied"
351 | msgstr ""
352 |
353 | msgctxt "#30092"
354 | msgid "Not all files were copied"
355 | msgstr ""
356 |
357 | msgctxt "#30093"
358 | msgid "Delete Authorization Info"
359 | msgstr ""
360 |
361 | msgctxt "#30094"
362 | msgid "This will delete any OAuth token files"
363 | msgstr ""
364 |
365 | msgctxt "#30095"
366 | msgid "Do you want to do this?"
367 | msgstr ""
368 |
369 | msgctxt "#30096"
370 | msgid "Old Zip Archive could not be deleted"
371 | msgstr ""
372 |
373 | msgctxt "#30097"
374 | msgid "This needs to happen before a backup can run"
375 | msgstr ""
376 |
377 | msgctxt "#30098"
378 | msgid "Google Drive"
379 | msgstr ""
380 |
381 | msgctxt "#30099"
382 | msgid "Open Settings"
383 | msgstr ""
384 |
385 | msgctxt "#30100"
386 | msgid "Extracting Archive"
387 | msgstr ""
388 |
389 | msgctxt "#30101"
390 | msgid "Error extracting the zip archive"
391 | msgstr ""
392 |
393 | msgctxt "#30102"
394 | msgid "Click OK to enter code"
395 | msgstr ""
396 |
397 | msgctxt "#30103"
398 | msgid "Validation Code"
399 | msgstr ""
400 |
401 | msgctxt "#30104"
402 | msgid "Authorize Now"
403 | msgstr ""
404 |
405 | msgctxt "#30105"
406 | msgid "Authorize this remote service in the settings first"
407 | msgstr ""
408 |
409 | msgctxt "#30106"
410 | msgid "is authorized"
411 | msgstr ""
412 |
413 | msgctxt "#30107"
414 | msgid "error authorizing"
415 | msgstr ""
416 |
417 | msgctxt "#30108"
418 | msgid "Visit https://console.developers.google.com/"
419 | msgstr ""
420 |
421 | msgctxt "#30109"
422 | msgid "Run on startup if missed"
423 | msgstr ""
424 |
425 | msgctxt "#30110"
426 | msgid "Set Name"
427 | msgstr ""
428 |
429 | msgctxt "#30111"
430 | msgid "Root folder selection"
431 | msgstr ""
432 |
433 | msgctxt "#30112"
434 | msgid "Browse Folder"
435 | msgstr ""
436 |
437 | msgctxt "#30113"
438 | msgid "Enter Own"
439 | msgstr ""
440 |
441 | msgctxt "#30114"
442 | msgid "starts in Kodi home"
443 | msgstr ""
444 |
445 | msgctxt "#30115"
446 | msgid "enter path to start there"
447 | msgstr ""
448 |
449 | msgctxt "#30116"
450 | msgid "Enter root path"
451 | msgstr ""
452 |
453 | msgctxt "#30117"
454 | msgid "Path Error"
455 | msgstr ""
456 |
457 | msgctxt "#30118"
458 | msgid "Path does not exist"
459 | msgstr ""
460 |
461 | msgctxt "#30119"
462 | msgid "Select root"
463 | msgstr ""
464 |
465 | msgctxt "#30120"
466 | msgid "Add Exclude Folder"
467 | msgstr ""
468 |
469 | msgctxt "#30121"
470 | msgid "Root Folder"
471 | msgstr ""
472 |
473 | msgctxt "#30122"
474 | msgid "Edit"
475 | msgstr ""
476 |
477 | msgctxt "#30123"
478 | msgid "Delete"
479 | msgstr ""
480 |
481 | msgctxt "#30124"
482 | msgid "Choose Action"
483 | msgstr ""
484 |
485 | msgctxt "#30125"
486 | msgid "Advanced Editor"
487 | msgstr ""
488 |
489 | msgctxt "#30126"
490 | msgid "Add Set"
491 | msgstr ""
492 |
493 | msgctxt "#30127"
494 | msgid "Delete Set"
495 | msgstr ""
496 |
497 | msgctxt "#30128"
498 | msgid "Are you sure you want to delete?"
499 | msgstr ""
500 |
501 | msgctxt "#30129"
502 | msgid "Exclude"
503 | msgstr ""
504 |
505 | msgctxt "#30130"
506 | msgid "The root folder cannot be changed"
507 | msgstr ""
508 |
509 | msgctxt "#30131"
510 | msgid "Choose Sets to Restore"
511 | msgstr ""
512 |
513 | msgctxt "#30132"
514 | msgid "Version 1.5.0 requires you to setup your file selections again - this is a breaking change"
515 | msgstr ""
516 |
517 | msgctxt "#30133"
518 | msgid "Game Saves"
519 | msgstr ""
520 |
521 | msgctxt "#30134"
522 | msgid "Include"
523 | msgstr ""
524 |
525 | msgctxt "#30135"
526 | msgid "Add Include Folder"
527 | msgstr ""
528 |
529 | msgctxt "#30136"
530 | msgid "Path must be within root folder"
531 | msgstr ""
532 |
533 | msgctxt "#30137"
534 | msgid "This path is part of a rule already"
535 | msgstr ""
536 |
537 | msgctxt "#30138"
538 | msgid "Set Name exists already"
539 | msgstr ""
540 |
541 | msgctxt "#30139"
542 | msgid "Copy Simple Config"
543 | msgstr ""
544 |
545 | msgctxt "#30140"
546 | msgid "This will copy the default Simple file selection to the Advanced Editor"
547 | msgstr ""
548 |
549 | msgctxt "#30141"
550 | msgid "This will erase any current Advanced Editor settings"
551 | msgstr ""
552 |
553 | msgctxt "#30142"
554 | msgid "Enable Verbose Logging"
555 | msgstr ""
556 |
557 | msgctxt "#30143"
558 | msgid "Exclude a specific folder from this backup set"
559 | msgstr ""
560 |
561 | msgctxt "#30144"
562 | msgid "Include a specific folder to this backup set"
563 | msgstr ""
564 |
565 | msgctxt "#30145"
566 | msgid "Type"
567 | msgstr ""
568 |
569 | msgctxt "#30146"
570 | msgid "Include Sub Folders"
571 | msgstr ""
572 |
573 | msgctxt "#30147"
574 | msgid "Toggle Sub Folders"
575 | msgstr ""
576 |
577 | msgctxt "#30148"
578 | msgid "Ask before restoring Kodi UI settings"
579 | msgstr ""
580 |
581 | msgctxt "#30149"
582 | msgid "Restore Kodi UI Settings"
583 | msgstr ""
584 |
585 | msgctxt "#30150"
586 | msgid "Restore saved Kodi system settings from backup?"
587 | msgstr ""
588 |
589 | msgctxt "#30151"
590 | msgid "Enable Verbose Logging"
591 | msgstr ""
592 |
593 | msgctxt "#30152"
594 | msgid "Set Zip File Location"
595 | msgstr ""
596 |
597 | msgctxt "#30153"
598 | msgid "Full path to where the zip file will be staged during backup or restore - must be local to this device"
599 | msgstr ""
600 |
601 | msgctxt "#30154"
602 | msgid "Always prompt if Kodi settings should be restored - no by default"
603 | msgstr ""
604 |
605 | msgctxt "#30155"
606 | msgid "Adds additional information to the log file"
607 | msgstr ""
608 |
609 | msgctxt "#30156"
610 | msgid "Must save key/secret first, then return to settings to authorize"
611 | msgstr ""
612 |
613 | msgctxt "#30157"
614 | msgid "Simple uses pre-defined folder locations, use Advanced Editor to define custom paths"
615 | msgstr ""
616 |
617 | msgctxt "#30158"
618 | msgid "Run backup on daily, weekly, monthly, or custom schedule"
619 | msgstr ""
620 |
621 | msgctxt "#30159"
622 | msgid "Backup started with unknown mode"
623 | msgstr ""
624 |
625 | msgctxt "#30160"
626 | msgid "Backup Filename Suffix"
627 | msgstr ""
628 |
629 | msgctxt "#30161"
630 | msgid "Amend a string to the end of each backup folder or ZIP file"
631 | msgstr ""
632 |
--------------------------------------------------------------------------------
/resources/language/resource.language.ast_es/strings.po:
--------------------------------------------------------------------------------
1 | # Kodi Media Center language file
2 | # Addon Name: Backup
3 | # Addon id: script.xbmcbackup
4 | # Addon Provider: robweber
5 | # Translators:
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: XBMC Addons\n"
9 | "Report-Msgid-Bugs-To: alanwww1@xbmc.org\n"
10 | "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
11 | "PO-Revision-Date: 2022-02-22 01:13+0000\n"
12 | "Last-Translator: Christian Gade \n"
13 | "Language-Team: Asturian (Spain) \n"
14 | "Language: ast_es\n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 | "Plural-Forms: nplurals=2; plural=n != 1;\n"
19 | "X-Generator: Weblate 4.10.1\n"
20 |
21 | msgctxt "Addon Summary"
22 | msgid "Backup and restore your Kodi database and configuration files in the event of a crash or file corruption."
23 | msgstr ""
24 |
25 | msgctxt "Addon Description"
26 | msgid "Ever hosed your Kodi configuration and wished you'd had a backup? Now you can with one easy click. You can export your database, playlist, thumbnails, addons and other configuration details to any source writeable by Kodi or directly to Dropbox cloud storage. Backups can be run on demand or via a scheduler. "
27 | msgstr ""
28 |
29 | msgctxt "#30010"
30 | msgid "Backup"
31 | msgstr ""
32 |
33 | msgctxt "#30011"
34 | msgid "General"
35 | msgstr "Xeneral"
36 |
37 | msgctxt "#30012"
38 | msgid "File Selection"
39 | msgstr ""
40 |
41 | msgctxt "#30013"
42 | msgid "Scheduling"
43 | msgstr ""
44 |
45 | msgctxt "#30014"
46 | msgid "Simple"
47 | msgstr ""
48 |
49 | msgctxt "#30015"
50 | msgid "Advanced"
51 | msgstr ""
52 |
53 | msgctxt "#30016"
54 | msgid "Backup"
55 | msgstr ""
56 |
57 | msgctxt "#30017"
58 | msgid "Restore"
59 | msgstr ""
60 |
61 | msgctxt "#30018"
62 | msgid "Browse Path"
63 | msgstr ""
64 |
65 | msgctxt "#30019"
66 | msgid "Type Path"
67 | msgstr ""
68 |
69 | msgctxt "#30020"
70 | msgid "Browse Remote Path"
71 | msgstr ""
72 |
73 | msgctxt "#30021"
74 | msgid "Backup Folder Name"
75 | msgstr ""
76 |
77 | msgctxt "#30022"
78 | msgid "Progress Display"
79 | msgstr ""
80 |
81 | msgctxt "#30023"
82 | msgid "Mode"
83 | msgstr ""
84 |
85 | msgctxt "#30024"
86 | msgid "Type Remote Path"
87 | msgstr ""
88 |
89 | msgctxt "#30025"
90 | msgid "Remote Path Type"
91 | msgstr ""
92 |
93 | msgctxt "#30026"
94 | msgid "Backups to keep (0 for all)"
95 | msgstr ""
96 |
97 | msgctxt "#30027"
98 | msgid "Dropbox"
99 | msgstr ""
100 |
101 | msgctxt "#30028"
102 | msgid "Dropbox Key"
103 | msgstr ""
104 |
105 | msgctxt "#30029"
106 | msgid "Dropbox Secret"
107 | msgstr ""
108 |
109 | msgctxt "#30030"
110 | msgid "User Addons"
111 | msgstr ""
112 |
113 | msgctxt "#30031"
114 | msgid "Addon Data"
115 | msgstr ""
116 |
117 | msgctxt "#30032"
118 | msgid "Database"
119 | msgstr ""
120 |
121 | msgctxt "#30033"
122 | msgid "Playlist"
123 | msgstr ""
124 |
125 | msgctxt "#30034"
126 | msgid "Thumbnails/Fanart"
127 | msgstr ""
128 |
129 | msgctxt "#30035"
130 | msgid "Config Files"
131 | msgstr ""
132 |
133 | msgctxt "#30036"
134 | msgid "Disclaimer"
135 | msgstr ""
136 |
137 | msgctxt "#30037"
138 | msgid "Canceling this menu will close and save changes"
139 | msgstr ""
140 |
141 | msgctxt "#30038"
142 | msgid "Advanced Settings Detected"
143 | msgstr ""
144 |
145 | msgctxt "#30039"
146 | msgid "The advancedsettings file should be restored first"
147 | msgstr ""
148 |
149 | msgctxt "#30040"
150 | msgid "Select Yes to restore this file and restart Kodi"
151 | msgstr ""
152 |
153 | msgctxt "#30041"
154 | msgid "Select No to continue"
155 | msgstr ""
156 |
157 | msgctxt "#30042"
158 | msgid "Resume Restore"
159 | msgstr ""
160 |
161 | msgctxt "#30043"
162 | msgid "The Backup addon has detected an unfinished restore"
163 | msgstr ""
164 |
165 | msgctxt "#30044"
166 | msgid "Would you like to continue?"
167 | msgstr ""
168 |
169 | msgctxt "#30045"
170 | msgid "Error: Remote or zip file path doesn't exist"
171 | msgstr ""
172 |
173 | msgctxt "#30046"
174 | msgid "Starting"
175 | msgstr ""
176 |
177 | msgctxt "#30047"
178 | msgid "Local Dir"
179 | msgstr ""
180 |
181 | msgctxt "#30048"
182 | msgid "Remote Dir"
183 | msgstr ""
184 |
185 | msgctxt "#30049"
186 | msgid "Gathering file list"
187 | msgstr ""
188 |
189 | msgctxt "#30050"
190 | msgid "Remote Path exists - may have old files in it!"
191 | msgstr ""
192 |
193 | msgctxt "#30051"
194 | msgid "Creating Files List"
195 | msgstr ""
196 |
197 | msgctxt "#30052"
198 | msgid "Writing file"
199 | msgstr ""
200 |
201 | msgctxt "#30053"
202 | msgid "Starting scheduled backup"
203 | msgstr ""
204 |
205 | msgctxt "#30054"
206 | msgid "Removing backup"
207 | msgstr ""
208 |
209 | msgctxt "#30056"
210 | msgid "Scan or click this URL to authorize, click OK AFTER completion"
211 | msgstr ""
212 |
213 | msgctxt "#30057"
214 | msgid "Click OK AFTER completion"
215 | msgstr ""
216 |
217 | msgctxt "#30058"
218 | msgid "Developer Code Needed"
219 | msgstr ""
220 |
221 | msgctxt "#30059"
222 | msgid "Visit https://www.dropbox.com/developers"
223 | msgstr ""
224 |
225 | msgctxt "#30060"
226 | msgid "Enable Scheduler"
227 | msgstr ""
228 |
229 | msgctxt "#30061"
230 | msgid "Schedule"
231 | msgstr ""
232 |
233 | msgctxt "#30062"
234 | msgid "Hour of Day"
235 | msgstr ""
236 |
237 | msgctxt "#30063"
238 | msgid "Day of Week"
239 | msgstr ""
240 |
241 | msgctxt "#30064"
242 | msgid "Cron Schedule"
243 | msgstr ""
244 |
245 | msgctxt "#30065"
246 | msgid "Sunday"
247 | msgstr ""
248 |
249 | msgctxt "#30066"
250 | msgid "Monday"
251 | msgstr ""
252 |
253 | msgctxt "#30067"
254 | msgid "Tuesday"
255 | msgstr ""
256 |
257 | msgctxt "#30068"
258 | msgid "Wednesday"
259 | msgstr ""
260 |
261 | msgctxt "#30069"
262 | msgid "Thursday"
263 | msgstr ""
264 |
265 | msgctxt "#30070"
266 | msgid "Friday"
267 | msgstr ""
268 |
269 | msgctxt "#30071"
270 | msgid "Saturday"
271 | msgstr ""
272 |
273 | msgctxt "#30072"
274 | msgid "Every Day"
275 | msgstr ""
276 |
277 | msgctxt "#30073"
278 | msgid "Every Week"
279 | msgstr ""
280 |
281 | msgctxt "#30074"
282 | msgid "First Day of Month"
283 | msgstr ""
284 |
285 | msgctxt "#30075"
286 | msgid "Custom Schedule"
287 | msgstr ""
288 |
289 | msgctxt "#30076"
290 | msgid "Shutdown After Backup"
291 | msgstr ""
292 |
293 | msgctxt "#30077"
294 | msgid "Restart Kodi"
295 | msgstr ""
296 |
297 | msgctxt "#30078"
298 | msgid "You should restart Kodi to continue"
299 | msgstr ""
300 |
301 | msgctxt "#30079"
302 | msgid "Just Today"
303 | msgstr ""
304 |
305 | msgctxt "#30080"
306 | msgid "Profiles"
307 | msgstr ""
308 |
309 | msgctxt "#30081"
310 | msgid "Scheduler will run again on"
311 | msgstr ""
312 |
313 | msgctxt "#30082"
314 | msgid "Progress Bar"
315 | msgstr ""
316 |
317 | msgctxt "#30083"
318 | msgid "Background Progress Bar"
319 | msgstr ""
320 |
321 | msgctxt "#30084"
322 | msgid "None (Silent)"
323 | msgstr ""
324 |
325 | msgctxt "#30085"
326 | msgid "Version Warning"
327 | msgstr ""
328 |
329 | msgctxt "#30086"
330 | msgid "This version of Kodi is different than the one used to create the archive"
331 | msgstr ""
332 |
333 | msgctxt "#30087"
334 | msgid "Compress Archives"
335 | msgstr ""
336 |
337 | msgctxt "#30088"
338 | msgid "Copying Zip Archive"
339 | msgstr ""
340 |
341 | msgctxt "#30089"
342 | msgid "Write Error Detected"
343 | msgstr ""
344 |
345 | msgctxt "#30090"
346 | msgid "The destination may not be writeable"
347 | msgstr ""
348 |
349 | msgctxt "#30091"
350 | msgid "Zip archive could not be copied"
351 | msgstr ""
352 |
353 | msgctxt "#30092"
354 | msgid "Not all files were copied"
355 | msgstr ""
356 |
357 | msgctxt "#30093"
358 | msgid "Delete Authorization Info"
359 | msgstr ""
360 |
361 | msgctxt "#30094"
362 | msgid "This will delete any OAuth token files"
363 | msgstr ""
364 |
365 | msgctxt "#30095"
366 | msgid "Do you want to do this?"
367 | msgstr ""
368 |
369 | msgctxt "#30096"
370 | msgid "Old Zip Archive could not be deleted"
371 | msgstr ""
372 |
373 | msgctxt "#30097"
374 | msgid "This needs to happen before a backup can run"
375 | msgstr ""
376 |
377 | msgctxt "#30098"
378 | msgid "Google Drive"
379 | msgstr ""
380 |
381 | msgctxt "#30099"
382 | msgid "Open Settings"
383 | msgstr ""
384 |
385 | msgctxt "#30100"
386 | msgid "Extracting Archive"
387 | msgstr ""
388 |
389 | msgctxt "#30101"
390 | msgid "Error extracting the zip archive"
391 | msgstr ""
392 |
393 | msgctxt "#30102"
394 | msgid "Click OK to enter code"
395 | msgstr ""
396 |
397 | msgctxt "#30103"
398 | msgid "Validation Code"
399 | msgstr ""
400 |
401 | msgctxt "#30104"
402 | msgid "Authorize Now"
403 | msgstr ""
404 |
405 | msgctxt "#30105"
406 | msgid "Authorize this remote service in the settings first"
407 | msgstr ""
408 |
409 | msgctxt "#30106"
410 | msgid "is authorized"
411 | msgstr ""
412 |
413 | msgctxt "#30107"
414 | msgid "error authorizing"
415 | msgstr ""
416 |
417 | msgctxt "#30108"
418 | msgid "Visit https://console.developers.google.com/"
419 | msgstr ""
420 |
421 | msgctxt "#30109"
422 | msgid "Run on startup if missed"
423 | msgstr ""
424 |
425 | msgctxt "#30110"
426 | msgid "Set Name"
427 | msgstr ""
428 |
429 | msgctxt "#30111"
430 | msgid "Root folder selection"
431 | msgstr ""
432 |
433 | msgctxt "#30112"
434 | msgid "Browse Folder"
435 | msgstr ""
436 |
437 | msgctxt "#30113"
438 | msgid "Enter Own"
439 | msgstr ""
440 |
441 | msgctxt "#30114"
442 | msgid "starts in Kodi home"
443 | msgstr ""
444 |
445 | msgctxt "#30115"
446 | msgid "enter path to start there"
447 | msgstr ""
448 |
449 | msgctxt "#30116"
450 | msgid "Enter root path"
451 | msgstr ""
452 |
453 | msgctxt "#30117"
454 | msgid "Path Error"
455 | msgstr ""
456 |
457 | msgctxt "#30118"
458 | msgid "Path does not exist"
459 | msgstr ""
460 |
461 | msgctxt "#30119"
462 | msgid "Select root"
463 | msgstr ""
464 |
465 | msgctxt "#30120"
466 | msgid "Add Exclude Folder"
467 | msgstr ""
468 |
469 | msgctxt "#30121"
470 | msgid "Root Folder"
471 | msgstr ""
472 |
473 | msgctxt "#30122"
474 | msgid "Edit"
475 | msgstr ""
476 |
477 | msgctxt "#30123"
478 | msgid "Delete"
479 | msgstr ""
480 |
481 | msgctxt "#30124"
482 | msgid "Choose Action"
483 | msgstr ""
484 |
485 | msgctxt "#30125"
486 | msgid "Advanced Editor"
487 | msgstr ""
488 |
489 | msgctxt "#30126"
490 | msgid "Add Set"
491 | msgstr ""
492 |
493 | msgctxt "#30127"
494 | msgid "Delete Set"
495 | msgstr ""
496 |
497 | msgctxt "#30128"
498 | msgid "Are you sure you want to delete?"
499 | msgstr ""
500 |
501 | msgctxt "#30129"
502 | msgid "Exclude"
503 | msgstr ""
504 |
505 | msgctxt "#30130"
506 | msgid "The root folder cannot be changed"
507 | msgstr ""
508 |
509 | msgctxt "#30131"
510 | msgid "Choose Sets to Restore"
511 | msgstr ""
512 |
513 | msgctxt "#30132"
514 | msgid "Version 1.5.0 requires you to setup your file selections again - this is a breaking change"
515 | msgstr ""
516 |
517 | msgctxt "#30133"
518 | msgid "Game Saves"
519 | msgstr ""
520 |
521 | msgctxt "#30134"
522 | msgid "Include"
523 | msgstr ""
524 |
525 | msgctxt "#30135"
526 | msgid "Add Include Folder"
527 | msgstr ""
528 |
529 | msgctxt "#30136"
530 | msgid "Path must be within root folder"
531 | msgstr ""
532 |
533 | msgctxt "#30137"
534 | msgid "This path is part of a rule already"
535 | msgstr ""
536 |
537 | msgctxt "#30138"
538 | msgid "Set Name exists already"
539 | msgstr ""
540 |
541 | msgctxt "#30139"
542 | msgid "Copy Simple Config"
543 | msgstr ""
544 |
545 | msgctxt "#30140"
546 | msgid "This will copy the default Simple file selection to the Advanced Editor"
547 | msgstr ""
548 |
549 | msgctxt "#30141"
550 | msgid "This will erase any current Advanced Editor settings"
551 | msgstr ""
552 |
553 | msgctxt "#30142"
554 | msgid "Enable Verbose Logging"
555 | msgstr ""
556 |
557 | msgctxt "#30143"
558 | msgid "Exclude a specific folder from this backup set"
559 | msgstr ""
560 |
561 | msgctxt "#30144"
562 | msgid "Include a specific folder to this backup set"
563 | msgstr ""
564 |
565 | msgctxt "#30145"
566 | msgid "Type"
567 | msgstr ""
568 |
569 | msgctxt "#30146"
570 | msgid "Include Sub Folders"
571 | msgstr ""
572 |
573 | msgctxt "#30147"
574 | msgid "Toggle Sub Folders"
575 | msgstr ""
576 |
577 | msgctxt "#30148"
578 | msgid "Ask before restoring Kodi UI settings"
579 | msgstr ""
580 |
581 | msgctxt "#30149"
582 | msgid "Restore Kodi UI Settings"
583 | msgstr ""
584 |
585 | msgctxt "#30150"
586 | msgid "Restore saved Kodi system settings from backup?"
587 | msgstr ""
588 |
589 | msgctxt "#30151"
590 | msgid "Enable Verbose Logging"
591 | msgstr ""
592 |
593 | msgctxt "#30152"
594 | msgid "Set Zip File Location"
595 | msgstr ""
596 |
597 | msgctxt "#30153"
598 | msgid "Full path to where the zip file will be staged during backup or restore - must be local to this device"
599 | msgstr ""
600 |
601 | msgctxt "#30154"
602 | msgid "Always prompt if Kodi settings should be restored - no by default"
603 | msgstr ""
604 |
605 | msgctxt "#30155"
606 | msgid "Adds additional information to the log file"
607 | msgstr ""
608 |
609 | msgctxt "#30156"
610 | msgid "Must save key/secret first, then return to settings to authorize"
611 | msgstr ""
612 |
613 | msgctxt "#30157"
614 | msgid "Simple uses pre-defined folder locations, use Advanced Editor to define custom paths"
615 | msgstr ""
616 |
617 | msgctxt "#30158"
618 | msgid "Run backup on daily, weekly, monthly, or custom schedule"
619 | msgstr ""
620 |
621 | msgctxt "#30159"
622 | msgid "Backup started with unknown mode"
623 | msgstr ""
624 |
625 | msgctxt "#30160"
626 | msgid "Backup Filename Suffix"
627 | msgstr ""
628 |
629 | msgctxt "#30161"
630 | msgid "Amend a string to the end of each backup folder or ZIP file"
631 | msgstr ""
632 |
--------------------------------------------------------------------------------
/resources/language/resource.language.ml_in/strings.po:
--------------------------------------------------------------------------------
1 | # Kodi Media Center language file
2 | # Addon Name: Backup
3 | # Addon id: script.xbmcbackup
4 | # Addon Provider: robweber
5 | # Translators:
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: XBMC Addons\n"
9 | "Report-Msgid-Bugs-To: alanwww1@xbmc.org\n"
10 | "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
11 | "PO-Revision-Date: 2022-03-09 14:05+0000\n"
12 | "Last-Translator: Christian Gade \n"
13 | "Language-Team: Malayalam (India) \n"
14 | "Language: ml_in\n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 | "Plural-Forms: nplurals=2; plural=n != 1;\n"
19 | "X-Generator: Weblate 4.11.2\n"
20 |
21 | msgctxt "Addon Summary"
22 | msgid "Backup and restore your Kodi database and configuration files in the event of a crash or file corruption."
23 | msgstr ""
24 |
25 | msgctxt "Addon Description"
26 | msgid "Ever hosed your Kodi configuration and wished you'd had a backup? Now you can with one easy click. You can export your database, playlist, thumbnails, addons and other configuration details to any source writeable by Kodi or directly to Dropbox cloud storage. Backups can be run on demand or via a scheduler. "
27 | msgstr ""
28 |
29 | msgctxt "#30010"
30 | msgid "Backup"
31 | msgstr ""
32 |
33 | msgctxt "#30011"
34 | msgid "General"
35 | msgstr "പോതുവായത്"
36 |
37 | msgctxt "#30012"
38 | msgid "File Selection"
39 | msgstr ""
40 |
41 | msgctxt "#30013"
42 | msgid "Scheduling"
43 | msgstr ""
44 |
45 | msgctxt "#30014"
46 | msgid "Simple"
47 | msgstr ""
48 |
49 | msgctxt "#30015"
50 | msgid "Advanced"
51 | msgstr ""
52 |
53 | msgctxt "#30016"
54 | msgid "Backup"
55 | msgstr ""
56 |
57 | msgctxt "#30017"
58 | msgid "Restore"
59 | msgstr ""
60 |
61 | msgctxt "#30018"
62 | msgid "Browse Path"
63 | msgstr ""
64 |
65 | msgctxt "#30019"
66 | msgid "Type Path"
67 | msgstr ""
68 |
69 | msgctxt "#30020"
70 | msgid "Browse Remote Path"
71 | msgstr ""
72 |
73 | msgctxt "#30021"
74 | msgid "Backup Folder Name"
75 | msgstr ""
76 |
77 | msgctxt "#30022"
78 | msgid "Progress Display"
79 | msgstr ""
80 |
81 | msgctxt "#30023"
82 | msgid "Mode"
83 | msgstr ""
84 |
85 | msgctxt "#30024"
86 | msgid "Type Remote Path"
87 | msgstr ""
88 |
89 | msgctxt "#30025"
90 | msgid "Remote Path Type"
91 | msgstr ""
92 |
93 | msgctxt "#30026"
94 | msgid "Backups to keep (0 for all)"
95 | msgstr ""
96 |
97 | msgctxt "#30027"
98 | msgid "Dropbox"
99 | msgstr ""
100 |
101 | msgctxt "#30028"
102 | msgid "Dropbox Key"
103 | msgstr ""
104 |
105 | msgctxt "#30029"
106 | msgid "Dropbox Secret"
107 | msgstr ""
108 |
109 | msgctxt "#30030"
110 | msgid "User Addons"
111 | msgstr ""
112 |
113 | msgctxt "#30031"
114 | msgid "Addon Data"
115 | msgstr ""
116 |
117 | msgctxt "#30032"
118 | msgid "Database"
119 | msgstr ""
120 |
121 | msgctxt "#30033"
122 | msgid "Playlist"
123 | msgstr ""
124 |
125 | msgctxt "#30034"
126 | msgid "Thumbnails/Fanart"
127 | msgstr ""
128 |
129 | msgctxt "#30035"
130 | msgid "Config Files"
131 | msgstr ""
132 |
133 | msgctxt "#30036"
134 | msgid "Disclaimer"
135 | msgstr ""
136 |
137 | msgctxt "#30037"
138 | msgid "Canceling this menu will close and save changes"
139 | msgstr ""
140 |
141 | msgctxt "#30038"
142 | msgid "Advanced Settings Detected"
143 | msgstr ""
144 |
145 | msgctxt "#30039"
146 | msgid "The advancedsettings file should be restored first"
147 | msgstr ""
148 |
149 | msgctxt "#30040"
150 | msgid "Select Yes to restore this file and restart Kodi"
151 | msgstr ""
152 |
153 | msgctxt "#30041"
154 | msgid "Select No to continue"
155 | msgstr ""
156 |
157 | msgctxt "#30042"
158 | msgid "Resume Restore"
159 | msgstr ""
160 |
161 | msgctxt "#30043"
162 | msgid "The Backup addon has detected an unfinished restore"
163 | msgstr ""
164 |
165 | msgctxt "#30044"
166 | msgid "Would you like to continue?"
167 | msgstr ""
168 |
169 | msgctxt "#30045"
170 | msgid "Error: Remote or zip file path doesn't exist"
171 | msgstr ""
172 |
173 | msgctxt "#30046"
174 | msgid "Starting"
175 | msgstr ""
176 |
177 | msgctxt "#30047"
178 | msgid "Local Dir"
179 | msgstr ""
180 |
181 | msgctxt "#30048"
182 | msgid "Remote Dir"
183 | msgstr ""
184 |
185 | msgctxt "#30049"
186 | msgid "Gathering file list"
187 | msgstr ""
188 |
189 | msgctxt "#30050"
190 | msgid "Remote Path exists - may have old files in it!"
191 | msgstr ""
192 |
193 | msgctxt "#30051"
194 | msgid "Creating Files List"
195 | msgstr ""
196 |
197 | msgctxt "#30052"
198 | msgid "Writing file"
199 | msgstr ""
200 |
201 | msgctxt "#30053"
202 | msgid "Starting scheduled backup"
203 | msgstr ""
204 |
205 | msgctxt "#30054"
206 | msgid "Removing backup"
207 | msgstr ""
208 |
209 | msgctxt "#30056"
210 | msgid "Scan or click this URL to authorize, click OK AFTER completion"
211 | msgstr ""
212 |
213 | msgctxt "#30057"
214 | msgid "Click OK AFTER completion"
215 | msgstr ""
216 |
217 | msgctxt "#30058"
218 | msgid "Developer Code Needed"
219 | msgstr ""
220 |
221 | msgctxt "#30059"
222 | msgid "Visit https://www.dropbox.com/developers"
223 | msgstr ""
224 |
225 | msgctxt "#30060"
226 | msgid "Enable Scheduler"
227 | msgstr ""
228 |
229 | msgctxt "#30061"
230 | msgid "Schedule"
231 | msgstr ""
232 |
233 | msgctxt "#30062"
234 | msgid "Hour of Day"
235 | msgstr ""
236 |
237 | msgctxt "#30063"
238 | msgid "Day of Week"
239 | msgstr ""
240 |
241 | msgctxt "#30064"
242 | msgid "Cron Schedule"
243 | msgstr ""
244 |
245 | msgctxt "#30065"
246 | msgid "Sunday"
247 | msgstr ""
248 |
249 | msgctxt "#30066"
250 | msgid "Monday"
251 | msgstr ""
252 |
253 | msgctxt "#30067"
254 | msgid "Tuesday"
255 | msgstr ""
256 |
257 | msgctxt "#30068"
258 | msgid "Wednesday"
259 | msgstr ""
260 |
261 | msgctxt "#30069"
262 | msgid "Thursday"
263 | msgstr ""
264 |
265 | msgctxt "#30070"
266 | msgid "Friday"
267 | msgstr ""
268 |
269 | msgctxt "#30071"
270 | msgid "Saturday"
271 | msgstr ""
272 |
273 | msgctxt "#30072"
274 | msgid "Every Day"
275 | msgstr ""
276 |
277 | msgctxt "#30073"
278 | msgid "Every Week"
279 | msgstr ""
280 |
281 | msgctxt "#30074"
282 | msgid "First Day of Month"
283 | msgstr ""
284 |
285 | msgctxt "#30075"
286 | msgid "Custom Schedule"
287 | msgstr ""
288 |
289 | msgctxt "#30076"
290 | msgid "Shutdown After Backup"
291 | msgstr ""
292 |
293 | msgctxt "#30077"
294 | msgid "Restart Kodi"
295 | msgstr ""
296 |
297 | msgctxt "#30078"
298 | msgid "You should restart Kodi to continue"
299 | msgstr ""
300 |
301 | msgctxt "#30079"
302 | msgid "Just Today"
303 | msgstr ""
304 |
305 | msgctxt "#30080"
306 | msgid "Profiles"
307 | msgstr ""
308 |
309 | msgctxt "#30081"
310 | msgid "Scheduler will run again on"
311 | msgstr ""
312 |
313 | msgctxt "#30082"
314 | msgid "Progress Bar"
315 | msgstr ""
316 |
317 | msgctxt "#30083"
318 | msgid "Background Progress Bar"
319 | msgstr ""
320 |
321 | msgctxt "#30084"
322 | msgid "None (Silent)"
323 | msgstr ""
324 |
325 | msgctxt "#30085"
326 | msgid "Version Warning"
327 | msgstr ""
328 |
329 | msgctxt "#30086"
330 | msgid "This version of Kodi is different than the one used to create the archive"
331 | msgstr ""
332 |
333 | msgctxt "#30087"
334 | msgid "Compress Archives"
335 | msgstr ""
336 |
337 | msgctxt "#30088"
338 | msgid "Copying Zip Archive"
339 | msgstr ""
340 |
341 | msgctxt "#30089"
342 | msgid "Write Error Detected"
343 | msgstr ""
344 |
345 | msgctxt "#30090"
346 | msgid "The destination may not be writeable"
347 | msgstr ""
348 |
349 | msgctxt "#30091"
350 | msgid "Zip archive could not be copied"
351 | msgstr ""
352 |
353 | msgctxt "#30092"
354 | msgid "Not all files were copied"
355 | msgstr ""
356 |
357 | msgctxt "#30093"
358 | msgid "Delete Authorization Info"
359 | msgstr ""
360 |
361 | msgctxt "#30094"
362 | msgid "This will delete any OAuth token files"
363 | msgstr ""
364 |
365 | msgctxt "#30095"
366 | msgid "Do you want to do this?"
367 | msgstr ""
368 |
369 | msgctxt "#30096"
370 | msgid "Old Zip Archive could not be deleted"
371 | msgstr ""
372 |
373 | msgctxt "#30097"
374 | msgid "This needs to happen before a backup can run"
375 | msgstr ""
376 |
377 | msgctxt "#30098"
378 | msgid "Google Drive"
379 | msgstr ""
380 |
381 | msgctxt "#30099"
382 | msgid "Open Settings"
383 | msgstr ""
384 |
385 | msgctxt "#30100"
386 | msgid "Extracting Archive"
387 | msgstr ""
388 |
389 | msgctxt "#30101"
390 | msgid "Error extracting the zip archive"
391 | msgstr ""
392 |
393 | msgctxt "#30102"
394 | msgid "Click OK to enter code"
395 | msgstr ""
396 |
397 | msgctxt "#30103"
398 | msgid "Validation Code"
399 | msgstr ""
400 |
401 | msgctxt "#30104"
402 | msgid "Authorize Now"
403 | msgstr ""
404 |
405 | msgctxt "#30105"
406 | msgid "Authorize this remote service in the settings first"
407 | msgstr ""
408 |
409 | msgctxt "#30106"
410 | msgid "is authorized"
411 | msgstr ""
412 |
413 | msgctxt "#30107"
414 | msgid "error authorizing"
415 | msgstr ""
416 |
417 | msgctxt "#30108"
418 | msgid "Visit https://console.developers.google.com/"
419 | msgstr ""
420 |
421 | msgctxt "#30109"
422 | msgid "Run on startup if missed"
423 | msgstr ""
424 |
425 | msgctxt "#30110"
426 | msgid "Set Name"
427 | msgstr ""
428 |
429 | msgctxt "#30111"
430 | msgid "Root folder selection"
431 | msgstr ""
432 |
433 | msgctxt "#30112"
434 | msgid "Browse Folder"
435 | msgstr ""
436 |
437 | msgctxt "#30113"
438 | msgid "Enter Own"
439 | msgstr ""
440 |
441 | msgctxt "#30114"
442 | msgid "starts in Kodi home"
443 | msgstr ""
444 |
445 | msgctxt "#30115"
446 | msgid "enter path to start there"
447 | msgstr ""
448 |
449 | msgctxt "#30116"
450 | msgid "Enter root path"
451 | msgstr ""
452 |
453 | msgctxt "#30117"
454 | msgid "Path Error"
455 | msgstr ""
456 |
457 | msgctxt "#30118"
458 | msgid "Path does not exist"
459 | msgstr ""
460 |
461 | msgctxt "#30119"
462 | msgid "Select root"
463 | msgstr ""
464 |
465 | msgctxt "#30120"
466 | msgid "Add Exclude Folder"
467 | msgstr ""
468 |
469 | msgctxt "#30121"
470 | msgid "Root Folder"
471 | msgstr ""
472 |
473 | msgctxt "#30122"
474 | msgid "Edit"
475 | msgstr ""
476 |
477 | msgctxt "#30123"
478 | msgid "Delete"
479 | msgstr ""
480 |
481 | msgctxt "#30124"
482 | msgid "Choose Action"
483 | msgstr ""
484 |
485 | msgctxt "#30125"
486 | msgid "Advanced Editor"
487 | msgstr ""
488 |
489 | msgctxt "#30126"
490 | msgid "Add Set"
491 | msgstr ""
492 |
493 | msgctxt "#30127"
494 | msgid "Delete Set"
495 | msgstr ""
496 |
497 | msgctxt "#30128"
498 | msgid "Are you sure you want to delete?"
499 | msgstr ""
500 |
501 | msgctxt "#30129"
502 | msgid "Exclude"
503 | msgstr ""
504 |
505 | msgctxt "#30130"
506 | msgid "The root folder cannot be changed"
507 | msgstr ""
508 |
509 | msgctxt "#30131"
510 | msgid "Choose Sets to Restore"
511 | msgstr ""
512 |
513 | msgctxt "#30132"
514 | msgid "Version 1.5.0 requires you to setup your file selections again - this is a breaking change"
515 | msgstr ""
516 |
517 | msgctxt "#30133"
518 | msgid "Game Saves"
519 | msgstr ""
520 |
521 | msgctxt "#30134"
522 | msgid "Include"
523 | msgstr ""
524 |
525 | msgctxt "#30135"
526 | msgid "Add Include Folder"
527 | msgstr ""
528 |
529 | msgctxt "#30136"
530 | msgid "Path must be within root folder"
531 | msgstr ""
532 |
533 | msgctxt "#30137"
534 | msgid "This path is part of a rule already"
535 | msgstr ""
536 |
537 | msgctxt "#30138"
538 | msgid "Set Name exists already"
539 | msgstr ""
540 |
541 | msgctxt "#30139"
542 | msgid "Copy Simple Config"
543 | msgstr ""
544 |
545 | msgctxt "#30140"
546 | msgid "This will copy the default Simple file selection to the Advanced Editor"
547 | msgstr ""
548 |
549 | msgctxt "#30141"
550 | msgid "This will erase any current Advanced Editor settings"
551 | msgstr ""
552 |
553 | msgctxt "#30142"
554 | msgid "Enable Verbose Logging"
555 | msgstr ""
556 |
557 | msgctxt "#30143"
558 | msgid "Exclude a specific folder from this backup set"
559 | msgstr ""
560 |
561 | msgctxt "#30144"
562 | msgid "Include a specific folder to this backup set"
563 | msgstr ""
564 |
565 | msgctxt "#30145"
566 | msgid "Type"
567 | msgstr ""
568 |
569 | msgctxt "#30146"
570 | msgid "Include Sub Folders"
571 | msgstr ""
572 |
573 | msgctxt "#30147"
574 | msgid "Toggle Sub Folders"
575 | msgstr ""
576 |
577 | msgctxt "#30148"
578 | msgid "Ask before restoring Kodi UI settings"
579 | msgstr ""
580 |
581 | msgctxt "#30149"
582 | msgid "Restore Kodi UI Settings"
583 | msgstr ""
584 |
585 | msgctxt "#30150"
586 | msgid "Restore saved Kodi system settings from backup?"
587 | msgstr ""
588 |
589 | msgctxt "#30151"
590 | msgid "Enable Verbose Logging"
591 | msgstr ""
592 |
593 | msgctxt "#30152"
594 | msgid "Set Zip File Location"
595 | msgstr ""
596 |
597 | msgctxt "#30153"
598 | msgid "Full path to where the zip file will be staged during backup or restore - must be local to this device"
599 | msgstr ""
600 |
601 | msgctxt "#30154"
602 | msgid "Always prompt if Kodi settings should be restored - no by default"
603 | msgstr ""
604 |
605 | msgctxt "#30155"
606 | msgid "Adds additional information to the log file"
607 | msgstr ""
608 |
609 | msgctxt "#30156"
610 | msgid "Must save key/secret first, then return to settings to authorize"
611 | msgstr ""
612 |
613 | msgctxt "#30157"
614 | msgid "Simple uses pre-defined folder locations, use Advanced Editor to define custom paths"
615 | msgstr ""
616 |
617 | msgctxt "#30158"
618 | msgid "Run backup on daily, weekly, monthly, or custom schedule"
619 | msgstr ""
620 |
621 | msgctxt "#30159"
622 | msgid "Backup started with unknown mode"
623 | msgstr ""
624 |
625 | msgctxt "#30160"
626 | msgid "Backup Filename Suffix"
627 | msgstr ""
628 |
629 | msgctxt "#30161"
630 | msgid "Amend a string to the end of each backup folder or ZIP file"
631 | msgstr ""
632 |
--------------------------------------------------------------------------------
/resources/language/resource.language.si_lk/strings.po:
--------------------------------------------------------------------------------
1 | # Kodi Media Center language file
2 | # Addon Name: Backup
3 | # Addon id: script.xbmcbackup
4 | # Addon Provider: robweber
5 | # Translators:
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: XBMC Addons\n"
9 | "Report-Msgid-Bugs-To: alanwww1@xbmc.org\n"
10 | "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
11 | "PO-Revision-Date: 2022-03-09 14:05+0000\n"
12 | "Last-Translator: Christian Gade \n"
13 | "Language-Team: Sinhala (Sri Lanka) \n"
14 | "Language: si_lk\n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 | "Plural-Forms: nplurals=2; plural=n > 1;\n"
19 | "X-Generator: Weblate 4.11.2\n"
20 |
21 | msgctxt "Addon Summary"
22 | msgid "Backup and restore your Kodi database and configuration files in the event of a crash or file corruption."
23 | msgstr ""
24 |
25 | msgctxt "Addon Description"
26 | msgid "Ever hosed your Kodi configuration and wished you'd had a backup? Now you can with one easy click. You can export your database, playlist, thumbnails, addons and other configuration details to any source writeable by Kodi or directly to Dropbox cloud storage. Backups can be run on demand or via a scheduler. "
27 | msgstr ""
28 |
29 | msgctxt "#30010"
30 | msgid "Backup"
31 | msgstr ""
32 |
33 | msgctxt "#30011"
34 | msgid "General"
35 | msgstr "සාමාන්ය"
36 |
37 | msgctxt "#30012"
38 | msgid "File Selection"
39 | msgstr ""
40 |
41 | msgctxt "#30013"
42 | msgid "Scheduling"
43 | msgstr ""
44 |
45 | msgctxt "#30014"
46 | msgid "Simple"
47 | msgstr ""
48 |
49 | msgctxt "#30015"
50 | msgid "Advanced"
51 | msgstr ""
52 |
53 | msgctxt "#30016"
54 | msgid "Backup"
55 | msgstr ""
56 |
57 | msgctxt "#30017"
58 | msgid "Restore"
59 | msgstr ""
60 |
61 | msgctxt "#30018"
62 | msgid "Browse Path"
63 | msgstr ""
64 |
65 | msgctxt "#30019"
66 | msgid "Type Path"
67 | msgstr ""
68 |
69 | msgctxt "#30020"
70 | msgid "Browse Remote Path"
71 | msgstr ""
72 |
73 | msgctxt "#30021"
74 | msgid "Backup Folder Name"
75 | msgstr ""
76 |
77 | msgctxt "#30022"
78 | msgid "Progress Display"
79 | msgstr ""
80 |
81 | msgctxt "#30023"
82 | msgid "Mode"
83 | msgstr ""
84 |
85 | msgctxt "#30024"
86 | msgid "Type Remote Path"
87 | msgstr ""
88 |
89 | msgctxt "#30025"
90 | msgid "Remote Path Type"
91 | msgstr ""
92 |
93 | msgctxt "#30026"
94 | msgid "Backups to keep (0 for all)"
95 | msgstr ""
96 |
97 | msgctxt "#30027"
98 | msgid "Dropbox"
99 | msgstr ""
100 |
101 | msgctxt "#30028"
102 | msgid "Dropbox Key"
103 | msgstr ""
104 |
105 | msgctxt "#30029"
106 | msgid "Dropbox Secret"
107 | msgstr ""
108 |
109 | msgctxt "#30030"
110 | msgid "User Addons"
111 | msgstr ""
112 |
113 | msgctxt "#30031"
114 | msgid "Addon Data"
115 | msgstr ""
116 |
117 | msgctxt "#30032"
118 | msgid "Database"
119 | msgstr ""
120 |
121 | msgctxt "#30033"
122 | msgid "Playlist"
123 | msgstr ""
124 |
125 | msgctxt "#30034"
126 | msgid "Thumbnails/Fanart"
127 | msgstr ""
128 |
129 | msgctxt "#30035"
130 | msgid "Config Files"
131 | msgstr ""
132 |
133 | msgctxt "#30036"
134 | msgid "Disclaimer"
135 | msgstr ""
136 |
137 | msgctxt "#30037"
138 | msgid "Canceling this menu will close and save changes"
139 | msgstr ""
140 |
141 | msgctxt "#30038"
142 | msgid "Advanced Settings Detected"
143 | msgstr ""
144 |
145 | msgctxt "#30039"
146 | msgid "The advancedsettings file should be restored first"
147 | msgstr ""
148 |
149 | msgctxt "#30040"
150 | msgid "Select Yes to restore this file and restart Kodi"
151 | msgstr ""
152 |
153 | msgctxt "#30041"
154 | msgid "Select No to continue"
155 | msgstr ""
156 |
157 | msgctxt "#30042"
158 | msgid "Resume Restore"
159 | msgstr ""
160 |
161 | msgctxt "#30043"
162 | msgid "The Backup addon has detected an unfinished restore"
163 | msgstr ""
164 |
165 | msgctxt "#30044"
166 | msgid "Would you like to continue?"
167 | msgstr ""
168 |
169 | msgctxt "#30045"
170 | msgid "Error: Remote or zip file path doesn't exist"
171 | msgstr ""
172 |
173 | msgctxt "#30046"
174 | msgid "Starting"
175 | msgstr ""
176 |
177 | msgctxt "#30047"
178 | msgid "Local Dir"
179 | msgstr ""
180 |
181 | msgctxt "#30048"
182 | msgid "Remote Dir"
183 | msgstr ""
184 |
185 | msgctxt "#30049"
186 | msgid "Gathering file list"
187 | msgstr ""
188 |
189 | msgctxt "#30050"
190 | msgid "Remote Path exists - may have old files in it!"
191 | msgstr ""
192 |
193 | msgctxt "#30051"
194 | msgid "Creating Files List"
195 | msgstr ""
196 |
197 | msgctxt "#30052"
198 | msgid "Writing file"
199 | msgstr ""
200 |
201 | msgctxt "#30053"
202 | msgid "Starting scheduled backup"
203 | msgstr ""
204 |
205 | msgctxt "#30054"
206 | msgid "Removing backup"
207 | msgstr ""
208 |
209 | msgctxt "#30056"
210 | msgid "Scan or click this URL to authorize, click OK AFTER completion"
211 | msgstr ""
212 |
213 | msgctxt "#30057"
214 | msgid "Click OK AFTER completion"
215 | msgstr ""
216 |
217 | msgctxt "#30058"
218 | msgid "Developer Code Needed"
219 | msgstr ""
220 |
221 | msgctxt "#30059"
222 | msgid "Visit https://www.dropbox.com/developers"
223 | msgstr ""
224 |
225 | msgctxt "#30060"
226 | msgid "Enable Scheduler"
227 | msgstr ""
228 |
229 | msgctxt "#30061"
230 | msgid "Schedule"
231 | msgstr ""
232 |
233 | msgctxt "#30062"
234 | msgid "Hour of Day"
235 | msgstr ""
236 |
237 | msgctxt "#30063"
238 | msgid "Day of Week"
239 | msgstr ""
240 |
241 | msgctxt "#30064"
242 | msgid "Cron Schedule"
243 | msgstr ""
244 |
245 | msgctxt "#30065"
246 | msgid "Sunday"
247 | msgstr ""
248 |
249 | msgctxt "#30066"
250 | msgid "Monday"
251 | msgstr ""
252 |
253 | msgctxt "#30067"
254 | msgid "Tuesday"
255 | msgstr ""
256 |
257 | msgctxt "#30068"
258 | msgid "Wednesday"
259 | msgstr ""
260 |
261 | msgctxt "#30069"
262 | msgid "Thursday"
263 | msgstr ""
264 |
265 | msgctxt "#30070"
266 | msgid "Friday"
267 | msgstr ""
268 |
269 | msgctxt "#30071"
270 | msgid "Saturday"
271 | msgstr ""
272 |
273 | msgctxt "#30072"
274 | msgid "Every Day"
275 | msgstr ""
276 |
277 | msgctxt "#30073"
278 | msgid "Every Week"
279 | msgstr ""
280 |
281 | msgctxt "#30074"
282 | msgid "First Day of Month"
283 | msgstr ""
284 |
285 | msgctxt "#30075"
286 | msgid "Custom Schedule"
287 | msgstr ""
288 |
289 | msgctxt "#30076"
290 | msgid "Shutdown After Backup"
291 | msgstr ""
292 |
293 | msgctxt "#30077"
294 | msgid "Restart Kodi"
295 | msgstr ""
296 |
297 | msgctxt "#30078"
298 | msgid "You should restart Kodi to continue"
299 | msgstr ""
300 |
301 | msgctxt "#30079"
302 | msgid "Just Today"
303 | msgstr ""
304 |
305 | msgctxt "#30080"
306 | msgid "Profiles"
307 | msgstr ""
308 |
309 | msgctxt "#30081"
310 | msgid "Scheduler will run again on"
311 | msgstr ""
312 |
313 | msgctxt "#30082"
314 | msgid "Progress Bar"
315 | msgstr ""
316 |
317 | msgctxt "#30083"
318 | msgid "Background Progress Bar"
319 | msgstr ""
320 |
321 | msgctxt "#30084"
322 | msgid "None (Silent)"
323 | msgstr ""
324 |
325 | msgctxt "#30085"
326 | msgid "Version Warning"
327 | msgstr ""
328 |
329 | msgctxt "#30086"
330 | msgid "This version of Kodi is different than the one used to create the archive"
331 | msgstr ""
332 |
333 | msgctxt "#30087"
334 | msgid "Compress Archives"
335 | msgstr ""
336 |
337 | msgctxt "#30088"
338 | msgid "Copying Zip Archive"
339 | msgstr ""
340 |
341 | msgctxt "#30089"
342 | msgid "Write Error Detected"
343 | msgstr ""
344 |
345 | msgctxt "#30090"
346 | msgid "The destination may not be writeable"
347 | msgstr ""
348 |
349 | msgctxt "#30091"
350 | msgid "Zip archive could not be copied"
351 | msgstr ""
352 |
353 | msgctxt "#30092"
354 | msgid "Not all files were copied"
355 | msgstr ""
356 |
357 | msgctxt "#30093"
358 | msgid "Delete Authorization Info"
359 | msgstr ""
360 |
361 | msgctxt "#30094"
362 | msgid "This will delete any OAuth token files"
363 | msgstr ""
364 |
365 | msgctxt "#30095"
366 | msgid "Do you want to do this?"
367 | msgstr ""
368 |
369 | msgctxt "#30096"
370 | msgid "Old Zip Archive could not be deleted"
371 | msgstr ""
372 |
373 | msgctxt "#30097"
374 | msgid "This needs to happen before a backup can run"
375 | msgstr ""
376 |
377 | msgctxt "#30098"
378 | msgid "Google Drive"
379 | msgstr ""
380 |
381 | msgctxt "#30099"
382 | msgid "Open Settings"
383 | msgstr ""
384 |
385 | msgctxt "#30100"
386 | msgid "Extracting Archive"
387 | msgstr ""
388 |
389 | msgctxt "#30101"
390 | msgid "Error extracting the zip archive"
391 | msgstr ""
392 |
393 | msgctxt "#30102"
394 | msgid "Click OK to enter code"
395 | msgstr ""
396 |
397 | msgctxt "#30103"
398 | msgid "Validation Code"
399 | msgstr ""
400 |
401 | msgctxt "#30104"
402 | msgid "Authorize Now"
403 | msgstr ""
404 |
405 | msgctxt "#30105"
406 | msgid "Authorize this remote service in the settings first"
407 | msgstr ""
408 |
409 | msgctxt "#30106"
410 | msgid "is authorized"
411 | msgstr ""
412 |
413 | msgctxt "#30107"
414 | msgid "error authorizing"
415 | msgstr ""
416 |
417 | msgctxt "#30108"
418 | msgid "Visit https://console.developers.google.com/"
419 | msgstr ""
420 |
421 | msgctxt "#30109"
422 | msgid "Run on startup if missed"
423 | msgstr ""
424 |
425 | msgctxt "#30110"
426 | msgid "Set Name"
427 | msgstr ""
428 |
429 | msgctxt "#30111"
430 | msgid "Root folder selection"
431 | msgstr ""
432 |
433 | msgctxt "#30112"
434 | msgid "Browse Folder"
435 | msgstr ""
436 |
437 | msgctxt "#30113"
438 | msgid "Enter Own"
439 | msgstr ""
440 |
441 | msgctxt "#30114"
442 | msgid "starts in Kodi home"
443 | msgstr ""
444 |
445 | msgctxt "#30115"
446 | msgid "enter path to start there"
447 | msgstr ""
448 |
449 | msgctxt "#30116"
450 | msgid "Enter root path"
451 | msgstr ""
452 |
453 | msgctxt "#30117"
454 | msgid "Path Error"
455 | msgstr ""
456 |
457 | msgctxt "#30118"
458 | msgid "Path does not exist"
459 | msgstr ""
460 |
461 | msgctxt "#30119"
462 | msgid "Select root"
463 | msgstr ""
464 |
465 | msgctxt "#30120"
466 | msgid "Add Exclude Folder"
467 | msgstr ""
468 |
469 | msgctxt "#30121"
470 | msgid "Root Folder"
471 | msgstr ""
472 |
473 | msgctxt "#30122"
474 | msgid "Edit"
475 | msgstr ""
476 |
477 | msgctxt "#30123"
478 | msgid "Delete"
479 | msgstr ""
480 |
481 | msgctxt "#30124"
482 | msgid "Choose Action"
483 | msgstr ""
484 |
485 | msgctxt "#30125"
486 | msgid "Advanced Editor"
487 | msgstr ""
488 |
489 | msgctxt "#30126"
490 | msgid "Add Set"
491 | msgstr ""
492 |
493 | msgctxt "#30127"
494 | msgid "Delete Set"
495 | msgstr ""
496 |
497 | msgctxt "#30128"
498 | msgid "Are you sure you want to delete?"
499 | msgstr ""
500 |
501 | msgctxt "#30129"
502 | msgid "Exclude"
503 | msgstr ""
504 |
505 | msgctxt "#30130"
506 | msgid "The root folder cannot be changed"
507 | msgstr ""
508 |
509 | msgctxt "#30131"
510 | msgid "Choose Sets to Restore"
511 | msgstr ""
512 |
513 | msgctxt "#30132"
514 | msgid "Version 1.5.0 requires you to setup your file selections again - this is a breaking change"
515 | msgstr ""
516 |
517 | msgctxt "#30133"
518 | msgid "Game Saves"
519 | msgstr ""
520 |
521 | msgctxt "#30134"
522 | msgid "Include"
523 | msgstr ""
524 |
525 | msgctxt "#30135"
526 | msgid "Add Include Folder"
527 | msgstr ""
528 |
529 | msgctxt "#30136"
530 | msgid "Path must be within root folder"
531 | msgstr ""
532 |
533 | msgctxt "#30137"
534 | msgid "This path is part of a rule already"
535 | msgstr ""
536 |
537 | msgctxt "#30138"
538 | msgid "Set Name exists already"
539 | msgstr ""
540 |
541 | msgctxt "#30139"
542 | msgid "Copy Simple Config"
543 | msgstr ""
544 |
545 | msgctxt "#30140"
546 | msgid "This will copy the default Simple file selection to the Advanced Editor"
547 | msgstr ""
548 |
549 | msgctxt "#30141"
550 | msgid "This will erase any current Advanced Editor settings"
551 | msgstr ""
552 |
553 | msgctxt "#30142"
554 | msgid "Enable Verbose Logging"
555 | msgstr ""
556 |
557 | msgctxt "#30143"
558 | msgid "Exclude a specific folder from this backup set"
559 | msgstr ""
560 |
561 | msgctxt "#30144"
562 | msgid "Include a specific folder to this backup set"
563 | msgstr ""
564 |
565 | msgctxt "#30145"
566 | msgid "Type"
567 | msgstr ""
568 |
569 | msgctxt "#30146"
570 | msgid "Include Sub Folders"
571 | msgstr ""
572 |
573 | msgctxt "#30147"
574 | msgid "Toggle Sub Folders"
575 | msgstr ""
576 |
577 | msgctxt "#30148"
578 | msgid "Ask before restoring Kodi UI settings"
579 | msgstr ""
580 |
581 | msgctxt "#30149"
582 | msgid "Restore Kodi UI Settings"
583 | msgstr ""
584 |
585 | msgctxt "#30150"
586 | msgid "Restore saved Kodi system settings from backup?"
587 | msgstr ""
588 |
589 | msgctxt "#30151"
590 | msgid "Enable Verbose Logging"
591 | msgstr ""
592 |
593 | msgctxt "#30152"
594 | msgid "Set Zip File Location"
595 | msgstr ""
596 |
597 | msgctxt "#30153"
598 | msgid "Full path to where the zip file will be staged during backup or restore - must be local to this device"
599 | msgstr ""
600 |
601 | msgctxt "#30154"
602 | msgid "Always prompt if Kodi settings should be restored - no by default"
603 | msgstr ""
604 |
605 | msgctxt "#30155"
606 | msgid "Adds additional information to the log file"
607 | msgstr ""
608 |
609 | msgctxt "#30156"
610 | msgid "Must save key/secret first, then return to settings to authorize"
611 | msgstr ""
612 |
613 | msgctxt "#30157"
614 | msgid "Simple uses pre-defined folder locations, use Advanced Editor to define custom paths"
615 | msgstr ""
616 |
617 | msgctxt "#30158"
618 | msgid "Run backup on daily, weekly, monthly, or custom schedule"
619 | msgstr ""
620 |
621 | msgctxt "#30159"
622 | msgid "Backup started with unknown mode"
623 | msgstr ""
624 |
625 | msgctxt "#30160"
626 | msgid "Backup Filename Suffix"
627 | msgstr ""
628 |
629 | msgctxt "#30161"
630 | msgid "Amend a string to the end of each backup folder or ZIP file"
631 | msgstr ""
632 |
--------------------------------------------------------------------------------
/resources/language/resource.language.oc_fr/strings.po:
--------------------------------------------------------------------------------
1 | # Kodi Media Center language file
2 | # Addon Name: Backup
3 | # Addon id: script.xbmcbackup
4 | # Addon Provider: robweber
5 | # Translators:
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: XBMC Addons\n"
9 | "Report-Msgid-Bugs-To: alanwww1@xbmc.org\n"
10 | "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
11 | "PO-Revision-Date: 2022-03-09 14:05+0000\n"
12 | "Last-Translator: Christian Gade \n"
13 | "Language-Team: Occitan (France) \n"
14 | "Language: oc_fr\n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 | "Plural-Forms: nplurals=2; plural=n != 1;\n"
19 | "X-Generator: Weblate 4.11.2\n"
20 |
21 | msgctxt "Addon Summary"
22 | msgid "Backup and restore your Kodi database and configuration files in the event of a crash or file corruption."
23 | msgstr ""
24 |
25 | msgctxt "Addon Description"
26 | msgid "Ever hosed your Kodi configuration and wished you'd had a backup? Now you can with one easy click. You can export your database, playlist, thumbnails, addons and other configuration details to any source writeable by Kodi or directly to Dropbox cloud storage. Backups can be run on demand or via a scheduler. "
27 | msgstr ""
28 |
29 | msgctxt "#30010"
30 | msgid "Backup"
31 | msgstr ""
32 |
33 | msgctxt "#30011"
34 | msgid "General"
35 | msgstr "General"
36 |
37 | msgctxt "#30012"
38 | msgid "File Selection"
39 | msgstr ""
40 |
41 | msgctxt "#30013"
42 | msgid "Scheduling"
43 | msgstr ""
44 |
45 | msgctxt "#30014"
46 | msgid "Simple"
47 | msgstr ""
48 |
49 | msgctxt "#30015"
50 | msgid "Advanced"
51 | msgstr "Avançat"
52 |
53 | msgctxt "#30016"
54 | msgid "Backup"
55 | msgstr ""
56 |
57 | msgctxt "#30017"
58 | msgid "Restore"
59 | msgstr ""
60 |
61 | msgctxt "#30018"
62 | msgid "Browse Path"
63 | msgstr ""
64 |
65 | msgctxt "#30019"
66 | msgid "Type Path"
67 | msgstr ""
68 |
69 | msgctxt "#30020"
70 | msgid "Browse Remote Path"
71 | msgstr ""
72 |
73 | msgctxt "#30021"
74 | msgid "Backup Folder Name"
75 | msgstr ""
76 |
77 | msgctxt "#30022"
78 | msgid "Progress Display"
79 | msgstr ""
80 |
81 | msgctxt "#30023"
82 | msgid "Mode"
83 | msgstr ""
84 |
85 | msgctxt "#30024"
86 | msgid "Type Remote Path"
87 | msgstr ""
88 |
89 | msgctxt "#30025"
90 | msgid "Remote Path Type"
91 | msgstr ""
92 |
93 | msgctxt "#30026"
94 | msgid "Backups to keep (0 for all)"
95 | msgstr ""
96 |
97 | msgctxt "#30027"
98 | msgid "Dropbox"
99 | msgstr ""
100 |
101 | msgctxt "#30028"
102 | msgid "Dropbox Key"
103 | msgstr ""
104 |
105 | msgctxt "#30029"
106 | msgid "Dropbox Secret"
107 | msgstr ""
108 |
109 | msgctxt "#30030"
110 | msgid "User Addons"
111 | msgstr ""
112 |
113 | msgctxt "#30031"
114 | msgid "Addon Data"
115 | msgstr ""
116 |
117 | msgctxt "#30032"
118 | msgid "Database"
119 | msgstr ""
120 |
121 | msgctxt "#30033"
122 | msgid "Playlist"
123 | msgstr ""
124 |
125 | msgctxt "#30034"
126 | msgid "Thumbnails/Fanart"
127 | msgstr ""
128 |
129 | msgctxt "#30035"
130 | msgid "Config Files"
131 | msgstr ""
132 |
133 | msgctxt "#30036"
134 | msgid "Disclaimer"
135 | msgstr ""
136 |
137 | msgctxt "#30037"
138 | msgid "Canceling this menu will close and save changes"
139 | msgstr ""
140 |
141 | msgctxt "#30038"
142 | msgid "Advanced Settings Detected"
143 | msgstr ""
144 |
145 | msgctxt "#30039"
146 | msgid "The advancedsettings file should be restored first"
147 | msgstr ""
148 |
149 | msgctxt "#30040"
150 | msgid "Select Yes to restore this file and restart Kodi"
151 | msgstr ""
152 |
153 | msgctxt "#30041"
154 | msgid "Select No to continue"
155 | msgstr ""
156 |
157 | msgctxt "#30042"
158 | msgid "Resume Restore"
159 | msgstr ""
160 |
161 | msgctxt "#30043"
162 | msgid "The Backup addon has detected an unfinished restore"
163 | msgstr ""
164 |
165 | msgctxt "#30044"
166 | msgid "Would you like to continue?"
167 | msgstr ""
168 |
169 | msgctxt "#30045"
170 | msgid "Error: Remote or zip file path doesn't exist"
171 | msgstr ""
172 |
173 | msgctxt "#30046"
174 | msgid "Starting"
175 | msgstr ""
176 |
177 | msgctxt "#30047"
178 | msgid "Local Dir"
179 | msgstr ""
180 |
181 | msgctxt "#30048"
182 | msgid "Remote Dir"
183 | msgstr ""
184 |
185 | msgctxt "#30049"
186 | msgid "Gathering file list"
187 | msgstr ""
188 |
189 | msgctxt "#30050"
190 | msgid "Remote Path exists - may have old files in it!"
191 | msgstr ""
192 |
193 | msgctxt "#30051"
194 | msgid "Creating Files List"
195 | msgstr ""
196 |
197 | msgctxt "#30052"
198 | msgid "Writing file"
199 | msgstr ""
200 |
201 | msgctxt "#30053"
202 | msgid "Starting scheduled backup"
203 | msgstr ""
204 |
205 | msgctxt "#30054"
206 | msgid "Removing backup"
207 | msgstr ""
208 |
209 | msgctxt "#30056"
210 | msgid "Scan or click this URL to authorize, click OK AFTER completion"
211 | msgstr ""
212 |
213 | msgctxt "#30057"
214 | msgid "Click OK AFTER completion"
215 | msgstr ""
216 |
217 | msgctxt "#30058"
218 | msgid "Developer Code Needed"
219 | msgstr ""
220 |
221 | msgctxt "#30059"
222 | msgid "Visit https://www.dropbox.com/developers"
223 | msgstr ""
224 |
225 | msgctxt "#30060"
226 | msgid "Enable Scheduler"
227 | msgstr ""
228 |
229 | msgctxt "#30061"
230 | msgid "Schedule"
231 | msgstr ""
232 |
233 | msgctxt "#30062"
234 | msgid "Hour of Day"
235 | msgstr ""
236 |
237 | msgctxt "#30063"
238 | msgid "Day of Week"
239 | msgstr ""
240 |
241 | msgctxt "#30064"
242 | msgid "Cron Schedule"
243 | msgstr ""
244 |
245 | msgctxt "#30065"
246 | msgid "Sunday"
247 | msgstr ""
248 |
249 | msgctxt "#30066"
250 | msgid "Monday"
251 | msgstr ""
252 |
253 | msgctxt "#30067"
254 | msgid "Tuesday"
255 | msgstr ""
256 |
257 | msgctxt "#30068"
258 | msgid "Wednesday"
259 | msgstr ""
260 |
261 | msgctxt "#30069"
262 | msgid "Thursday"
263 | msgstr ""
264 |
265 | msgctxt "#30070"
266 | msgid "Friday"
267 | msgstr ""
268 |
269 | msgctxt "#30071"
270 | msgid "Saturday"
271 | msgstr ""
272 |
273 | msgctxt "#30072"
274 | msgid "Every Day"
275 | msgstr ""
276 |
277 | msgctxt "#30073"
278 | msgid "Every Week"
279 | msgstr ""
280 |
281 | msgctxt "#30074"
282 | msgid "First Day of Month"
283 | msgstr ""
284 |
285 | msgctxt "#30075"
286 | msgid "Custom Schedule"
287 | msgstr ""
288 |
289 | msgctxt "#30076"
290 | msgid "Shutdown After Backup"
291 | msgstr ""
292 |
293 | msgctxt "#30077"
294 | msgid "Restart Kodi"
295 | msgstr ""
296 |
297 | msgctxt "#30078"
298 | msgid "You should restart Kodi to continue"
299 | msgstr ""
300 |
301 | msgctxt "#30079"
302 | msgid "Just Today"
303 | msgstr ""
304 |
305 | msgctxt "#30080"
306 | msgid "Profiles"
307 | msgstr ""
308 |
309 | msgctxt "#30081"
310 | msgid "Scheduler will run again on"
311 | msgstr ""
312 |
313 | msgctxt "#30082"
314 | msgid "Progress Bar"
315 | msgstr ""
316 |
317 | msgctxt "#30083"
318 | msgid "Background Progress Bar"
319 | msgstr ""
320 |
321 | msgctxt "#30084"
322 | msgid "None (Silent)"
323 | msgstr ""
324 |
325 | msgctxt "#30085"
326 | msgid "Version Warning"
327 | msgstr ""
328 |
329 | msgctxt "#30086"
330 | msgid "This version of Kodi is different than the one used to create the archive"
331 | msgstr ""
332 |
333 | msgctxt "#30087"
334 | msgid "Compress Archives"
335 | msgstr ""
336 |
337 | msgctxt "#30088"
338 | msgid "Copying Zip Archive"
339 | msgstr ""
340 |
341 | msgctxt "#30089"
342 | msgid "Write Error Detected"
343 | msgstr ""
344 |
345 | msgctxt "#30090"
346 | msgid "The destination may not be writeable"
347 | msgstr ""
348 |
349 | msgctxt "#30091"
350 | msgid "Zip archive could not be copied"
351 | msgstr ""
352 |
353 | msgctxt "#30092"
354 | msgid "Not all files were copied"
355 | msgstr ""
356 |
357 | msgctxt "#30093"
358 | msgid "Delete Authorization Info"
359 | msgstr ""
360 |
361 | msgctxt "#30094"
362 | msgid "This will delete any OAuth token files"
363 | msgstr ""
364 |
365 | msgctxt "#30095"
366 | msgid "Do you want to do this?"
367 | msgstr ""
368 |
369 | msgctxt "#30096"
370 | msgid "Old Zip Archive could not be deleted"
371 | msgstr ""
372 |
373 | msgctxt "#30097"
374 | msgid "This needs to happen before a backup can run"
375 | msgstr ""
376 |
377 | msgctxt "#30098"
378 | msgid "Google Drive"
379 | msgstr ""
380 |
381 | msgctxt "#30099"
382 | msgid "Open Settings"
383 | msgstr ""
384 |
385 | msgctxt "#30100"
386 | msgid "Extracting Archive"
387 | msgstr ""
388 |
389 | msgctxt "#30101"
390 | msgid "Error extracting the zip archive"
391 | msgstr ""
392 |
393 | msgctxt "#30102"
394 | msgid "Click OK to enter code"
395 | msgstr ""
396 |
397 | msgctxt "#30103"
398 | msgid "Validation Code"
399 | msgstr ""
400 |
401 | msgctxt "#30104"
402 | msgid "Authorize Now"
403 | msgstr ""
404 |
405 | msgctxt "#30105"
406 | msgid "Authorize this remote service in the settings first"
407 | msgstr ""
408 |
409 | msgctxt "#30106"
410 | msgid "is authorized"
411 | msgstr ""
412 |
413 | msgctxt "#30107"
414 | msgid "error authorizing"
415 | msgstr ""
416 |
417 | msgctxt "#30108"
418 | msgid "Visit https://console.developers.google.com/"
419 | msgstr ""
420 |
421 | msgctxt "#30109"
422 | msgid "Run on startup if missed"
423 | msgstr ""
424 |
425 | msgctxt "#30110"
426 | msgid "Set Name"
427 | msgstr ""
428 |
429 | msgctxt "#30111"
430 | msgid "Root folder selection"
431 | msgstr ""
432 |
433 | msgctxt "#30112"
434 | msgid "Browse Folder"
435 | msgstr ""
436 |
437 | msgctxt "#30113"
438 | msgid "Enter Own"
439 | msgstr ""
440 |
441 | msgctxt "#30114"
442 | msgid "starts in Kodi home"
443 | msgstr ""
444 |
445 | msgctxt "#30115"
446 | msgid "enter path to start there"
447 | msgstr ""
448 |
449 | msgctxt "#30116"
450 | msgid "Enter root path"
451 | msgstr ""
452 |
453 | msgctxt "#30117"
454 | msgid "Path Error"
455 | msgstr ""
456 |
457 | msgctxt "#30118"
458 | msgid "Path does not exist"
459 | msgstr ""
460 |
461 | msgctxt "#30119"
462 | msgid "Select root"
463 | msgstr ""
464 |
465 | msgctxt "#30120"
466 | msgid "Add Exclude Folder"
467 | msgstr ""
468 |
469 | msgctxt "#30121"
470 | msgid "Root Folder"
471 | msgstr ""
472 |
473 | msgctxt "#30122"
474 | msgid "Edit"
475 | msgstr ""
476 |
477 | msgctxt "#30123"
478 | msgid "Delete"
479 | msgstr ""
480 |
481 | msgctxt "#30124"
482 | msgid "Choose Action"
483 | msgstr ""
484 |
485 | msgctxt "#30125"
486 | msgid "Advanced Editor"
487 | msgstr ""
488 |
489 | msgctxt "#30126"
490 | msgid "Add Set"
491 | msgstr ""
492 |
493 | msgctxt "#30127"
494 | msgid "Delete Set"
495 | msgstr ""
496 |
497 | msgctxt "#30128"
498 | msgid "Are you sure you want to delete?"
499 | msgstr ""
500 |
501 | msgctxt "#30129"
502 | msgid "Exclude"
503 | msgstr ""
504 |
505 | msgctxt "#30130"
506 | msgid "The root folder cannot be changed"
507 | msgstr ""
508 |
509 | msgctxt "#30131"
510 | msgid "Choose Sets to Restore"
511 | msgstr ""
512 |
513 | msgctxt "#30132"
514 | msgid "Version 1.5.0 requires you to setup your file selections again - this is a breaking change"
515 | msgstr ""
516 |
517 | msgctxt "#30133"
518 | msgid "Game Saves"
519 | msgstr ""
520 |
521 | msgctxt "#30134"
522 | msgid "Include"
523 | msgstr ""
524 |
525 | msgctxt "#30135"
526 | msgid "Add Include Folder"
527 | msgstr ""
528 |
529 | msgctxt "#30136"
530 | msgid "Path must be within root folder"
531 | msgstr ""
532 |
533 | msgctxt "#30137"
534 | msgid "This path is part of a rule already"
535 | msgstr ""
536 |
537 | msgctxt "#30138"
538 | msgid "Set Name exists already"
539 | msgstr ""
540 |
541 | msgctxt "#30139"
542 | msgid "Copy Simple Config"
543 | msgstr ""
544 |
545 | msgctxt "#30140"
546 | msgid "This will copy the default Simple file selection to the Advanced Editor"
547 | msgstr ""
548 |
549 | msgctxt "#30141"
550 | msgid "This will erase any current Advanced Editor settings"
551 | msgstr ""
552 |
553 | msgctxt "#30142"
554 | msgid "Enable Verbose Logging"
555 | msgstr ""
556 |
557 | msgctxt "#30143"
558 | msgid "Exclude a specific folder from this backup set"
559 | msgstr ""
560 |
561 | msgctxt "#30144"
562 | msgid "Include a specific folder to this backup set"
563 | msgstr ""
564 |
565 | msgctxt "#30145"
566 | msgid "Type"
567 | msgstr ""
568 |
569 | msgctxt "#30146"
570 | msgid "Include Sub Folders"
571 | msgstr ""
572 |
573 | msgctxt "#30147"
574 | msgid "Toggle Sub Folders"
575 | msgstr ""
576 |
577 | msgctxt "#30148"
578 | msgid "Ask before restoring Kodi UI settings"
579 | msgstr ""
580 |
581 | msgctxt "#30149"
582 | msgid "Restore Kodi UI Settings"
583 | msgstr ""
584 |
585 | msgctxt "#30150"
586 | msgid "Restore saved Kodi system settings from backup?"
587 | msgstr ""
588 |
589 | msgctxt "#30151"
590 | msgid "Enable Verbose Logging"
591 | msgstr ""
592 |
593 | msgctxt "#30152"
594 | msgid "Set Zip File Location"
595 | msgstr ""
596 |
597 | msgctxt "#30153"
598 | msgid "Full path to where the zip file will be staged during backup or restore - must be local to this device"
599 | msgstr ""
600 |
601 | msgctxt "#30154"
602 | msgid "Always prompt if Kodi settings should be restored - no by default"
603 | msgstr ""
604 |
605 | msgctxt "#30155"
606 | msgid "Adds additional information to the log file"
607 | msgstr ""
608 |
609 | msgctxt "#30156"
610 | msgid "Must save key/secret first, then return to settings to authorize"
611 | msgstr ""
612 |
613 | msgctxt "#30157"
614 | msgid "Simple uses pre-defined folder locations, use Advanced Editor to define custom paths"
615 | msgstr ""
616 |
617 | msgctxt "#30158"
618 | msgid "Run backup on daily, weekly, monthly, or custom schedule"
619 | msgstr ""
620 |
621 | msgctxt "#30159"
622 | msgid "Backup started with unknown mode"
623 | msgstr ""
624 |
625 | msgctxt "#30160"
626 | msgid "Backup Filename Suffix"
627 | msgstr ""
628 |
629 | msgctxt "#30161"
630 | msgid "Amend a string to the end of each backup folder or ZIP file"
631 | msgstr ""
632 |
--------------------------------------------------------------------------------
/resources/language/resource.language.zh_tw/strings.po:
--------------------------------------------------------------------------------
1 | # Kodi Media Center language file
2 | # Addon Name: Backup
3 | # Addon id: script.xbmcbackup
4 | # Addon Provider: robweber
5 | # Translators:
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: XBMC Addons\n"
9 | "Report-Msgid-Bugs-To: alanwww1@xbmc.org\n"
10 | "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
11 | "PO-Revision-Date: 2022-02-23 12:13+0000\n"
12 | "Last-Translator: Christian Gade \n"
13 | "Language-Team: Chinese (Taiwan) \n"
14 | "Language: zh_tw\n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 | "Plural-Forms: nplurals=1; plural=0;\n"
19 | "X-Generator: Weblate 4.10.1\n"
20 |
21 | msgctxt "Addon Summary"
22 | msgid "Backup and restore your Kodi database and configuration files in the event of a crash or file corruption."
23 | msgstr ""
24 |
25 | msgctxt "Addon Description"
26 | msgid "Ever hosed your Kodi configuration and wished you'd had a backup? Now you can with one easy click. You can export your database, playlist, thumbnails, addons and other configuration details to any source writeable by Kodi or directly to Dropbox cloud storage. Backups can be run on demand or via a scheduler. "
27 | msgstr ""
28 |
29 | msgctxt "#30010"
30 | msgid "Backup"
31 | msgstr ""
32 |
33 | msgctxt "#30011"
34 | msgid "General"
35 | msgstr "一般設定"
36 |
37 | msgctxt "#30012"
38 | msgid "File Selection"
39 | msgstr ""
40 |
41 | msgctxt "#30013"
42 | msgid "Scheduling"
43 | msgstr ""
44 |
45 | msgctxt "#30014"
46 | msgid "Simple"
47 | msgstr ""
48 |
49 | msgctxt "#30015"
50 | msgid "Advanced"
51 | msgstr ""
52 |
53 | msgctxt "#30016"
54 | msgid "Backup"
55 | msgstr ""
56 |
57 | msgctxt "#30017"
58 | msgid "Restore"
59 | msgstr ""
60 |
61 | msgctxt "#30018"
62 | msgid "Browse Path"
63 | msgstr ""
64 |
65 | msgctxt "#30019"
66 | msgid "Type Path"
67 | msgstr ""
68 |
69 | msgctxt "#30020"
70 | msgid "Browse Remote Path"
71 | msgstr ""
72 |
73 | msgctxt "#30021"
74 | msgid "Backup Folder Name"
75 | msgstr ""
76 |
77 | msgctxt "#30022"
78 | msgid "Progress Display"
79 | msgstr ""
80 |
81 | msgctxt "#30023"
82 | msgid "Mode"
83 | msgstr "模式"
84 |
85 | msgctxt "#30024"
86 | msgid "Type Remote Path"
87 | msgstr ""
88 |
89 | msgctxt "#30025"
90 | msgid "Remote Path Type"
91 | msgstr ""
92 |
93 | msgctxt "#30026"
94 | msgid "Backups to keep (0 for all)"
95 | msgstr ""
96 |
97 | msgctxt "#30027"
98 | msgid "Dropbox"
99 | msgstr ""
100 |
101 | msgctxt "#30028"
102 | msgid "Dropbox Key"
103 | msgstr ""
104 |
105 | msgctxt "#30029"
106 | msgid "Dropbox Secret"
107 | msgstr ""
108 |
109 | msgctxt "#30030"
110 | msgid "User Addons"
111 | msgstr ""
112 |
113 | msgctxt "#30031"
114 | msgid "Addon Data"
115 | msgstr ""
116 |
117 | msgctxt "#30032"
118 | msgid "Database"
119 | msgstr "資料庫"
120 |
121 | msgctxt "#30033"
122 | msgid "Playlist"
123 | msgstr "播放列表"
124 |
125 | msgctxt "#30034"
126 | msgid "Thumbnails/Fanart"
127 | msgstr ""
128 |
129 | msgctxt "#30035"
130 | msgid "Config Files"
131 | msgstr ""
132 |
133 | msgctxt "#30036"
134 | msgid "Disclaimer"
135 | msgstr ""
136 |
137 | msgctxt "#30037"
138 | msgid "Canceling this menu will close and save changes"
139 | msgstr ""
140 |
141 | msgctxt "#30038"
142 | msgid "Advanced Settings Detected"
143 | msgstr ""
144 |
145 | msgctxt "#30039"
146 | msgid "The advancedsettings file should be restored first"
147 | msgstr ""
148 |
149 | msgctxt "#30040"
150 | msgid "Select Yes to restore this file and restart Kodi"
151 | msgstr ""
152 |
153 | msgctxt "#30041"
154 | msgid "Select No to continue"
155 | msgstr ""
156 |
157 | msgctxt "#30042"
158 | msgid "Resume Restore"
159 | msgstr ""
160 |
161 | msgctxt "#30043"
162 | msgid "The Backup addon has detected an unfinished restore"
163 | msgstr ""
164 |
165 | msgctxt "#30044"
166 | msgid "Would you like to continue?"
167 | msgstr ""
168 |
169 | msgctxt "#30045"
170 | msgid "Error: Remote or zip file path doesn't exist"
171 | msgstr ""
172 |
173 | msgctxt "#30046"
174 | msgid "Starting"
175 | msgstr ""
176 |
177 | msgctxt "#30047"
178 | msgid "Local Dir"
179 | msgstr ""
180 |
181 | msgctxt "#30048"
182 | msgid "Remote Dir"
183 | msgstr ""
184 |
185 | msgctxt "#30049"
186 | msgid "Gathering file list"
187 | msgstr ""
188 |
189 | msgctxt "#30050"
190 | msgid "Remote Path exists - may have old files in it!"
191 | msgstr ""
192 |
193 | msgctxt "#30051"
194 | msgid "Creating Files List"
195 | msgstr ""
196 |
197 | msgctxt "#30052"
198 | msgid "Writing file"
199 | msgstr ""
200 |
201 | msgctxt "#30053"
202 | msgid "Starting scheduled backup"
203 | msgstr ""
204 |
205 | msgctxt "#30054"
206 | msgid "Removing backup"
207 | msgstr ""
208 |
209 | msgctxt "#30056"
210 | msgid "Scan or click this URL to authorize, click OK AFTER completion"
211 | msgstr ""
212 |
213 | msgctxt "#30057"
214 | msgid "Click OK AFTER completion"
215 | msgstr ""
216 |
217 | msgctxt "#30058"
218 | msgid "Developer Code Needed"
219 | msgstr ""
220 |
221 | msgctxt "#30059"
222 | msgid "Visit https://www.dropbox.com/developers"
223 | msgstr ""
224 |
225 | msgctxt "#30060"
226 | msgid "Enable Scheduler"
227 | msgstr ""
228 |
229 | msgctxt "#30061"
230 | msgid "Schedule"
231 | msgstr "時間表"
232 |
233 | msgctxt "#30062"
234 | msgid "Hour of Day"
235 | msgstr ""
236 |
237 | msgctxt "#30063"
238 | msgid "Day of Week"
239 | msgstr ""
240 |
241 | msgctxt "#30064"
242 | msgid "Cron Schedule"
243 | msgstr ""
244 |
245 | msgctxt "#30065"
246 | msgid "Sunday"
247 | msgstr "星期日"
248 |
249 | msgctxt "#30066"
250 | msgid "Monday"
251 | msgstr "星期一"
252 |
253 | msgctxt "#30067"
254 | msgid "Tuesday"
255 | msgstr "星期二"
256 |
257 | msgctxt "#30068"
258 | msgid "Wednesday"
259 | msgstr "星期三"
260 |
261 | msgctxt "#30069"
262 | msgid "Thursday"
263 | msgstr "星期四"
264 |
265 | msgctxt "#30070"
266 | msgid "Friday"
267 | msgstr "星期五"
268 |
269 | msgctxt "#30071"
270 | msgid "Saturday"
271 | msgstr "星期六"
272 |
273 | msgctxt "#30072"
274 | msgid "Every Day"
275 | msgstr ""
276 |
277 | msgctxt "#30073"
278 | msgid "Every Week"
279 | msgstr ""
280 |
281 | msgctxt "#30074"
282 | msgid "First Day of Month"
283 | msgstr ""
284 |
285 | msgctxt "#30075"
286 | msgid "Custom Schedule"
287 | msgstr ""
288 |
289 | msgctxt "#30076"
290 | msgid "Shutdown After Backup"
291 | msgstr ""
292 |
293 | msgctxt "#30077"
294 | msgid "Restart Kodi"
295 | msgstr ""
296 |
297 | msgctxt "#30078"
298 | msgid "You should restart Kodi to continue"
299 | msgstr ""
300 |
301 | msgctxt "#30079"
302 | msgid "Just Today"
303 | msgstr ""
304 |
305 | msgctxt "#30080"
306 | msgid "Profiles"
307 | msgstr "設定檔"
308 |
309 | msgctxt "#30081"
310 | msgid "Scheduler will run again on"
311 | msgstr ""
312 |
313 | msgctxt "#30082"
314 | msgid "Progress Bar"
315 | msgstr ""
316 |
317 | msgctxt "#30083"
318 | msgid "Background Progress Bar"
319 | msgstr ""
320 |
321 | msgctxt "#30084"
322 | msgid "None (Silent)"
323 | msgstr ""
324 |
325 | msgctxt "#30085"
326 | msgid "Version Warning"
327 | msgstr ""
328 |
329 | msgctxt "#30086"
330 | msgid "This version of Kodi is different than the one used to create the archive"
331 | msgstr ""
332 |
333 | msgctxt "#30087"
334 | msgid "Compress Archives"
335 | msgstr ""
336 |
337 | msgctxt "#30088"
338 | msgid "Copying Zip Archive"
339 | msgstr ""
340 |
341 | msgctxt "#30089"
342 | msgid "Write Error Detected"
343 | msgstr ""
344 |
345 | msgctxt "#30090"
346 | msgid "The destination may not be writeable"
347 | msgstr ""
348 |
349 | msgctxt "#30091"
350 | msgid "Zip archive could not be copied"
351 | msgstr ""
352 |
353 | msgctxt "#30092"
354 | msgid "Not all files were copied"
355 | msgstr ""
356 |
357 | msgctxt "#30093"
358 | msgid "Delete Authorization Info"
359 | msgstr ""
360 |
361 | msgctxt "#30094"
362 | msgid "This will delete any OAuth token files"
363 | msgstr ""
364 |
365 | msgctxt "#30095"
366 | msgid "Do you want to do this?"
367 | msgstr ""
368 |
369 | msgctxt "#30096"
370 | msgid "Old Zip Archive could not be deleted"
371 | msgstr ""
372 |
373 | msgctxt "#30097"
374 | msgid "This needs to happen before a backup can run"
375 | msgstr ""
376 |
377 | msgctxt "#30098"
378 | msgid "Google Drive"
379 | msgstr ""
380 |
381 | msgctxt "#30099"
382 | msgid "Open Settings"
383 | msgstr ""
384 |
385 | msgctxt "#30100"
386 | msgid "Extracting Archive"
387 | msgstr ""
388 |
389 | msgctxt "#30101"
390 | msgid "Error extracting the zip archive"
391 | msgstr ""
392 |
393 | msgctxt "#30102"
394 | msgid "Click OK to enter code"
395 | msgstr ""
396 |
397 | msgctxt "#30103"
398 | msgid "Validation Code"
399 | msgstr ""
400 |
401 | msgctxt "#30104"
402 | msgid "Authorize Now"
403 | msgstr ""
404 |
405 | msgctxt "#30105"
406 | msgid "Authorize this remote service in the settings first"
407 | msgstr ""
408 |
409 | msgctxt "#30106"
410 | msgid "is authorized"
411 | msgstr ""
412 |
413 | msgctxt "#30107"
414 | msgid "error authorizing"
415 | msgstr ""
416 |
417 | msgctxt "#30108"
418 | msgid "Visit https://console.developers.google.com/"
419 | msgstr ""
420 |
421 | msgctxt "#30109"
422 | msgid "Run on startup if missed"
423 | msgstr ""
424 |
425 | msgctxt "#30110"
426 | msgid "Set Name"
427 | msgstr ""
428 |
429 | msgctxt "#30111"
430 | msgid "Root folder selection"
431 | msgstr ""
432 |
433 | msgctxt "#30112"
434 | msgid "Browse Folder"
435 | msgstr ""
436 |
437 | msgctxt "#30113"
438 | msgid "Enter Own"
439 | msgstr ""
440 |
441 | msgctxt "#30114"
442 | msgid "starts in Kodi home"
443 | msgstr ""
444 |
445 | msgctxt "#30115"
446 | msgid "enter path to start there"
447 | msgstr ""
448 |
449 | msgctxt "#30116"
450 | msgid "Enter root path"
451 | msgstr ""
452 |
453 | msgctxt "#30117"
454 | msgid "Path Error"
455 | msgstr ""
456 |
457 | msgctxt "#30118"
458 | msgid "Path does not exist"
459 | msgstr ""
460 |
461 | msgctxt "#30119"
462 | msgid "Select root"
463 | msgstr ""
464 |
465 | msgctxt "#30120"
466 | msgid "Add Exclude Folder"
467 | msgstr ""
468 |
469 | msgctxt "#30121"
470 | msgid "Root Folder"
471 | msgstr ""
472 |
473 | msgctxt "#30122"
474 | msgid "Edit"
475 | msgstr ""
476 |
477 | msgctxt "#30123"
478 | msgid "Delete"
479 | msgstr "刪除"
480 |
481 | msgctxt "#30124"
482 | msgid "Choose Action"
483 | msgstr ""
484 |
485 | msgctxt "#30125"
486 | msgid "Advanced Editor"
487 | msgstr ""
488 |
489 | msgctxt "#30126"
490 | msgid "Add Set"
491 | msgstr ""
492 |
493 | msgctxt "#30127"
494 | msgid "Delete Set"
495 | msgstr ""
496 |
497 | msgctxt "#30128"
498 | msgid "Are you sure you want to delete?"
499 | msgstr ""
500 |
501 | msgctxt "#30129"
502 | msgid "Exclude"
503 | msgstr ""
504 |
505 | msgctxt "#30130"
506 | msgid "The root folder cannot be changed"
507 | msgstr ""
508 |
509 | msgctxt "#30131"
510 | msgid "Choose Sets to Restore"
511 | msgstr ""
512 |
513 | msgctxt "#30132"
514 | msgid "Version 1.5.0 requires you to setup your file selections again - this is a breaking change"
515 | msgstr ""
516 |
517 | msgctxt "#30133"
518 | msgid "Game Saves"
519 | msgstr ""
520 |
521 | msgctxt "#30134"
522 | msgid "Include"
523 | msgstr ""
524 |
525 | msgctxt "#30135"
526 | msgid "Add Include Folder"
527 | msgstr ""
528 |
529 | msgctxt "#30136"
530 | msgid "Path must be within root folder"
531 | msgstr ""
532 |
533 | msgctxt "#30137"
534 | msgid "This path is part of a rule already"
535 | msgstr ""
536 |
537 | msgctxt "#30138"
538 | msgid "Set Name exists already"
539 | msgstr ""
540 |
541 | msgctxt "#30139"
542 | msgid "Copy Simple Config"
543 | msgstr ""
544 |
545 | msgctxt "#30140"
546 | msgid "This will copy the default Simple file selection to the Advanced Editor"
547 | msgstr ""
548 |
549 | msgctxt "#30141"
550 | msgid "This will erase any current Advanced Editor settings"
551 | msgstr ""
552 |
553 | msgctxt "#30142"
554 | msgid "Enable Verbose Logging"
555 | msgstr ""
556 |
557 | msgctxt "#30143"
558 | msgid "Exclude a specific folder from this backup set"
559 | msgstr ""
560 |
561 | msgctxt "#30144"
562 | msgid "Include a specific folder to this backup set"
563 | msgstr ""
564 |
565 | msgctxt "#30145"
566 | msgid "Type"
567 | msgstr ""
568 |
569 | msgctxt "#30146"
570 | msgid "Include Sub Folders"
571 | msgstr ""
572 |
573 | msgctxt "#30147"
574 | msgid "Toggle Sub Folders"
575 | msgstr ""
576 |
577 | msgctxt "#30148"
578 | msgid "Ask before restoring Kodi UI settings"
579 | msgstr ""
580 |
581 | msgctxt "#30149"
582 | msgid "Restore Kodi UI Settings"
583 | msgstr ""
584 |
585 | msgctxt "#30150"
586 | msgid "Restore saved Kodi system settings from backup?"
587 | msgstr ""
588 |
589 | msgctxt "#30151"
590 | msgid "Enable Verbose Logging"
591 | msgstr ""
592 |
593 | msgctxt "#30152"
594 | msgid "Set Zip File Location"
595 | msgstr ""
596 |
597 | msgctxt "#30153"
598 | msgid "Full path to where the zip file will be staged during backup or restore - must be local to this device"
599 | msgstr ""
600 |
601 | msgctxt "#30154"
602 | msgid "Always prompt if Kodi settings should be restored - no by default"
603 | msgstr ""
604 |
605 | msgctxt "#30155"
606 | msgid "Adds additional information to the log file"
607 | msgstr ""
608 |
609 | msgctxt "#30156"
610 | msgid "Must save key/secret first, then return to settings to authorize"
611 | msgstr ""
612 |
613 | msgctxt "#30157"
614 | msgid "Simple uses pre-defined folder locations, use Advanced Editor to define custom paths"
615 | msgstr ""
616 |
617 | msgctxt "#30158"
618 | msgid "Run backup on daily, weekly, monthly, or custom schedule"
619 | msgstr ""
620 |
621 | msgctxt "#30159"
622 | msgid "Backup started with unknown mode"
623 | msgstr ""
624 |
625 | msgctxt "#30160"
626 | msgid "Backup Filename Suffix"
627 | msgstr ""
628 |
629 | msgctxt "#30161"
630 | msgid "Amend a string to the end of each backup folder or ZIP file"
631 | msgstr ""
632 |
--------------------------------------------------------------------------------