├── .eslintrc.js ├── .gitattributes ├── .github └── workflows │ └── behat-sqlite.yml ├── .gitignore ├── .l10nignore ├── .php_cs.dist ├── .tx └── config ├── CHANGELOG.md ├── COPYING ├── Makefile ├── README.md ├── appinfo ├── info.xml └── routes.php ├── babel.config.js ├── bin └── generate_docs.php ├── composer.json ├── composer.lock ├── css ├── codemirror.css ├── global.css └── icons.css ├── custom.d.ts ├── docs ├── Admin.md ├── Contribute_API.md ├── Functions.md ├── Integration.md └── README.md ├── examples ├── business_card.lua ├── directory_tree.lua ├── generate_invoice.lua ├── invoice.mustache └── merge_pdfs.lua ├── img ├── files_scripts-dark.svg └── files_scripts.svg ├── l10n ├── .gitkeep ├── af.js ├── af.json ├── an.js ├── an.json ├── ar.js ├── ar.json ├── ast.js ├── ast.json ├── az.js ├── az.json ├── bg.js ├── bg.json ├── bn_BD.js ├── bn_BD.json ├── br.js ├── br.json ├── bs.js ├── bs.json ├── ca.js ├── ca.json ├── cs.js ├── cs.json ├── cy_GB.js ├── cy_GB.json ├── da.js ├── da.json ├── de.js ├── de.json ├── de_DE.js ├── de_DE.json ├── el.js ├── el.json ├── en_GB.js ├── en_GB.json ├── eo.js ├── eo.json ├── es.js ├── es.json ├── es_419.js ├── es_419.json ├── es_AR.js ├── es_AR.json ├── es_CL.js ├── es_CL.json ├── es_CO.js ├── es_CO.json ├── es_CR.js ├── es_CR.json ├── es_DO.js ├── es_DO.json ├── es_EC.js ├── es_EC.json ├── es_GT.js ├── es_GT.json ├── es_HN.js ├── es_HN.json ├── es_MX.js ├── es_MX.json ├── es_NI.js ├── es_NI.json ├── es_PA.js ├── es_PA.json ├── es_PE.js ├── es_PE.json ├── es_PR.js ├── es_PR.json ├── es_PY.js ├── es_PY.json ├── es_SV.js ├── es_SV.json ├── es_UY.js ├── es_UY.json ├── et_EE.js ├── et_EE.json ├── eu.js ├── eu.json ├── fa.js ├── fa.json ├── fi.js ├── fi.json ├── fr.js ├── fr.json ├── ga.js ├── ga.json ├── gd.js ├── gd.json ├── gl.js ├── gl.json ├── he.js ├── he.json ├── hr.js ├── hr.json ├── hu.js ├── hu.json ├── hy.js ├── hy.json ├── ia.js ├── ia.json ├── id.js ├── id.json ├── is.js ├── is.json ├── it.js ├── it.json ├── ja.js ├── ja.json ├── ka.js ├── ka.json ├── ka_GE.js ├── ka_GE.json ├── kab.js ├── kab.json ├── km.js ├── km.json ├── kn.js ├── kn.json ├── ko.js ├── ko.json ├── lb.js ├── lb.json ├── lo.js ├── lo.json ├── lt_LT.js ├── lt_LT.json ├── lv.js ├── lv.json ├── mk.js ├── mk.json ├── mn.js ├── mn.json ├── ms_MY.js ├── ms_MY.json ├── nb.js ├── nb.json ├── nl.js ├── nl.json ├── nn_NO.js ├── nn_NO.json ├── oc.js ├── oc.json ├── pl.js ├── pl.json ├── pt_BR.js ├── pt_BR.json ├── pt_PT.js ├── pt_PT.json ├── ro.js ├── ro.json ├── ru.js ├── ru.json ├── sc.js ├── sc.json ├── si.js ├── si.json ├── sk.js ├── sk.json ├── sl.js ├── sl.json ├── sq.js ├── sq.json ├── sr.js ├── sr.json ├── sr@latin.js ├── sr@latin.json ├── sv.js ├── sv.json ├── ta.js ├── ta.json ├── th.js ├── th.json ├── tk.js ├── tk.json ├── tr.js ├── tr.json ├── ug.js ├── ug.json ├── uk.js ├── uk.json ├── ur_PK.js ├── ur_PK.json ├── uz.js ├── uz.json ├── vi.js ├── vi.json ├── zh_CN.js ├── zh_CN.json ├── zh_HK.js ├── zh_HK.json ├── zh_TW.js └── zh_TW.json ├── lib ├── AppInfo │ └── Application.php ├── Command │ ├── ExportScripts.php │ ├── ImportScripts.php │ ├── ListScripts.php │ └── RunScript.php ├── Controller │ ├── ScriptController.php │ ├── ScriptInputController.php │ └── SettingsController.php ├── Db │ ├── BaseMapper.php │ ├── Script.php │ ├── ScriptInput.php │ ├── ScriptInputMapper.php │ └── ScriptMapper.php ├── Event │ └── RegisterScriptFunctionsEvent.php ├── Flow │ └── Operation.php ├── Interpreter │ ├── AbortException.php │ ├── Context.php │ ├── ContextFactory.php │ ├── FunctionProvider.php │ ├── Functions │ │ ├── Files │ │ │ ├── Directory_Listing.php │ │ │ ├── Exists.php │ │ │ ├── Exists_Unsafe.php │ │ │ ├── File_Content.php │ │ │ ├── File_Copy.php │ │ │ ├── File_Copy_Unsafe.php │ │ │ ├── File_Delete.php │ │ │ ├── File_Delete_Unsafe.php │ │ │ ├── File_Move.php │ │ │ ├── File_Move_Unsafe.php │ │ │ ├── File_Unlock.php │ │ │ ├── Full_Path.php │ │ │ ├── Get_Parent.php │ │ │ ├── Home.php │ │ │ ├── Is_File.php │ │ │ ├── Is_Folder.php │ │ │ ├── Meta_Data.php │ │ │ ├── New_File.php │ │ │ ├── New_Folder.php │ │ │ ├── NodeSerializerTrait.php │ │ │ └── UnsafeViewOperationTrait.php │ │ ├── Input │ │ │ ├── Get_Input.php │ │ │ └── Get_Input_Files.php │ │ ├── Media │ │ │ ├── Ffmpeg.php │ │ │ └── Ffprobe.php │ │ ├── Nextcloud │ │ │ ├── CommentSerializerTrait.php │ │ │ ├── Comment_Create.php │ │ │ ├── Comment_Delete.php │ │ │ ├── Comments_Find.php │ │ │ ├── EventSerializerTrait.php │ │ │ ├── Get_Activity.php │ │ │ ├── Get_File_Tags.php │ │ │ ├── Notify.php │ │ │ ├── ShareSerializerTrait.php │ │ │ ├── Share_Delete.php │ │ │ ├── Share_File.php │ │ │ ├── Shares_Find.php │ │ │ ├── Tag_Create.php │ │ │ ├── Tag_File.php │ │ │ ├── Tag_File_Unassign.php │ │ │ ├── TagsSerializerTrait.php │ │ │ ├── Tags_Find.php │ │ │ ├── UserSerializerTrait.php │ │ │ └── Users_Find.php │ │ ├── Output │ │ │ ├── Abort.php │ │ │ ├── Add_Message.php │ │ │ ├── Clear_Messages.php │ │ │ ├── Log.php │ │ │ └── View_Files.php │ │ ├── Pdf │ │ │ ├── CheckDependency.php │ │ │ ├── Pdf_Decrypt.php │ │ │ ├── Pdf_Merge.php │ │ │ ├── Pdf_Overlay.php │ │ │ ├── Pdf_Page_Count.php │ │ │ └── Pdf_Pages.php │ │ ├── Template │ │ │ ├── Html_To_Pdf.php │ │ │ └── Mustache.php │ │ └── Util │ │ │ ├── Create_Date_Time.php │ │ │ ├── Csv_To_Table.php │ │ │ ├── For_Each.php │ │ │ ├── Format_Date_Time.php │ │ │ ├── Format_Price.php │ │ │ ├── Http_Request.php │ │ │ ├── Json.php │ │ │ ├── Shell_Command.php │ │ │ ├── Sort.php │ │ │ ├── Wait.php │ │ │ └── _Include.php │ ├── IFunctionProvider.php │ ├── Interpreter.php │ ├── Lua │ │ ├── LuaInterpreter.php │ │ ├── LuaProvider.php │ │ ├── LuaWrapper.php │ │ └── LuarInterpreter.php │ └── RegistrableFunction.php ├── Listener │ ├── LoadAdditionalListener.php │ ├── RegisterFlowOperationsListener.php │ ├── RegisterScriptFunctionListener.php │ └── ShareLinkAccessedListener.php ├── Middleware │ ├── DefaultScriptsMiddleware.php │ └── examples.json ├── Migration │ ├── Version0100Date20220613.php │ ├── Version0100Date20220616.php │ ├── Version020100Date20221126.php │ ├── Version020102Date20230309.php │ ├── Version030000Date20230322.php │ ├── Version030000Date20230323.php │ ├── Version030000Date20230324.php │ ├── Version030100Date20231215.php │ ├── Version031000Date20231211.php │ └── Version040000Date20231217.php ├── Service │ ├── Notifier.php │ ├── PermissionService.php │ ├── ScriptService.php │ └── ScriptValidationException.php └── Settings │ ├── AdminSection.php │ └── AdminSettings.php ├── package-lock.json ├── package.json ├── screenshots ├── 1.png ├── 2.png ├── 3.png ├── 4.png └── docs │ ├── mime-type.png │ └── save.png ├── src ├── api │ └── script.ts ├── components │ ├── ScriptCard.vue │ ├── ScriptEdit.vue │ ├── ScriptEdit │ │ ├── EditInputDetails.vue │ │ └── EditInputs.vue │ ├── ScriptSelect │ │ └── ScriptInputComponent.vue │ └── generic │ │ ├── FreeSelect.vue │ │ └── MultiInput.vue ├── files.ts ├── l10n.ts ├── main.ts ├── store │ └── scripts.ts ├── types │ ├── Messages.ts │ ├── files.ts │ └── script.ts ├── views │ ├── Flow.vue │ ├── ScriptSelect.vue │ └── Settings.vue ├── vue.shims.d.ts └── workflow.ts ├── stylelint.config.js ├── templates └── settings-admin.php ├── tests ├── bootstrap.php ├── integration │ ├── config │ │ └── behat.yml │ └── features │ │ ├── bootstrap │ │ └── FeatureContext.php │ │ ├── fixtures │ │ ├── test_abort.lua │ │ ├── test_abort_out.json │ │ ├── test_abort_with_messages.lua │ │ ├── test_abort_with_messages_out.json │ │ ├── test_base.lua │ │ ├── test_files.lua │ │ ├── test_messages.lua │ │ ├── test_messages_out.json │ │ ├── test_nextcloud.lua │ │ └── test_util.lua │ │ └── scripts.feature ├── phpunit.xml └── unit │ ├── Interpreter │ ├── AbortTest.php │ ├── TemplateTest.php │ └── UtilTest.php │ ├── Lua │ ├── InputTest.php │ ├── LuaTestCase.php │ ├── TemplateTest.php │ └── UtilTest.php │ ├── NullLogger.php │ ├── TestFunctionProvider.php │ └── TestTempManager.php ├── tsconfig.json └── webpack.config.ts /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: [ 3 | '@nextcloud', 4 | "eslint:recommended", 5 | ], 6 | parser: "vue-eslint-parser", 7 | parserOptions: { 8 | "parser": "@typescript-eslint/parser", 9 | ecmaVersion: 2020, 10 | }, 11 | rules: { 12 | "no-prototype-builtins": "off", 13 | "vue/require-default-prop": "off", 14 | 15 | // Find a way to support ts imports without extension 16 | "node/no-missing-require": "off", 17 | "import/extensions": "off", 18 | "node/no-missing-import": "off", 19 | "import/no-unresolved": "off", 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | l10n/* linguist-generated 2 | docs/* linguist-documentation 3 | *.js linguist-vendored 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | *.iml 3 | /vendor/ 4 | /build/ 5 | node_modules/ 6 | /.php_cs.cache 7 | /.php-cs* 8 | *.phpunit.result.cache 9 | *clover.xml 10 | tests/.phpunit.result.cache 11 | /js/ 12 | 13 | ## VSCode 14 | .vscode 15 | *.code-workspace 16 | -------------------------------------------------------------------------------- /.l10nignore: -------------------------------------------------------------------------------- 1 | js 2 | node_modules 3 | vendor 4 | examples 5 | docs 6 | css 7 | img 8 | screenshots 9 | templates 10 | build 11 | bin 12 | appinfo 13 | tests 14 | -------------------------------------------------------------------------------- /.php_cs.dist: -------------------------------------------------------------------------------- 1 | getFinder() 12 | ->notPath('build') 13 | ->notPath('l10n') 14 | ->notPath('src') 15 | ->notPath('vendor') 16 | ->in(__DIR__); 17 | return $config; 18 | -------------------------------------------------------------------------------- /.tx/config: -------------------------------------------------------------------------------- 1 | [main] 2 | host = https://www.transifex.com 3 | lang_map = ja_JP: ja, bg_BG: bg, cs_CZ: cs, fi_FI: fi, hu_HU: hu, nb_NO: nb, sk_SK: sk, th_TH: th 4 | 5 | [o:nextcloud:p:nextcloud:r:files_scripts] 6 | file_filter = translationfiles//files_scripts.po 7 | source_file = translationfiles/templates/files_scripts.pot 8 | source_lang = en 9 | type = PO 10 | 11 | -------------------------------------------------------------------------------- /appinfo/routes.php: -------------------------------------------------------------------------------- 1 | [ 7 | 'script' => ['url' => '/scripts'], 8 | 'script_input' => ['url' => '/script_inputs'], 9 | 'settings' => ['url' => '/settings'] 10 | ], 11 | 'routes' => [ 12 | ['name' => 'script#run', 'url' => '/run/{id}', 'verb' => 'POST'], 13 | ['name' => 'script#adminIndex', 'url' => '/scripts/all', 'verb' => 'GET'], 14 | ['name' => 'script_input#getByScriptId', 'url' => '/script_inputs/{scriptId}', 'verb' => 'GET'], 15 | ['name' => 'script_input#createAll', 'url' => '/script_inputs/{scriptId}', 'verb' => 'POST'], 16 | ['name' => 'settings#modify', 'url' => '/settings', 'verb' => 'POST'], 17 | ] 18 | ]; 19 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | const babelConfig = require('@nextcloud/babel-config') 2 | 3 | module.exports = babelConfig 4 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "raudius/files_scripts", 3 | "type": "project", 4 | "license": "AGPL", 5 | "authors": [ 6 | { 7 | "name": "Raul Ferreira Fuentes", 8 | "email": "r.ferreira.fuentes@gmail.com" 9 | } 10 | ], 11 | "require": { 12 | "php": "^7.4", 13 | "ext-json": "*", 14 | "ext-lua": "*", 15 | "ext-curl": "*", 16 | "ext-intl": "*", 17 | "mustache/mustache": "^2.14", 18 | "php-ffmpeg/php-ffmpeg": "0.19.0", 19 | "mikehaertl/php-shellcommand": "^1", 20 | "raudius/phpdf": "^1.0.3", 21 | "raudius/luar": "0.1.4" 22 | }, 23 | "require-dev": { 24 | "phpunit/phpunit": "^9.3.11", 25 | "behat/behat": "^3.8", 26 | "guzzlehttp/guzzle": "^7.2", 27 | "nextcloud/coding-standard": "^1.0.0", 28 | "composer/class-map-generator": "^1.0", 29 | "friendsofphp/php-cs-fixer": "^3.11" 30 | }, 31 | "config": { 32 | "optimize-autoloader": true, 33 | "classmap-authoritative": true, 34 | "platform": { 35 | "php": "8.0" 36 | } 37 | }, 38 | "scripts": { 39 | "lint": "find . -name \\*.php -not -path './vendor/*' -not -path './build/*' -print0 | xargs -0 -n1 php -l", 40 | "cs:check": "php-cs-fixer fix --dry-run --diff", 41 | "cs:fix": "php-cs-fixer fix", 42 | "test:unit": "phpunit -c tests/phpunit.xml" 43 | }, 44 | "autoload-dev": { 45 | "classmap": [ 46 | "lib/", "tests/unit" 47 | ] 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /css/codemirror.css: -------------------------------------------------------------------------------- 1 | .CodeMirror { 2 | height: 100%; 3 | } 4 | -------------------------------------------------------------------------------- /css/global.css: -------------------------------------------------------------------------------- 1 | @import url('icons.css'); 2 | -------------------------------------------------------------------------------- /css/icons.css: -------------------------------------------------------------------------------- 1 | .icon-files_scripts { 2 | background-image: url(../img/files_scripts-dark.svg); 3 | filter: var(--background-invert-if-dark); 4 | } 5 | 6 | body.dark .icon-files_scripts { 7 | background-image: url(../img/files_scripts.svg); 8 | } 9 | -------------------------------------------------------------------------------- /custom.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.svg' { 2 | const content: string; 3 | export default content; 4 | } 5 | -------------------------------------------------------------------------------- /docs/Integration.md: -------------------------------------------------------------------------------- 1 | # Integration with other Nextcloud apps 2 | 3 | Other Nextcloud applications can register scripting API functions via the `RegisterScriptFunctionsEvent`. 4 | 5 | 6 | ```php 7 | use OCA\FilesScripts\Interpreter\IFunctionProvider; 8 | 9 | class RegisterScriptFunctionListener implements IEventListener { 10 | private FunctionProvider $functionProvider; 11 | 12 | public function __construct(FunctionProvider $functionProvider) { 13 | $this->functionProvider = $functionProvider; 14 | } 15 | 16 | public function handle(Event $event): void { 17 | if (!($event instanceof RegisterScriptFunctionsEvent)) { 18 | return; 19 | } 20 | 21 | $event->registerFunctions($this->functionProvider); 22 | } 23 | } 24 | ``` 25 | 26 | As part of the event, you should register some functions directly to the event. The functions are defined with a `RegistrableFunction` class and provided with a `IFunctionProvider` implementation. You can learn more about how to write registrable functions [here](Contribute_API.md). 27 | 28 | Don't forget to register the listener! This is usually done as part of the `Application::register()` method. 29 | ```php 30 | use OCA\FilesScripts\Event\RegisterScriptFunctionsEvent; 31 | 32 | // ... 33 | // class Application extends App implements IBootstrap 34 | // ... 35 | // public function register(IRegistrationContext $context): void { 36 | $context->registerEventListener(RegisterScriptFunctionsEvent::class, RegisterScriptFunctionListener::class); 37 | // } 38 | ``` 39 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | * [Installation and dependencies](../README.md#installation--configuration) 2 | * [General administrator documentation](Admin.md) 3 | * [Scripting API documentation](Functions.md) 4 | * [Contribute to the API](Contribute_API.md) 5 | * [Integration with other Nextcloud apps](Integration.md) 6 | -------------------------------------------------------------------------------- /examples/business_card.lua: -------------------------------------------------------------------------------- 1 | --- Creates a simple business card PDF from a Mustache HTML template. 2 | --- The PDF is saved to the user's home directory with the name "business-card.pdf" 3 | --- 4 | --- This action does not currently do anything with the selected files, ideally either the 5 | --- html, or the vars would get loaded from a file: 6 | --- 7 | --- html = file_content(get_input_files()[1]) 8 | --- vars = json(file_content(get_input_files()[1])) 9 | 10 | vars = get_input() 11 | html = [[ 12 |
13 |
14 | {{ company_name }} 15 |
16 |
17 |
{{ name }}
18 |
{{ title }}
19 |

20 |
{{ phone }}
21 |
{{ email }}
22 |
23 |
{{ website }}
24 |
25 | ]] 26 | 27 | card = mustache(html, vars) 28 | content = html_to_pdf(card) 29 | 30 | if( exists(home(), "business-card.pdf") )then 31 | abort("File 'business-card.pdf' already exists in your home folder.") 32 | end 33 | 34 | new_file(home(), "business-card.pdf", content) 35 | -------------------------------------------------------------------------------- /examples/directory_tree.lua: -------------------------------------------------------------------------------- 1 | --- Crawls through the selected folders/files and crates a directory tree. 2 | --- 3 | --- The directory tree gets saved to the directory from which the files were 4 | --- selected, with the name "tree.txt". 5 | 6 | function listing(nodes, separator) 7 | separator = separator or "" 8 | local files = "" 9 | local folders = "" 10 | 11 | for i, node in ipairs(nodes) do 12 | if( is_file(node) )then 13 | files = files .. separator .. "-" .. node.name .. "\n" 14 | elseif( is_folder(node) )then 15 | local list = listing(directory_listing(node), separator .. "\t") 16 | folders = folders .. separator .. "-[" .. node.name .. "]\n" .. list 17 | end 18 | end 19 | 20 | return folders .. files 21 | end 22 | 23 | local list = listing(get_input_files(), "") 24 | local out_folder = get_parent(get_input_files()[1]) 25 | 26 | if( exists(out_folder, "tree.txt") )then 27 | abort("The file 'tree.txt' already exists in this folder.") 28 | end 29 | 30 | new_file(out_folder, "tree.txt", list) 31 | -------------------------------------------------------------------------------- /examples/merge_pdfs.lua: -------------------------------------------------------------------------------- 1 | --- Merges any selected PDF files to a single file in the selected location and with the provided name. 2 | --- PDFs are sorted by name in ascending order before they are merged. 3 | --- Non-PDF files will get ignored. 4 | --- 5 | --- NOTE: This command requires `qpdf` to be installed on the server. 6 | --- https://github.com/qpdf/qpdf 7 | 8 | local dir = get_input("output_location") 9 | local name = get_input("file_name") 10 | local files = get_input_files() 11 | 12 | if (name == nil or name == "") then 13 | abort("No file name was provided") 14 | end 15 | 16 | if (string.find(name, ".pdf") == nil) then 17 | name = name .. ".pdf" 18 | end 19 | 20 | if (exists(dir, name)) then 21 | abort("A file already exists in the chosen location") 22 | end 23 | 24 | files = sort(files, "name") 25 | 26 | pdf_merge(files, dir, name) 27 | -------------------------------------------------------------------------------- /img/files_scripts-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | -------------------------------------------------------------------------------- /img/files_scripts.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | -------------------------------------------------------------------------------- /l10n/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raudius/files_scripts/520947dfb66f41db718fde3e9662aef4c240ecda/l10n/.gitkeep -------------------------------------------------------------------------------- /l10n/af.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Edit" : "Wysig", 5 | "Delete" : "Skrap", 6 | "Text" : "Teks", 7 | "Back" : "Terug", 8 | "Save" : "Bewaar", 9 | "Saved" : "Bewaar", 10 | "Unknown error" : "Onbekende fout" 11 | }, 12 | "nplurals=2; plural=(n != 1);"); 13 | -------------------------------------------------------------------------------- /l10n/af.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Edit" : "Wysig", 3 | "Delete" : "Skrap", 4 | "Text" : "Teks", 5 | "Back" : "Terug", 6 | "Save" : "Bewaar", 7 | "Saved" : "Bewaar", 8 | "Unknown error" : "Onbekende fout" 9 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 10 | } -------------------------------------------------------------------------------- /l10n/an.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Activau", 5 | "Disabled" : "Desactivau", 6 | "Delete" : "Borrar", 7 | "Back" : "Ta zaga" 8 | }, 9 | "nplurals=2; plural=(n != 1);"); 10 | -------------------------------------------------------------------------------- /l10n/an.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Activau", 3 | "Disabled" : "Desactivau", 4 | "Delete" : "Borrar", 5 | "Back" : "Ta zaga" 6 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 7 | } -------------------------------------------------------------------------------- /l10n/ast.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Activóse", 5 | "Disabled" : "Desactivóse", 6 | "Edit" : "Editar", 7 | "Delete" : "Desaniciar", 8 | "Text" : "Testu", 9 | "Checkbox" : "Caxellu", 10 | "Back" : "Atrás", 11 | "Save" : "Guardar", 12 | "Saved" : "Guardóse", 13 | "Unknown error" : "Error desconocíu", 14 | "More actions" : "Más aiciones" 15 | }, 16 | "nplurals=2; plural=(n != 1);"); 17 | -------------------------------------------------------------------------------- /l10n/ast.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Activóse", 3 | "Disabled" : "Desactivóse", 4 | "Edit" : "Editar", 5 | "Delete" : "Desaniciar", 6 | "Text" : "Testu", 7 | "Checkbox" : "Caxellu", 8 | "Back" : "Atrás", 9 | "Save" : "Guardar", 10 | "Saved" : "Guardóse", 11 | "Unknown error" : "Error desconocíu", 12 | "More actions" : "Más aiciones" 13 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 14 | } -------------------------------------------------------------------------------- /l10n/az.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "İşə salınıb", 5 | "Disabled" : "Dayandırılıb", 6 | "Edit" : "Dəyişiklik et", 7 | "Delete" : "Sil", 8 | "Back" : "Geri", 9 | "Save" : "Saxla", 10 | "Saved" : "Saxlanıldı", 11 | "Limit to groups" : "Qruplara limitlə", 12 | "Unknown error" : "Bəlli olmayan səhv baş verdi" 13 | }, 14 | "nplurals=2; plural=(n != 1);"); 15 | -------------------------------------------------------------------------------- /l10n/az.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "İşə salınıb", 3 | "Disabled" : "Dayandırılıb", 4 | "Edit" : "Dəyişiklik et", 5 | "Delete" : "Sil", 6 | "Back" : "Geri", 7 | "Save" : "Saxla", 8 | "Saved" : "Saxlanıldı", 9 | "Limit to groups" : "Qruplara limitlə", 10 | "Unknown error" : "Bəlli olmayan səhv baş verdi" 11 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 12 | } -------------------------------------------------------------------------------- /l10n/bn_BD.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "কার্যকর", 5 | "Disabled" : "অকার্যকর", 6 | "Edit" : "সম্পাদনা", 7 | "Delete" : "মুছে", 8 | "Back" : "পেছনে যাও", 9 | "Save" : "সংরক্ষণ", 10 | "Saved" : "সংরক্ষণ করা হলো", 11 | "Unknown error" : "অজানা জটিলতা" 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /l10n/bn_BD.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "কার্যকর", 3 | "Disabled" : "অকার্যকর", 4 | "Edit" : "সম্পাদনা", 5 | "Delete" : "মুছে", 6 | "Back" : "পেছনে যাও", 7 | "Save" : "সংরক্ষণ", 8 | "Saved" : "সংরক্ষণ করা হলো", 9 | "Unknown error" : "অজানা জটিলতা" 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /l10n/br.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Aotreet", 5 | "Disabled" : "Disaotreañ", 6 | "Edit" : "Cheñch", 7 | "Delete" : "Dilemel", 8 | "Text" : "Testenn", 9 | "Checkbox" : "Checkbox", 10 | "Back" : "Distro", 11 | "Save" : "Enrollañ", 12 | "Saved" : "Enrollet", 13 | "Limit to groups" : "Nemet d'ar strolladoù", 14 | "Unknown error" : "Fazi dizanv" 15 | }, 16 | "nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);"); 17 | -------------------------------------------------------------------------------- /l10n/br.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Aotreet", 3 | "Disabled" : "Disaotreañ", 4 | "Edit" : "Cheñch", 5 | "Delete" : "Dilemel", 6 | "Text" : "Testenn", 7 | "Checkbox" : "Checkbox", 8 | "Back" : "Distro", 9 | "Save" : "Enrollañ", 10 | "Saved" : "Enrollet", 11 | "Limit to groups" : "Nemet d'ar strolladoù", 12 | "Unknown error" : "Fazi dizanv" 13 | },"pluralForm" :"nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);" 14 | } -------------------------------------------------------------------------------- /l10n/bs.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Aktivirano", 5 | "Disabled" : "Onemogućeno", 6 | "Edit" : "Izmjeni", 7 | "Delete" : "Obriši", 8 | "Save" : "Spremi", 9 | "Saved" : "Spremljeno", 10 | "Unknown error" : "Nepoznata greška" 11 | }, 12 | "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); 13 | -------------------------------------------------------------------------------- /l10n/bs.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Aktivirano", 3 | "Disabled" : "Onemogućeno", 4 | "Edit" : "Izmjeni", 5 | "Delete" : "Obriši", 6 | "Save" : "Spremi", 7 | "Saved" : "Spremljeno", 8 | "Unknown error" : "Nepoznata greška" 9 | },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" 10 | } -------------------------------------------------------------------------------- /l10n/cy_GB.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Galluogwyd", 5 | "Disabled" : "Analluogwyd", 6 | "Edit" : "Golygu", 7 | "Delete" : "Dileu", 8 | "Checkbox" : "Blwch ticio", 9 | "Back" : "Nôl", 10 | "Save" : "Cadw", 11 | "Saved" : "Wedi'u cadw", 12 | "Unknown error" : "Gwall anhysbys" 13 | }, 14 | "nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;"); 15 | -------------------------------------------------------------------------------- /l10n/cy_GB.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Galluogwyd", 3 | "Disabled" : "Analluogwyd", 4 | "Edit" : "Golygu", 5 | "Delete" : "Dileu", 6 | "Checkbox" : "Blwch ticio", 7 | "Back" : "Nôl", 8 | "Save" : "Cadw", 9 | "Saved" : "Wedi'u cadw", 10 | "Unknown error" : "Gwall anhysbys" 11 | },"pluralForm" :"nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;" 12 | } -------------------------------------------------------------------------------- /l10n/da.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Aktiveret", 5 | "Disabled" : "Deaktiveret", 6 | "Edit" : "Rediger", 7 | "Duplicate" : "dubletter", 8 | "Delete" : "Slet", 9 | "Text" : "Tekst", 10 | "Checkbox" : "Afkrydsningsfelt", 11 | "Back" : "Tilbage", 12 | "Save" : "Gem", 13 | "Saved" : "Gemt", 14 | "Limit to groups" : "Begræns til grupper", 15 | "Unknown error" : "Ukendt fejl", 16 | "New action" : "Ny handling", 17 | "More actions" : "Flere handlinger" 18 | }, 19 | "nplurals=2; plural=(n != 1);"); 20 | -------------------------------------------------------------------------------- /l10n/da.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Aktiveret", 3 | "Disabled" : "Deaktiveret", 4 | "Edit" : "Rediger", 5 | "Duplicate" : "dubletter", 6 | "Delete" : "Slet", 7 | "Text" : "Tekst", 8 | "Checkbox" : "Afkrydsningsfelt", 9 | "Back" : "Tilbage", 10 | "Save" : "Gem", 11 | "Saved" : "Gemt", 12 | "Limit to groups" : "Begræns til grupper", 13 | "Unknown error" : "Ukendt fejl", 14 | "New action" : "Ny handling", 15 | "More actions" : "Flere handlinger" 16 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 17 | } -------------------------------------------------------------------------------- /l10n/eo.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Ŝaltita", 5 | "Disabled" : "Malŝaltita", 6 | "Edit" : "Modifi", 7 | "Delete" : "Forigi", 8 | "Text" : "Teksto", 9 | "Checkbox" : "Markobutono", 10 | "Back" : "Antaŭen", 11 | "Save" : "Konservi", 12 | "Saved" : "Konservita", 13 | "Limit to groups" : "Limigi al grupoj", 14 | "Unknown error" : "Nekonata eraro", 15 | "More actions" : "Pliaj agoj" 16 | }, 17 | "nplurals=2; plural=(n != 1);"); 18 | -------------------------------------------------------------------------------- /l10n/eo.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Ŝaltita", 3 | "Disabled" : "Malŝaltita", 4 | "Edit" : "Modifi", 5 | "Delete" : "Forigi", 6 | "Text" : "Teksto", 7 | "Checkbox" : "Markobutono", 8 | "Back" : "Antaŭen", 9 | "Save" : "Konservi", 10 | "Saved" : "Konservita", 11 | "Limit to groups" : "Limigi al grupoj", 12 | "Unknown error" : "Nekonata eraro", 13 | "More actions" : "Pliaj agoj" 14 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 15 | } -------------------------------------------------------------------------------- /l10n/es_419.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Habilitado", 5 | "Disabled" : "Deshabilitado", 6 | "Edit" : "Editar", 7 | "Delete" : "Borrar", 8 | "Text" : "Texto", 9 | "Checkbox" : "Casilla de verificación", 10 | "Back" : "Atrás", 11 | "Save" : "Guardar", 12 | "Saved" : "Guardado", 13 | "Limit to groups" : "Limitar a grupos", 14 | "Unknown error" : "Error desconocido", 15 | "More actions" : "Más acciones" 16 | }, 17 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 18 | -------------------------------------------------------------------------------- /l10n/es_419.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Habilitado", 3 | "Disabled" : "Deshabilitado", 4 | "Edit" : "Editar", 5 | "Delete" : "Borrar", 6 | "Text" : "Texto", 7 | "Checkbox" : "Casilla de verificación", 8 | "Back" : "Atrás", 9 | "Save" : "Guardar", 10 | "Saved" : "Guardado", 11 | "Limit to groups" : "Limitar a grupos", 12 | "Unknown error" : "Error desconocido", 13 | "More actions" : "Más acciones" 14 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 15 | } -------------------------------------------------------------------------------- /l10n/es_AR.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Habilitado", 5 | "Disabled" : "Deshabilitado", 6 | "Edit" : "Editar", 7 | "Delete" : "Eliminar", 8 | "Text" : "Texto", 9 | "Checkbox" : "Casilla de verificación", 10 | "Back" : "Atrás", 11 | "Save" : "Guardar", 12 | "Saved" : "Guardado", 13 | "Limit to groups" : "Limitar a grupos", 14 | "Unknown error" : "Error desconocido" 15 | }, 16 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 17 | -------------------------------------------------------------------------------- /l10n/es_AR.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Habilitado", 3 | "Disabled" : "Deshabilitado", 4 | "Edit" : "Editar", 5 | "Delete" : "Eliminar", 6 | "Text" : "Texto", 7 | "Checkbox" : "Casilla de verificación", 8 | "Back" : "Atrás", 9 | "Save" : "Guardar", 10 | "Saved" : "Guardado", 11 | "Limit to groups" : "Limitar a grupos", 12 | "Unknown error" : "Error desconocido" 13 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 14 | } -------------------------------------------------------------------------------- /l10n/es_CL.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Habilitado", 5 | "Disabled" : "Deshabilitado", 6 | "Edit" : "Editar", 7 | "Delete" : "Borrar", 8 | "Text" : "Texto", 9 | "Checkbox" : "Casilla de verificación", 10 | "Back" : "Atrás", 11 | "Save" : "Guardar", 12 | "Saved" : "Guardado", 13 | "Limit to groups" : "Limitar a grupos", 14 | "Unknown error" : "Se presentó un error desconocido", 15 | "More actions" : "Más acciones" 16 | }, 17 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 18 | -------------------------------------------------------------------------------- /l10n/es_CL.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Habilitado", 3 | "Disabled" : "Deshabilitado", 4 | "Edit" : "Editar", 5 | "Delete" : "Borrar", 6 | "Text" : "Texto", 7 | "Checkbox" : "Casilla de verificación", 8 | "Back" : "Atrás", 9 | "Save" : "Guardar", 10 | "Saved" : "Guardado", 11 | "Limit to groups" : "Limitar a grupos", 12 | "Unknown error" : "Se presentó un error desconocido", 13 | "More actions" : "Más acciones" 14 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 15 | } -------------------------------------------------------------------------------- /l10n/es_CO.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Habilitado", 5 | "Disabled" : "Deshabilitado", 6 | "Edit" : "Editar", 7 | "Delete" : "Borrar", 8 | "Text" : "Texto", 9 | "Checkbox" : "Casilla de verificación", 10 | "Back" : "Atrás", 11 | "Save" : "Guardar", 12 | "Saved" : "Guardado", 13 | "Limit to groups" : "Limitar a grupos", 14 | "Unknown error" : "Error desconocido", 15 | "More actions" : "Más acciones" 16 | }, 17 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 18 | -------------------------------------------------------------------------------- /l10n/es_CO.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Habilitado", 3 | "Disabled" : "Deshabilitado", 4 | "Edit" : "Editar", 5 | "Delete" : "Borrar", 6 | "Text" : "Texto", 7 | "Checkbox" : "Casilla de verificación", 8 | "Back" : "Atrás", 9 | "Save" : "Guardar", 10 | "Saved" : "Guardado", 11 | "Limit to groups" : "Limitar a grupos", 12 | "Unknown error" : "Error desconocido", 13 | "More actions" : "Más acciones" 14 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 15 | } -------------------------------------------------------------------------------- /l10n/es_CR.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Habilitado", 5 | "Disabled" : "Deshabilitado", 6 | "Edit" : "Editar", 7 | "Delete" : "Borrar", 8 | "Text" : "Texto", 9 | "Checkbox" : "Casilla de verificación", 10 | "Back" : "Atrás", 11 | "Save" : "Guardar", 12 | "Saved" : "Guardado", 13 | "Limit to groups" : "Limitar a grupos", 14 | "Unknown error" : "Error desconocido", 15 | "More actions" : "Más acciones" 16 | }, 17 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 18 | -------------------------------------------------------------------------------- /l10n/es_CR.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Habilitado", 3 | "Disabled" : "Deshabilitado", 4 | "Edit" : "Editar", 5 | "Delete" : "Borrar", 6 | "Text" : "Texto", 7 | "Checkbox" : "Casilla de verificación", 8 | "Back" : "Atrás", 9 | "Save" : "Guardar", 10 | "Saved" : "Guardado", 11 | "Limit to groups" : "Limitar a grupos", 12 | "Unknown error" : "Error desconocido", 13 | "More actions" : "Más acciones" 14 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 15 | } -------------------------------------------------------------------------------- /l10n/es_DO.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Habilitado", 5 | "Disabled" : "Deshabilitado", 6 | "Edit" : "Editar", 7 | "Delete" : "Borrar", 8 | "Text" : "Texto", 9 | "Checkbox" : "Casilla de verificación", 10 | "Back" : "Atrás", 11 | "Save" : "Guardar", 12 | "Saved" : "Guardado", 13 | "Limit to groups" : "Limitar a grupos", 14 | "Unknown error" : "Error desconocido", 15 | "More actions" : "Más acciones" 16 | }, 17 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 18 | -------------------------------------------------------------------------------- /l10n/es_DO.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Habilitado", 3 | "Disabled" : "Deshabilitado", 4 | "Edit" : "Editar", 5 | "Delete" : "Borrar", 6 | "Text" : "Texto", 7 | "Checkbox" : "Casilla de verificación", 8 | "Back" : "Atrás", 9 | "Save" : "Guardar", 10 | "Saved" : "Guardado", 11 | "Limit to groups" : "Limitar a grupos", 12 | "Unknown error" : "Error desconocido", 13 | "More actions" : "Más acciones" 14 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 15 | } -------------------------------------------------------------------------------- /l10n/es_GT.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Habilitado", 5 | "Disabled" : "Deshabilitado", 6 | "Edit" : "Editar", 7 | "Delete" : "Borrar", 8 | "Text" : "Texto", 9 | "Checkbox" : "Casilla de verificación", 10 | "Back" : "Atrás", 11 | "Save" : "Guardar", 12 | "Saved" : "Guardado", 13 | "Limit to groups" : "Limitar a grupos", 14 | "Unknown error" : "Error desconocido", 15 | "More actions" : "Más acciones" 16 | }, 17 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 18 | -------------------------------------------------------------------------------- /l10n/es_GT.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Habilitado", 3 | "Disabled" : "Deshabilitado", 4 | "Edit" : "Editar", 5 | "Delete" : "Borrar", 6 | "Text" : "Texto", 7 | "Checkbox" : "Casilla de verificación", 8 | "Back" : "Atrás", 9 | "Save" : "Guardar", 10 | "Saved" : "Guardado", 11 | "Limit to groups" : "Limitar a grupos", 12 | "Unknown error" : "Error desconocido", 13 | "More actions" : "Más acciones" 14 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 15 | } -------------------------------------------------------------------------------- /l10n/es_HN.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Habilitado", 5 | "Disabled" : "Deshabilitado", 6 | "Edit" : "Editar", 7 | "Delete" : "Borrar", 8 | "Text" : "Texto", 9 | "Checkbox" : "Casilla de verificación", 10 | "Back" : "Atrás", 11 | "Save" : "Guardar", 12 | "Saved" : "Guardado", 13 | "Limit to groups" : "Limitar a grupos", 14 | "Unknown error" : "Error desconocido", 15 | "More actions" : "Más acciones" 16 | }, 17 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 18 | -------------------------------------------------------------------------------- /l10n/es_HN.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Habilitado", 3 | "Disabled" : "Deshabilitado", 4 | "Edit" : "Editar", 5 | "Delete" : "Borrar", 6 | "Text" : "Texto", 7 | "Checkbox" : "Casilla de verificación", 8 | "Back" : "Atrás", 9 | "Save" : "Guardar", 10 | "Saved" : "Guardado", 11 | "Limit to groups" : "Limitar a grupos", 12 | "Unknown error" : "Error desconocido", 13 | "More actions" : "Más acciones" 14 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 15 | } -------------------------------------------------------------------------------- /l10n/es_MX.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Habilitado", 5 | "Disabled" : "Deshabilitado", 6 | "Edit" : "Editar", 7 | "Duplicate" : "Duplicado", 8 | "Delete" : "Eliminar", 9 | "Text" : "Texto", 10 | "Checkbox" : "Casilla de verificación", 11 | "Back" : "Atrás", 12 | "Save" : "Guardar", 13 | "Saved" : "Guardado", 14 | "Limit to groups" : "Limitar a grupos", 15 | "Unknown error" : "Se presentó un error desconocido", 16 | "More actions" : "Más acciones" 17 | }, 18 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 19 | -------------------------------------------------------------------------------- /l10n/es_MX.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Habilitado", 3 | "Disabled" : "Deshabilitado", 4 | "Edit" : "Editar", 5 | "Duplicate" : "Duplicado", 6 | "Delete" : "Eliminar", 7 | "Text" : "Texto", 8 | "Checkbox" : "Casilla de verificación", 9 | "Back" : "Atrás", 10 | "Save" : "Guardar", 11 | "Saved" : "Guardado", 12 | "Limit to groups" : "Limitar a grupos", 13 | "Unknown error" : "Se presentó un error desconocido", 14 | "More actions" : "Más acciones" 15 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 16 | } -------------------------------------------------------------------------------- /l10n/es_NI.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Habilitado", 5 | "Disabled" : "Deshabilitado", 6 | "Edit" : "Editar", 7 | "Delete" : "Borrar", 8 | "Text" : "Texto", 9 | "Checkbox" : "Casilla de verificación", 10 | "Back" : "Atrás", 11 | "Save" : "Guardar", 12 | "Saved" : "Guardado", 13 | "Limit to groups" : "Limitar a grupos", 14 | "Unknown error" : "Error desconocido", 15 | "More actions" : "Más acciones" 16 | }, 17 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 18 | -------------------------------------------------------------------------------- /l10n/es_NI.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Habilitado", 3 | "Disabled" : "Deshabilitado", 4 | "Edit" : "Editar", 5 | "Delete" : "Borrar", 6 | "Text" : "Texto", 7 | "Checkbox" : "Casilla de verificación", 8 | "Back" : "Atrás", 9 | "Save" : "Guardar", 10 | "Saved" : "Guardado", 11 | "Limit to groups" : "Limitar a grupos", 12 | "Unknown error" : "Error desconocido", 13 | "More actions" : "Más acciones" 14 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 15 | } -------------------------------------------------------------------------------- /l10n/es_PA.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Habilitado", 5 | "Disabled" : "Deshabilitado", 6 | "Edit" : "Editar", 7 | "Delete" : "Borrar", 8 | "Text" : "Texto", 9 | "Checkbox" : "Casilla de verificación", 10 | "Back" : "Atrás", 11 | "Save" : "Guardar", 12 | "Saved" : "Guardado", 13 | "Limit to groups" : "Limitar a grupos", 14 | "Unknown error" : "Error desconocido", 15 | "More actions" : "Más acciones" 16 | }, 17 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 18 | -------------------------------------------------------------------------------- /l10n/es_PA.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Habilitado", 3 | "Disabled" : "Deshabilitado", 4 | "Edit" : "Editar", 5 | "Delete" : "Borrar", 6 | "Text" : "Texto", 7 | "Checkbox" : "Casilla de verificación", 8 | "Back" : "Atrás", 9 | "Save" : "Guardar", 10 | "Saved" : "Guardado", 11 | "Limit to groups" : "Limitar a grupos", 12 | "Unknown error" : "Error desconocido", 13 | "More actions" : "Más acciones" 14 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 15 | } -------------------------------------------------------------------------------- /l10n/es_PE.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Habilitado", 5 | "Disabled" : "Deshabilitado", 6 | "Edit" : "Editar", 7 | "Delete" : "Borrar", 8 | "Text" : "Texto", 9 | "Checkbox" : "Casilla de verificación", 10 | "Back" : "Atrás", 11 | "Save" : "Guardar", 12 | "Saved" : "Guardado", 13 | "Limit to groups" : "Limitar a grupos", 14 | "Unknown error" : "Error desconocido", 15 | "More actions" : "Más acciones" 16 | }, 17 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 18 | -------------------------------------------------------------------------------- /l10n/es_PE.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Habilitado", 3 | "Disabled" : "Deshabilitado", 4 | "Edit" : "Editar", 5 | "Delete" : "Borrar", 6 | "Text" : "Texto", 7 | "Checkbox" : "Casilla de verificación", 8 | "Back" : "Atrás", 9 | "Save" : "Guardar", 10 | "Saved" : "Guardado", 11 | "Limit to groups" : "Limitar a grupos", 12 | "Unknown error" : "Error desconocido", 13 | "More actions" : "Más acciones" 14 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 15 | } -------------------------------------------------------------------------------- /l10n/es_PR.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Habilitado", 5 | "Disabled" : "Deshabilitado", 6 | "Edit" : "Editar", 7 | "Delete" : "Borrar", 8 | "Text" : "Texto", 9 | "Checkbox" : "Casilla de verificación", 10 | "Back" : "Atrás", 11 | "Save" : "Guardar", 12 | "Saved" : "Guardado", 13 | "Limit to groups" : "Limitar a grupos", 14 | "Unknown error" : "Error desconocido", 15 | "More actions" : "Más acciones" 16 | }, 17 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 18 | -------------------------------------------------------------------------------- /l10n/es_PR.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Habilitado", 3 | "Disabled" : "Deshabilitado", 4 | "Edit" : "Editar", 5 | "Delete" : "Borrar", 6 | "Text" : "Texto", 7 | "Checkbox" : "Casilla de verificación", 8 | "Back" : "Atrás", 9 | "Save" : "Guardar", 10 | "Saved" : "Guardado", 11 | "Limit to groups" : "Limitar a grupos", 12 | "Unknown error" : "Error desconocido", 13 | "More actions" : "Más acciones" 14 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 15 | } -------------------------------------------------------------------------------- /l10n/es_PY.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Habilitado", 5 | "Disabled" : "Deshabilitado", 6 | "Edit" : "Editar", 7 | "Delete" : "Borrar", 8 | "Text" : "Texto", 9 | "Checkbox" : "Casilla de verificación", 10 | "Back" : "Atrás", 11 | "Save" : "Guardar", 12 | "Saved" : "Guardado", 13 | "Limit to groups" : "Limitar a grupos", 14 | "Unknown error" : "Error desconocido", 15 | "More actions" : "Más acciones" 16 | }, 17 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 18 | -------------------------------------------------------------------------------- /l10n/es_PY.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Habilitado", 3 | "Disabled" : "Deshabilitado", 4 | "Edit" : "Editar", 5 | "Delete" : "Borrar", 6 | "Text" : "Texto", 7 | "Checkbox" : "Casilla de verificación", 8 | "Back" : "Atrás", 9 | "Save" : "Guardar", 10 | "Saved" : "Guardado", 11 | "Limit to groups" : "Limitar a grupos", 12 | "Unknown error" : "Error desconocido", 13 | "More actions" : "Más acciones" 14 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 15 | } -------------------------------------------------------------------------------- /l10n/es_SV.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Habilitado", 5 | "Disabled" : "Deshabilitado", 6 | "Edit" : "Editar", 7 | "Delete" : "Borrar", 8 | "Text" : "Texto", 9 | "Checkbox" : "Casilla de verificación", 10 | "Back" : "Atrás", 11 | "Save" : "Guardar", 12 | "Saved" : "Guardado", 13 | "Limit to groups" : "Limitar a grupos", 14 | "Unknown error" : "Error desconocido", 15 | "More actions" : "Más acciones" 16 | }, 17 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 18 | -------------------------------------------------------------------------------- /l10n/es_SV.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Habilitado", 3 | "Disabled" : "Deshabilitado", 4 | "Edit" : "Editar", 5 | "Delete" : "Borrar", 6 | "Text" : "Texto", 7 | "Checkbox" : "Casilla de verificación", 8 | "Back" : "Atrás", 9 | "Save" : "Guardar", 10 | "Saved" : "Guardado", 11 | "Limit to groups" : "Limitar a grupos", 12 | "Unknown error" : "Error desconocido", 13 | "More actions" : "Más acciones" 14 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 15 | } -------------------------------------------------------------------------------- /l10n/es_UY.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Habilitado", 5 | "Disabled" : "Deshabilitado", 6 | "Edit" : "Editar", 7 | "Delete" : "Borrar", 8 | "Text" : "Texto", 9 | "Checkbox" : "Casilla de verificación", 10 | "Back" : "Atrás", 11 | "Save" : "Guardar", 12 | "Saved" : "Guardado", 13 | "Limit to groups" : "Limitar a grupos", 14 | "Unknown error" : "Error desconocido", 15 | "More actions" : "Más acciones" 16 | }, 17 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 18 | -------------------------------------------------------------------------------- /l10n/es_UY.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Habilitado", 3 | "Disabled" : "Deshabilitado", 4 | "Edit" : "Editar", 5 | "Delete" : "Borrar", 6 | "Text" : "Texto", 7 | "Checkbox" : "Casilla de verificación", 8 | "Back" : "Atrás", 9 | "Save" : "Guardar", 10 | "Saved" : "Guardado", 11 | "Limit to groups" : "Limitar a grupos", 12 | "Unknown error" : "Error desconocido", 13 | "More actions" : "Más acciones" 14 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 15 | } -------------------------------------------------------------------------------- /l10n/et_EE.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Lubatud", 5 | "Disabled" : "Keelatud", 6 | "Edit" : "Redigeeri", 7 | "Duplicate" : "Tee koopia", 8 | "Delete" : "Kustuta", 9 | "Text" : "Tekst", 10 | "Checkbox" : "Märkeruut", 11 | "Back" : "Tagasi", 12 | "Save" : "Salvesta", 13 | "Saved" : "Salvestatud", 14 | "Limit to groups" : "Luba gruppidele", 15 | "Unknown error" : "Tundmatu viga", 16 | "New action" : "Uus tegevus", 17 | "More actions" : "Täiendavad tegevused" 18 | }, 19 | "nplurals=2; plural=(n != 1);"); 20 | -------------------------------------------------------------------------------- /l10n/et_EE.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Lubatud", 3 | "Disabled" : "Keelatud", 4 | "Edit" : "Redigeeri", 5 | "Duplicate" : "Tee koopia", 6 | "Delete" : "Kustuta", 7 | "Text" : "Tekst", 8 | "Checkbox" : "Märkeruut", 9 | "Back" : "Tagasi", 10 | "Save" : "Salvesta", 11 | "Saved" : "Salvestatud", 12 | "Limit to groups" : "Luba gruppidele", 13 | "Unknown error" : "Tundmatu viga", 14 | "New action" : "Uus tegevus", 15 | "More actions" : "Täiendavad tegevused" 16 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 17 | } -------------------------------------------------------------------------------- /l10n/gd.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Edit" : "Deasaich", 5 | "Delete" : "Sguab às", 6 | "Checkbox" : "Bogsa-cromaige", 7 | "Back" : "Air ais", 8 | "Save" : "Sàbhail", 9 | "Unknown error" : "Mearachd nach aithne dhuinn" 10 | }, 11 | "nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : (n > 2 && n < 20) ? 2 : 3;"); 12 | -------------------------------------------------------------------------------- /l10n/gd.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Edit" : "Deasaich", 3 | "Delete" : "Sguab às", 4 | "Checkbox" : "Bogsa-cromaige", 5 | "Back" : "Air ais", 6 | "Save" : "Sàbhail", 7 | "Unknown error" : "Mearachd nach aithne dhuinn" 8 | },"pluralForm" :"nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : (n > 2 && n < 20) ? 2 : 3;" 9 | } -------------------------------------------------------------------------------- /l10n/he.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "מופעל", 5 | "Disabled" : "מושבת", 6 | "Edit" : "עריכה", 7 | "Delete" : "מחיקה", 8 | "Text" : "טקסט", 9 | "Checkbox" : "תיבת סימון", 10 | "Back" : "חזרה", 11 | "Save" : "שמירה", 12 | "Saved" : "נשמרה", 13 | "Limit to groups" : "הגבלה לקבוצות", 14 | "Unknown error" : "שגיאה בלתי ידועה", 15 | "More actions" : "פעולות נוספות" 16 | }, 17 | "nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;"); 18 | -------------------------------------------------------------------------------- /l10n/he.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "מופעל", 3 | "Disabled" : "מושבת", 4 | "Edit" : "עריכה", 5 | "Delete" : "מחיקה", 6 | "Text" : "טקסט", 7 | "Checkbox" : "תיבת סימון", 8 | "Back" : "חזרה", 9 | "Save" : "שמירה", 10 | "Saved" : "נשמרה", 11 | "Limit to groups" : "הגבלה לקבוצות", 12 | "Unknown error" : "שגיאה בלתי ידועה", 13 | "More actions" : "פעולות נוספות" 14 | },"pluralForm" :"nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;" 15 | } -------------------------------------------------------------------------------- /l10n/hr.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Omogućeno", 5 | "Disabled" : "Onemogućeno", 6 | "Edit" : "Uredi", 7 | "Delete" : "Izbriši", 8 | "Text" : "Tekst", 9 | "Checkbox" : "Potvrdni okvir", 10 | "Back" : "Natrag", 11 | "Save" : "Spremi", 12 | "Saved" : "Spremljeno", 13 | "Limit to groups" : "Ograniči na grupe", 14 | "Unknown error" : "Nepoznata pogreška", 15 | "More actions" : "Dodatne radnje" 16 | }, 17 | "nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"); 18 | -------------------------------------------------------------------------------- /l10n/hr.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Omogućeno", 3 | "Disabled" : "Onemogućeno", 4 | "Edit" : "Uredi", 5 | "Delete" : "Izbriši", 6 | "Text" : "Tekst", 7 | "Checkbox" : "Potvrdni okvir", 8 | "Back" : "Natrag", 9 | "Save" : "Spremi", 10 | "Saved" : "Spremljeno", 11 | "Limit to groups" : "Ograniči na grupe", 12 | "Unknown error" : "Nepoznata pogreška", 13 | "More actions" : "Dodatne radnje" 14 | },"pluralForm" :"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;" 15 | } -------------------------------------------------------------------------------- /l10n/hy.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Edit" : "մշակել", 5 | "Delete" : "հեռացնել", 6 | "Save" : "Պահպանել", 7 | "Saved" : "Պահված" 8 | }, 9 | "nplurals=2; plural=(n != 1);"); 10 | -------------------------------------------------------------------------------- /l10n/hy.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Edit" : "մշակել", 3 | "Delete" : "հեռացնել", 4 | "Save" : "Պահպանել", 5 | "Saved" : "Պահված" 6 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 7 | } -------------------------------------------------------------------------------- /l10n/ia.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Activate", 5 | "Edit" : "Modificar", 6 | "Delete" : "Deler", 7 | "Back" : "Retro", 8 | "Save" : "Salveguardar", 9 | "Saved" : "Salveguardate", 10 | "Unknown error" : "Error incognite" 11 | }, 12 | "nplurals=2; plural=(n != 1);"); 13 | -------------------------------------------------------------------------------- /l10n/ia.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Activate", 3 | "Edit" : "Modificar", 4 | "Delete" : "Deler", 5 | "Back" : "Retro", 6 | "Save" : "Salveguardar", 7 | "Saved" : "Salveguardate", 8 | "Unknown error" : "Error incognite" 9 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 10 | } -------------------------------------------------------------------------------- /l10n/id.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Diaktifkan", 5 | "Disabled" : "Dinonaktifkan", 6 | "Edit" : "Sunting", 7 | "Delete" : "Hapus", 8 | "Text" : "Teks", 9 | "Checkbox" : "Kotak check", 10 | "Back" : "Kembali", 11 | "Save" : "Simpan", 12 | "Saved" : "Disimpan", 13 | "Limit to groups" : "Batasi ke grup", 14 | "Unknown error" : "Kesalahan tidak diketahui" 15 | }, 16 | "nplurals=1; plural=0;"); 17 | -------------------------------------------------------------------------------- /l10n/id.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Diaktifkan", 3 | "Disabled" : "Dinonaktifkan", 4 | "Edit" : "Sunting", 5 | "Delete" : "Hapus", 6 | "Text" : "Teks", 7 | "Checkbox" : "Kotak check", 8 | "Back" : "Kembali", 9 | "Save" : "Simpan", 10 | "Saved" : "Disimpan", 11 | "Limit to groups" : "Batasi ke grup", 12 | "Unknown error" : "Kesalahan tidak diketahui" 13 | },"pluralForm" :"nplurals=1; plural=0;" 14 | } -------------------------------------------------------------------------------- /l10n/is.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Virkt", 5 | "Disabled" : "Óvirkt", 6 | "Edit" : "Breyta", 7 | "Duplicate" : "Tvítaka", 8 | "Delete" : "Eyða", 9 | "Text" : "Texti", 10 | "Checkbox" : "Gátreitur", 11 | "Back" : "Til baka", 12 | "Save" : "Vista", 13 | "Saved" : "Vistað", 14 | "Limit to groups" : "Takmarka við hópa", 15 | "Unknown error" : "Óþekkt villa", 16 | "New action" : "Ný aðgerð", 17 | "More actions" : "Fleiri aðgerðir" 18 | }, 19 | "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); 20 | -------------------------------------------------------------------------------- /l10n/is.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Virkt", 3 | "Disabled" : "Óvirkt", 4 | "Edit" : "Breyta", 5 | "Duplicate" : "Tvítaka", 6 | "Delete" : "Eyða", 7 | "Text" : "Texti", 8 | "Checkbox" : "Gátreitur", 9 | "Back" : "Til baka", 10 | "Save" : "Vista", 11 | "Saved" : "Vistað", 12 | "Limit to groups" : "Takmarka við hópa", 13 | "Unknown error" : "Óþekkt villa", 14 | "New action" : "Ný aðgerð", 15 | "More actions" : "Fleiri aðgerðir" 16 | },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" 17 | } -------------------------------------------------------------------------------- /l10n/it.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Abilitata", 5 | "Disabled" : "Disabilitata", 6 | "Edit" : "Modifica", 7 | "Duplicate" : "Duplicato", 8 | "Delete" : "Elimina", 9 | "Text" : "Testo", 10 | "Checkbox" : "Casella di selezione", 11 | "Multi-select" : "Selezione multipla", 12 | "Back" : "Indietro", 13 | "Save" : "Salva", 14 | "Saved" : "Salvato", 15 | "Limit to groups" : "Limita a gruppi", 16 | "Unknown error" : "Errore sconosciuto", 17 | "Execute" : "Esegui", 18 | "More actions" : "Altre azioni" 19 | }, 20 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 21 | -------------------------------------------------------------------------------- /l10n/it.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Abilitata", 3 | "Disabled" : "Disabilitata", 4 | "Edit" : "Modifica", 5 | "Duplicate" : "Duplicato", 6 | "Delete" : "Elimina", 7 | "Text" : "Testo", 8 | "Checkbox" : "Casella di selezione", 9 | "Multi-select" : "Selezione multipla", 10 | "Back" : "Indietro", 11 | "Save" : "Salva", 12 | "Saved" : "Salvato", 13 | "Limit to groups" : "Limita a gruppi", 14 | "Unknown error" : "Errore sconosciuto", 15 | "Execute" : "Esegui", 16 | "More actions" : "Altre azioni" 17 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 18 | } -------------------------------------------------------------------------------- /l10n/ja.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "有効", 5 | "Disabled" : "無効", 6 | "Edit" : "編集", 7 | "Duplicate" : "複製", 8 | "Delete" : "削除", 9 | "Text" : "テキスト", 10 | "Checkbox" : "チェックボックス", 11 | "Back" : "戻る", 12 | "Save" : "保存", 13 | "Saved" : "保存しました", 14 | "Limit to groups" : "グループに制限する", 15 | "Unknown error" : "不明なエラー", 16 | "New action" : "新しいアクション", 17 | "More actions" : "その他のアクション" 18 | }, 19 | "nplurals=1; plural=0;"); 20 | -------------------------------------------------------------------------------- /l10n/ja.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "有効", 3 | "Disabled" : "無効", 4 | "Edit" : "編集", 5 | "Duplicate" : "複製", 6 | "Delete" : "削除", 7 | "Text" : "テキスト", 8 | "Checkbox" : "チェックボックス", 9 | "Back" : "戻る", 10 | "Save" : "保存", 11 | "Saved" : "保存しました", 12 | "Limit to groups" : "グループに制限する", 13 | "Unknown error" : "不明なエラー", 14 | "New action" : "新しいアクション", 15 | "More actions" : "その他のアクション" 16 | },"pluralForm" :"nplurals=1; plural=0;" 17 | } -------------------------------------------------------------------------------- /l10n/ka.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Enabled", 5 | "Disabled" : "Disabled", 6 | "Edit" : "Edit", 7 | "Duplicate" : "Duplicate", 8 | "Delete" : "Delete", 9 | "Text" : "Text", 10 | "Checkbox" : "Checkbox", 11 | "Back" : "Back", 12 | "Save" : "Save", 13 | "Saved" : "Saved", 14 | "Limit to groups" : "Limit to groups", 15 | "Unknown error" : "Unknown error", 16 | "More actions" : "More actions" 17 | }, 18 | "nplurals=2; plural=(n!=1);"); 19 | -------------------------------------------------------------------------------- /l10n/ka.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Enabled", 3 | "Disabled" : "Disabled", 4 | "Edit" : "Edit", 5 | "Duplicate" : "Duplicate", 6 | "Delete" : "Delete", 7 | "Text" : "Text", 8 | "Checkbox" : "Checkbox", 9 | "Back" : "Back", 10 | "Save" : "Save", 11 | "Saved" : "Saved", 12 | "Limit to groups" : "Limit to groups", 13 | "Unknown error" : "Unknown error", 14 | "More actions" : "More actions" 15 | },"pluralForm" :"nplurals=2; plural=(n!=1);" 16 | } -------------------------------------------------------------------------------- /l10n/ka_GE.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "მოქმედია", 5 | "Disabled" : "არაა მოქმედი", 6 | "Edit" : "შეცვლა", 7 | "Delete" : "წაშლა", 8 | "Text" : "ტექსტი", 9 | "Checkbox" : "ჩექბოქსი", 10 | "Back" : "უკან", 11 | "Save" : "შენახვა", 12 | "Saved" : "შენახულია", 13 | "Limit to groups" : "ლიმიტი ჯგუფებზე", 14 | "Unknown error" : "უცნობი შეცდომა", 15 | "More actions" : "მეტი ქმედება" 16 | }, 17 | "nplurals=2; plural=(n!=1);"); 18 | -------------------------------------------------------------------------------- /l10n/ka_GE.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "მოქმედია", 3 | "Disabled" : "არაა მოქმედი", 4 | "Edit" : "შეცვლა", 5 | "Delete" : "წაშლა", 6 | "Text" : "ტექსტი", 7 | "Checkbox" : "ჩექბოქსი", 8 | "Back" : "უკან", 9 | "Save" : "შენახვა", 10 | "Saved" : "შენახულია", 11 | "Limit to groups" : "ლიმიტი ჯგუფებზე", 12 | "Unknown error" : "უცნობი შეცდომა", 13 | "More actions" : "მეტი ქმედება" 14 | },"pluralForm" :"nplurals=2; plural=(n!=1);" 15 | } -------------------------------------------------------------------------------- /l10n/kab.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Yermed", 5 | "Disabled" : "Ittwarermed", 6 | "Edit" : "Ẓreg", 7 | "Delete" : "Kkes", 8 | "Back" : "Retour", 9 | "Save" : "Sekles", 10 | "Unknown error" : "Erreur inconnue" 11 | }, 12 | "nplurals=2; plural=(n != 1);"); 13 | -------------------------------------------------------------------------------- /l10n/kab.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Yermed", 3 | "Disabled" : "Ittwarermed", 4 | "Edit" : "Ẓreg", 5 | "Delete" : "Kkes", 6 | "Back" : "Retour", 7 | "Save" : "Sekles", 8 | "Unknown error" : "Erreur inconnue" 9 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 10 | } -------------------------------------------------------------------------------- /l10n/km.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "បាន​បើក", 5 | "Disabled" : "បាន​បិទ", 6 | "Edit" : "កែប្រែ", 7 | "Delete" : "លុប", 8 | "Back" : "ត្រឡប់ក្រោយ", 9 | "Save" : "រក្សាទុក", 10 | "Saved" : "បាន​រក្សាទុក", 11 | "Unknown error" : "មិន​ស្គាល់​កំហុស" 12 | }, 13 | "nplurals=1; plural=0;"); 14 | -------------------------------------------------------------------------------- /l10n/km.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "បាន​បើក", 3 | "Disabled" : "បាន​បិទ", 4 | "Edit" : "កែប្រែ", 5 | "Delete" : "លុប", 6 | "Back" : "ត្រឡប់ក្រោយ", 7 | "Save" : "រក្សាទុក", 8 | "Saved" : "បាន​រក្សាទុក", 9 | "Unknown error" : "មិន​ស្គាល់​កំហុស" 10 | },"pluralForm" :"nplurals=1; plural=0;" 11 | } -------------------------------------------------------------------------------- /l10n/kn.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "ಸಕ್ರಿಯಗೊಳಿಸಿದೆ", 5 | "Disabled" : "ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ", 6 | "Edit" : "ಸಂಪಾದಿಸು", 7 | "Delete" : "ಅಳಿಸಿ", 8 | "Save" : "ಉಳಿಸಿ", 9 | "Saved" : "ಉಳಿಸಿದ", 10 | "Unknown error" : "ಗೊತ್ತಿಲ್ಲದ ದೋಷ" 11 | }, 12 | "nplurals=2; plural=(n > 1);"); 13 | -------------------------------------------------------------------------------- /l10n/kn.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "ಸಕ್ರಿಯಗೊಳಿಸಿದೆ", 3 | "Disabled" : "ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ", 4 | "Edit" : "ಸಂಪಾದಿಸು", 5 | "Delete" : "ಅಳಿಸಿ", 6 | "Save" : "ಉಳಿಸಿ", 7 | "Saved" : "ಉಳಿಸಿದ", 8 | "Unknown error" : "ಗೊತ್ತಿಲ್ಲದ ದೋಷ" 9 | },"pluralForm" :"nplurals=2; plural=(n > 1);" 10 | } -------------------------------------------------------------------------------- /l10n/ko.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "An error occurred when saving the action." : "Action을 저장하는 중 오류 발생", 5 | "Action does not exist or is disabled." : "Action이 존재하지 않거나 비활성화 되었습니다.", 6 | "Enabled" : "활성화됨", 7 | "Disabled" : "비활성화됨", 8 | "Edit" : "편집", 9 | "Duplicate" : "복제", 10 | "Delete" : "삭제", 11 | "Text" : "텍스트", 12 | "Checkbox" : "체크 상자", 13 | "Back" : "뒤로", 14 | "Save" : "저장", 15 | "Saved" : "저장됨", 16 | "Limit to groups" : "그룹으로 제한", 17 | "Unknown error" : "알 수 없는 오류", 18 | "More actions" : "더 많은 동작" 19 | }, 20 | "nplurals=1; plural=0;"); 21 | -------------------------------------------------------------------------------- /l10n/ko.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "An error occurred when saving the action." : "Action을 저장하는 중 오류 발생", 3 | "Action does not exist or is disabled." : "Action이 존재하지 않거나 비활성화 되었습니다.", 4 | "Enabled" : "활성화됨", 5 | "Disabled" : "비활성화됨", 6 | "Edit" : "편집", 7 | "Duplicate" : "복제", 8 | "Delete" : "삭제", 9 | "Text" : "텍스트", 10 | "Checkbox" : "체크 상자", 11 | "Back" : "뒤로", 12 | "Save" : "저장", 13 | "Saved" : "저장됨", 14 | "Limit to groups" : "그룹으로 제한", 15 | "Unknown error" : "알 수 없는 오류", 16 | "More actions" : "더 많은 동작" 17 | },"pluralForm" :"nplurals=1; plural=0;" 18 | } -------------------------------------------------------------------------------- /l10n/lb.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Aktivéiert", 5 | "Disabled" : "Deaktivéiert", 6 | "Edit" : "Änneren", 7 | "Delete" : "Läschen", 8 | "Checkbox" : "Checkbox", 9 | "Back" : "Zeréck", 10 | "Save" : "Späicheren", 11 | "Saved" : "Gespäichert", 12 | "Unknown error" : "Et ass en onbekannte Fehler opgetrueden" 13 | }, 14 | "nplurals=2; plural=(n != 1);"); 15 | -------------------------------------------------------------------------------- /l10n/lb.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Aktivéiert", 3 | "Disabled" : "Deaktivéiert", 4 | "Edit" : "Änneren", 5 | "Delete" : "Läschen", 6 | "Checkbox" : "Checkbox", 7 | "Back" : "Zeréck", 8 | "Save" : "Späicheren", 9 | "Saved" : "Gespäichert", 10 | "Unknown error" : "Et ass en onbekannte Fehler opgetrueden" 11 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 12 | } -------------------------------------------------------------------------------- /l10n/lo.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Edit" : "ແກ້ໄຂ", 5 | "Delete" : "ລຶບ", 6 | "Checkbox" : "ເຄື່ອງໝາຍກ່ອງ", 7 | "Back" : "ຫຼັງ", 8 | "Save" : "ບັນທຶກ", 9 | "Unknown error" : "ຜິດພາດທີ່ບໍ່ຮູ້ຈັກ" 10 | }, 11 | "nplurals=1; plural=0;"); 12 | -------------------------------------------------------------------------------- /l10n/lo.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Edit" : "ແກ້ໄຂ", 3 | "Delete" : "ລຶບ", 4 | "Checkbox" : "ເຄື່ອງໝາຍກ່ອງ", 5 | "Back" : "ຫຼັງ", 6 | "Save" : "ບັນທຶກ", 7 | "Unknown error" : "ຜິດພາດທີ່ບໍ່ຮູ້ຈັກ" 8 | },"pluralForm" :"nplurals=1; plural=0;" 9 | } -------------------------------------------------------------------------------- /l10n/lt_LT.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Action does not exist or is disabled." : "Veiksmo nėra arba jis išjungtas.", 5 | "Title is empty." : "Pavadinimas yra tuščias.", 6 | "A script already exists with this title." : "Scenarijus šiuo pavadinimu jau yra.", 7 | "Enabled" : "Įjungta", 8 | "Disabled" : "Išjungta", 9 | "Edit" : "Taisyti", 10 | "Delete" : "Ištrinti", 11 | "Text" : "Tekstas", 12 | "Checkbox" : "Žymimasis langelis", 13 | "Back" : "Atgal", 14 | "Save" : "Įrašyti", 15 | "Saved" : "Įrašyta", 16 | "Script name" : "Scenarijaus pavadinimas", 17 | "A short description of what this action will do …" : "Trumpas aprašas to, ką darys šis veiksmas…", 18 | "Enable script" : "Įjungti scenarijų", 19 | "Limit to groups" : "Apriboti iki grupių", 20 | "Unknown error" : "Nežinoma klaida", 21 | "Action completed!" : "Veiksmas įvykdytas!", 22 | "Action failed unexpectedly." : "Veiksmas netikėtai patyrė nesėkmę.", 23 | "New action" : "Naujas veiksmas", 24 | "More actions" : "Daugiau veiksmų" 25 | }, 26 | "nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);"); 27 | -------------------------------------------------------------------------------- /l10n/lt_LT.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Action does not exist or is disabled." : "Veiksmo nėra arba jis išjungtas.", 3 | "Title is empty." : "Pavadinimas yra tuščias.", 4 | "A script already exists with this title." : "Scenarijus šiuo pavadinimu jau yra.", 5 | "Enabled" : "Įjungta", 6 | "Disabled" : "Išjungta", 7 | "Edit" : "Taisyti", 8 | "Delete" : "Ištrinti", 9 | "Text" : "Tekstas", 10 | "Checkbox" : "Žymimasis langelis", 11 | "Back" : "Atgal", 12 | "Save" : "Įrašyti", 13 | "Saved" : "Įrašyta", 14 | "Script name" : "Scenarijaus pavadinimas", 15 | "A short description of what this action will do …" : "Trumpas aprašas to, ką darys šis veiksmas…", 16 | "Enable script" : "Įjungti scenarijų", 17 | "Limit to groups" : "Apriboti iki grupių", 18 | "Unknown error" : "Nežinoma klaida", 19 | "Action completed!" : "Veiksmas įvykdytas!", 20 | "Action failed unexpectedly." : "Veiksmas netikėtai patyrė nesėkmę.", 21 | "New action" : "Naujas veiksmas", 22 | "More actions" : "Daugiau veiksmų" 23 | },"pluralForm" :"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);" 24 | } -------------------------------------------------------------------------------- /l10n/lv.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Iespējots", 5 | "Disabled" : "Atspējots", 6 | "Edit" : "Labot", 7 | "Duplicate" : "Pavairot", 8 | "Delete" : "Izdzēst", 9 | "Text" : "Teksts", 10 | "Back" : "Atpakaļ", 11 | "Save" : "Saglabāt", 12 | "Saved" : "Saglabāts", 13 | "Limit to groups" : "Grupu ierobežojums", 14 | "Unknown error" : "Nezināma kļūda", 15 | "Failed to delete the script." : "Neizdevās izdzēst skriptu" 16 | }, 17 | "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"); 18 | -------------------------------------------------------------------------------- /l10n/lv.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Iespējots", 3 | "Disabled" : "Atspējots", 4 | "Edit" : "Labot", 5 | "Duplicate" : "Pavairot", 6 | "Delete" : "Izdzēst", 7 | "Text" : "Teksts", 8 | "Back" : "Atpakaļ", 9 | "Save" : "Saglabāt", 10 | "Saved" : "Saglabāts", 11 | "Limit to groups" : "Grupu ierobežojums", 12 | "Unknown error" : "Nezināma kļūda", 13 | "Failed to delete the script." : "Neizdevās izdzēst skriptu" 14 | },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" 15 | } -------------------------------------------------------------------------------- /l10n/mn.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Идэвхижүүлэх", 5 | "Disabled" : "идэвхигүй", 6 | "Edit" : "засварлах", 7 | "Delete" : "Устгах", 8 | "Back" : "буцах", 9 | "Save" : "Хадгалах", 10 | "Saved" : "Хадгалах", 11 | "Unknown error" : "үл мэдэгдэх алдаа" 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /l10n/mn.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Идэвхижүүлэх", 3 | "Disabled" : "идэвхигүй", 4 | "Edit" : "засварлах", 5 | "Delete" : "Устгах", 6 | "Back" : "буцах", 7 | "Save" : "Хадгалах", 8 | "Saved" : "Хадгалах", 9 | "Unknown error" : "үл мэдэгдэх алдаа" 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /l10n/ms_MY.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Edit" : "Sunting", 5 | "Delete" : "Padam", 6 | "Back" : "Kembali", 7 | "Save" : "Simpan", 8 | "Saved" : "Disimpan" 9 | }, 10 | "nplurals=1; plural=0;"); 11 | -------------------------------------------------------------------------------- /l10n/ms_MY.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Edit" : "Sunting", 3 | "Delete" : "Padam", 4 | "Back" : "Kembali", 5 | "Save" : "Simpan", 6 | "Saved" : "Disimpan" 7 | },"pluralForm" :"nplurals=1; plural=0;" 8 | } -------------------------------------------------------------------------------- /l10n/nl.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Action does not exist or is disabled." : "Actie bestaat niet of is uitgeschakeld.", 5 | "File actions" : "Bestandsacties", 6 | "Title is empty." : "Titel is leeg.", 7 | "Enabled" : "Ingeschakeld", 8 | "Disabled" : "Uitgeschakeld", 9 | "Edit" : "Bewerk", 10 | "Duplicate" : "Duplicaat", 11 | "Delete" : "Verwijder", 12 | "Text" : "Tekst", 13 | "Checkbox" : "Aanvinkvakje", 14 | "Back" : "Terug", 15 | "Save" : "Opslaan", 16 | "Saved" : "Opgeslagen", 17 | "An error occurred during saving" : "Er trad een fout op bij het opslaan", 18 | "Limit to groups" : "Beperk tot groepen", 19 | "Unknown error" : "Onbekende fout", 20 | "Action completed!" : "Actie gereed!", 21 | "New action" : "Nieuwe actie", 22 | "More actions" : "Meer acties" 23 | }, 24 | "nplurals=2; plural=(n != 1);"); 25 | -------------------------------------------------------------------------------- /l10n/nl.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Action does not exist or is disabled." : "Actie bestaat niet of is uitgeschakeld.", 3 | "File actions" : "Bestandsacties", 4 | "Title is empty." : "Titel is leeg.", 5 | "Enabled" : "Ingeschakeld", 6 | "Disabled" : "Uitgeschakeld", 7 | "Edit" : "Bewerk", 8 | "Duplicate" : "Duplicaat", 9 | "Delete" : "Verwijder", 10 | "Text" : "Tekst", 11 | "Checkbox" : "Aanvinkvakje", 12 | "Back" : "Terug", 13 | "Save" : "Opslaan", 14 | "Saved" : "Opgeslagen", 15 | "An error occurred during saving" : "Er trad een fout op bij het opslaan", 16 | "Limit to groups" : "Beperk tot groepen", 17 | "Unknown error" : "Onbekende fout", 18 | "Action completed!" : "Actie gereed!", 19 | "New action" : "Nieuwe actie", 20 | "More actions" : "Meer acties" 21 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 22 | } -------------------------------------------------------------------------------- /l10n/nn_NO.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Aktivert", 5 | "Disabled" : "Deaktivert", 6 | "Edit" : "Rediger", 7 | "Delete" : "Slett", 8 | "Checkbox" : "Avkryssingsfelt", 9 | "Back" : "Tilbake", 10 | "Save" : "Lagre", 11 | "Saved" : "Lagra", 12 | "Unknown error" : "Ukjend feil" 13 | }, 14 | "nplurals=2; plural=(n != 1);"); 15 | -------------------------------------------------------------------------------- /l10n/nn_NO.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Aktivert", 3 | "Disabled" : "Deaktivert", 4 | "Edit" : "Rediger", 5 | "Delete" : "Slett", 6 | "Checkbox" : "Avkryssingsfelt", 7 | "Back" : "Tilbake", 8 | "Save" : "Lagre", 9 | "Saved" : "Lagra", 10 | "Unknown error" : "Ukjend feil" 11 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 12 | } -------------------------------------------------------------------------------- /l10n/oc.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Activada", 5 | "Disabled" : "Desactivat", 6 | "Edit" : "Modificar", 7 | "Delete" : "Suprimir", 8 | "Text" : "Tèxt", 9 | "Back" : "Retorn", 10 | "Save" : "Enregistrar", 11 | "Saved" : "Enregistrat", 12 | "Limit to groups" : "Limitar als grops", 13 | "Unknown error" : "Error desconeguda", 14 | "More actions" : "Mai d’accions" 15 | }, 16 | "nplurals=2; plural=(n > 1);"); 17 | -------------------------------------------------------------------------------- /l10n/oc.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Activada", 3 | "Disabled" : "Desactivat", 4 | "Edit" : "Modificar", 5 | "Delete" : "Suprimir", 6 | "Text" : "Tèxt", 7 | "Back" : "Retorn", 8 | "Save" : "Enregistrar", 9 | "Saved" : "Enregistrat", 10 | "Limit to groups" : "Limitar als grops", 11 | "Unknown error" : "Error desconeguda", 12 | "More actions" : "Mai d’accions" 13 | },"pluralForm" :"nplurals=2; plural=(n > 1);" 14 | } -------------------------------------------------------------------------------- /l10n/pt_PT.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "An error occurred when saving the action." : "Ocorreu um erro na gravação da ação.", 5 | "Action does not exist or is disabled." : "Ação não existe ou está desabilitada.", 6 | "Failed to create the action variables." : "Erro na criação das variáveis da ação.", 7 | "Lua extension not installed on the server." : "A extensão \"Lua\" não está instalada no servidor.", 8 | "File actions" : "Ações sobre ficheiros", 9 | "An unexpected error occurred when running the action." : "Um erro não esperado ocorreu aquando da execução da ação.", 10 | "Title is empty." : "O assunto não está preenchido.", 11 | "A script already exists with this title." : "Já existe uma script com esse assunto.", 12 | "Enabled" : "Ativado", 13 | "Disabled" : "Desativado", 14 | "Edit" : "Editar", 15 | "Delete" : "Apagar", 16 | "Text" : "Texto", 17 | "Checkbox" : "Caixa de seleção", 18 | "Back" : "Anterior", 19 | "Variable name" : "Nome da variável", 20 | "Save" : "Guardar", 21 | "User inputs" : "Escolhas do utilizador", 22 | "Saved" : "Guardado", 23 | "An error occurred during saving" : "Ocorreu um erro durante a gravação", 24 | "Script name" : "Nome da script", 25 | "Enable script" : "Ativar a script", 26 | "Limit to groups" : "Limitado a grupos", 27 | "Unknown error" : "Erro desconhecido", 28 | "Select an action to perform" : "Escolha uma ação a executar", 29 | "Action completed!" : "Execução concluída!", 30 | "Action failed unexpectedly." : "Execução falhou subitamente.", 31 | "Select action to perform" : "Escolha a ação a executar", 32 | "Execute" : "Executar", 33 | "New action" : "Nova ação", 34 | "More actions" : "Mais ações" 35 | }, 36 | "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 37 | -------------------------------------------------------------------------------- /l10n/pt_PT.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "An error occurred when saving the action." : "Ocorreu um erro na gravação da ação.", 3 | "Action does not exist or is disabled." : "Ação não existe ou está desabilitada.", 4 | "Failed to create the action variables." : "Erro na criação das variáveis da ação.", 5 | "Lua extension not installed on the server." : "A extensão \"Lua\" não está instalada no servidor.", 6 | "File actions" : "Ações sobre ficheiros", 7 | "An unexpected error occurred when running the action." : "Um erro não esperado ocorreu aquando da execução da ação.", 8 | "Title is empty." : "O assunto não está preenchido.", 9 | "A script already exists with this title." : "Já existe uma script com esse assunto.", 10 | "Enabled" : "Ativado", 11 | "Disabled" : "Desativado", 12 | "Edit" : "Editar", 13 | "Delete" : "Apagar", 14 | "Text" : "Texto", 15 | "Checkbox" : "Caixa de seleção", 16 | "Back" : "Anterior", 17 | "Variable name" : "Nome da variável", 18 | "Save" : "Guardar", 19 | "User inputs" : "Escolhas do utilizador", 20 | "Saved" : "Guardado", 21 | "An error occurred during saving" : "Ocorreu um erro durante a gravação", 22 | "Script name" : "Nome da script", 23 | "Enable script" : "Ativar a script", 24 | "Limit to groups" : "Limitado a grupos", 25 | "Unknown error" : "Erro desconhecido", 26 | "Select an action to perform" : "Escolha uma ação a executar", 27 | "Action completed!" : "Execução concluída!", 28 | "Action failed unexpectedly." : "Execução falhou subitamente.", 29 | "Select action to perform" : "Escolha a ação a executar", 30 | "Execute" : "Executar", 31 | "New action" : "Nova ação", 32 | "More actions" : "Mais ações" 33 | },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 34 | } -------------------------------------------------------------------------------- /l10n/ro.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Activat", 5 | "Disabled" : "Dezactivați", 6 | "Edit" : "Editează", 7 | "Duplicate" : "Duplicat", 8 | "Delete" : "Șterge", 9 | "Text" : "Text", 10 | "Checkbox" : "Căsuța de bifat", 11 | "Back" : "Înapoi", 12 | "Save" : "Salvează", 13 | "Saved" : "Salvat", 14 | "Limit to groups" : "Limitează pentru grupuri", 15 | "Unknown error" : "Eroare necunoscută", 16 | "More actions" : "Mai multe acțiuni" 17 | }, 18 | "nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"); 19 | -------------------------------------------------------------------------------- /l10n/ro.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Activat", 3 | "Disabled" : "Dezactivați", 4 | "Edit" : "Editează", 5 | "Duplicate" : "Duplicat", 6 | "Delete" : "Șterge", 7 | "Text" : "Text", 8 | "Checkbox" : "Căsuța de bifat", 9 | "Back" : "Înapoi", 10 | "Save" : "Salvează", 11 | "Saved" : "Salvat", 12 | "Limit to groups" : "Limitează pentru grupuri", 13 | "Unknown error" : "Eroare necunoscută", 14 | "More actions" : "Mai multe acțiuni" 15 | },"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));" 16 | } -------------------------------------------------------------------------------- /l10n/sc.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Ativadu", 5 | "Disabled" : "Disativadu", 6 | "Edit" : "Modìfica", 7 | "Delete" : "Cantzella", 8 | "Text" : "Testu", 9 | "Checkbox" : "Casella de seletzione", 10 | "Back" : "In segus", 11 | "Save" : "Sarva", 12 | "Saved" : "Sarvadu", 13 | "Limit to groups" : "Lìmita a grupos", 14 | "Unknown error" : "Errore disconnotu", 15 | "New action" : "Atzione noa", 16 | "More actions" : "Àteras atziones" 17 | }, 18 | "nplurals=2; plural=(n != 1);"); 19 | -------------------------------------------------------------------------------- /l10n/sc.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Ativadu", 3 | "Disabled" : "Disativadu", 4 | "Edit" : "Modìfica", 5 | "Delete" : "Cantzella", 6 | "Text" : "Testu", 7 | "Checkbox" : "Casella de seletzione", 8 | "Back" : "In segus", 9 | "Save" : "Sarva", 10 | "Saved" : "Sarvadu", 11 | "Limit to groups" : "Lìmita a grupos", 12 | "Unknown error" : "Errore disconnotu", 13 | "New action" : "Atzione noa", 14 | "More actions" : "Àteras atziones" 15 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 16 | } -------------------------------------------------------------------------------- /l10n/si.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "සබල කර ඇත", 5 | "Disabled" : "අබල කර ඇත", 6 | "Edit" : "සංස්කරණය", 7 | "Back" : "ආපසු", 8 | "Save" : "සුරකින්න", 9 | "Unknown error" : "නොදන්නා දෝෂයකි" 10 | }, 11 | "nplurals=2; plural=(n != 1);"); 12 | -------------------------------------------------------------------------------- /l10n/si.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "සබල කර ඇත", 3 | "Disabled" : "අබල කර ඇත", 4 | "Edit" : "සංස්කරණය", 5 | "Back" : "ආපසු", 6 | "Save" : "සුරකින්න", 7 | "Unknown error" : "නොදන්නා දෝෂයකි" 8 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 9 | } -------------------------------------------------------------------------------- /l10n/sl.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Lua extension not installed on the server." : "Razširitev Lua na strežniku ni nameščena.", 5 | "Enabled" : "Omogočeno", 6 | "Disabled" : "Onemogočeno", 7 | "Edit" : "Uredi", 8 | "Duplicate" : "Podvoji", 9 | "Delete" : "Izbriši", 10 | "Text" : "Besedilo", 11 | "Checkbox" : "Izbirno polje", 12 | "Back" : "Nazaj", 13 | "Save" : "Shrani", 14 | "Saved" : "Shranjeno", 15 | "Allow on public shares" : "Dovoli na javnih mestih souporabe", 16 | "Limit to groups" : "Omeji na skupine", 17 | "Unknown error" : "Neznana napaka", 18 | "More actions" : "Več dejanj" 19 | }, 20 | "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"); 21 | -------------------------------------------------------------------------------- /l10n/sl.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Lua extension not installed on the server." : "Razširitev Lua na strežniku ni nameščena.", 3 | "Enabled" : "Omogočeno", 4 | "Disabled" : "Onemogočeno", 5 | "Edit" : "Uredi", 6 | "Duplicate" : "Podvoji", 7 | "Delete" : "Izbriši", 8 | "Text" : "Besedilo", 9 | "Checkbox" : "Izbirno polje", 10 | "Back" : "Nazaj", 11 | "Save" : "Shrani", 12 | "Saved" : "Shranjeno", 13 | "Allow on public shares" : "Dovoli na javnih mestih souporabe", 14 | "Limit to groups" : "Omeji na skupine", 15 | "Unknown error" : "Neznana napaka", 16 | "More actions" : "Več dejanj" 17 | },"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);" 18 | } -------------------------------------------------------------------------------- /l10n/sq.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "I aktivizuar", 5 | "Disabled" : "I çaktivizuar", 6 | "Edit" : "Përpuno", 7 | "Delete" : "Fshi", 8 | "Text" : "Tekst", 9 | "Checkbox" : "Checkbox", 10 | "Back" : "Prapa", 11 | "Save" : "Ruaj", 12 | "Saved" : "Ruajtur", 13 | "Limit to groups" : "Kufizo grupet", 14 | "Unknown error" : "Gabim i panjohur", 15 | "More actions" : "Më tepër veprime " 16 | }, 17 | "nplurals=2; plural=(n != 1);"); 18 | -------------------------------------------------------------------------------- /l10n/sq.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "I aktivizuar", 3 | "Disabled" : "I çaktivizuar", 4 | "Edit" : "Përpuno", 5 | "Delete" : "Fshi", 6 | "Text" : "Tekst", 7 | "Checkbox" : "Checkbox", 8 | "Back" : "Prapa", 9 | "Save" : "Ruaj", 10 | "Saved" : "Ruajtur", 11 | "Limit to groups" : "Kufizo grupet", 12 | "Unknown error" : "Gabim i panjohur", 13 | "More actions" : "Më tepër veprime " 14 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 15 | } -------------------------------------------------------------------------------- /l10n/sr@latin.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Edit" : "Izmeni", 5 | "Delete" : "Obriši", 6 | "Checkbox" : "Štikliranje", 7 | "Back" : "Nazad", 8 | "Save" : "Sačuvaj", 9 | "Unknown error" : "Nepoznata greška" 10 | }, 11 | "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); 12 | -------------------------------------------------------------------------------- /l10n/sr@latin.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Edit" : "Izmeni", 3 | "Delete" : "Obriši", 4 | "Checkbox" : "Štikliranje", 5 | "Back" : "Nazad", 6 | "Save" : "Sačuvaj", 7 | "Unknown error" : "Nepoznata greška" 8 | },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" 9 | } -------------------------------------------------------------------------------- /l10n/ta.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Edit" : "தொகுக்க", 5 | "Delete" : "நீக்குக", 6 | "Back" : "பின்னுக்கு", 7 | "Save" : "சேமிக்க " 8 | }, 9 | "nplurals=2; plural=(n != 1);"); 10 | -------------------------------------------------------------------------------- /l10n/ta.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Edit" : "தொகுக்க", 3 | "Delete" : "நீக்குக", 4 | "Back" : "பின்னுக்கு", 5 | "Save" : "சேமிக்க " 6 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 7 | } -------------------------------------------------------------------------------- /l10n/th.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "เปิดใช้งาน", 5 | "Disabled" : "ปิดใช้งาน", 6 | "Edit" : "แก้ไข", 7 | "Delete" : "ลบ", 8 | "Text" : "ข้อความ", 9 | "Checkbox" : "กล่องกาเครื่องหมาย", 10 | "Back" : "ย้อนกลับ", 11 | "Save" : "บันทึก", 12 | "Saved" : "บันทึกแล้ว", 13 | "Unknown error" : "ข้อผิดพลาดที่ไม่รู้จัก" 14 | }, 15 | "nplurals=1; plural=0;"); 16 | -------------------------------------------------------------------------------- /l10n/th.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "เปิดใช้งาน", 3 | "Disabled" : "ปิดใช้งาน", 4 | "Edit" : "แก้ไข", 5 | "Delete" : "ลบ", 6 | "Text" : "ข้อความ", 7 | "Checkbox" : "กล่องกาเครื่องหมาย", 8 | "Back" : "ย้อนกลับ", 9 | "Save" : "บันทึก", 10 | "Saved" : "บันทึกแล้ว", 11 | "Unknown error" : "ข้อผิดพลาดที่ไม่รู้จัก" 12 | },"pluralForm" :"nplurals=1; plural=0;" 13 | } -------------------------------------------------------------------------------- /l10n/tk.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Edit" : "Redaktirläň", 5 | "Delete" : "Pozmak", 6 | "Checkbox" : "Bellik gutusy", 7 | "Back" : "Yzyna", 8 | "Save" : "Saklamak", 9 | "Unknown error" : "Näbelli ýalňyşlyk" 10 | }, 11 | "nplurals=2; plural=(n != 1);"); 12 | -------------------------------------------------------------------------------- /l10n/tk.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Edit" : "Redaktirläň", 3 | "Delete" : "Pozmak", 4 | "Checkbox" : "Bellik gutusy", 5 | "Back" : "Yzyna", 6 | "Save" : "Saklamak", 7 | "Unknown error" : "Näbelli ýalňyşlyk" 8 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 9 | } -------------------------------------------------------------------------------- /l10n/ur_PK.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Edit" : "تدوین کریں", 5 | "Delete" : "حذف کریں", 6 | "Save" : "حفظ", 7 | "Unknown error" : "غیر معروف خرابی" 8 | }, 9 | "nplurals=2; plural=(n != 1);"); 10 | -------------------------------------------------------------------------------- /l10n/ur_PK.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Edit" : "تدوین کریں", 3 | "Delete" : "حذف کریں", 4 | "Save" : "حفظ", 5 | "Unknown error" : "غیر معروف خرابی" 6 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 7 | } -------------------------------------------------------------------------------- /l10n/uz.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Edit" : "Tahrirlash", 5 | "Duplicate" : "Nusxa", 6 | "Delete" : "Delete", 7 | "Text" : "Matn", 8 | "Checkbox" : "Belgilash katagi", 9 | "Back" : "Orqaga", 10 | "Save" : "Save", 11 | "Saved" : "Saved", 12 | "Unknown error" : "Unknown error", 13 | "More actions" : "Ko'proq harakatlar" 14 | }, 15 | "nplurals=1; plural=0;"); 16 | -------------------------------------------------------------------------------- /l10n/uz.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Edit" : "Tahrirlash", 3 | "Duplicate" : "Nusxa", 4 | "Delete" : "Delete", 5 | "Text" : "Matn", 6 | "Checkbox" : "Belgilash katagi", 7 | "Back" : "Orqaga", 8 | "Save" : "Save", 9 | "Saved" : "Saved", 10 | "Unknown error" : "Unknown error", 11 | "More actions" : "Ko'proq harakatlar" 12 | },"pluralForm" :"nplurals=1; plural=0;" 13 | } -------------------------------------------------------------------------------- /l10n/vi.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "Đá kích hoạt", 5 | "Disabled" : "Đã vô hiệu", 6 | "Edit" : "Chỉnh sửa", 7 | "Delete" : "Xóa", 8 | "Text" : "Văn bản", 9 | "Checkbox" : "Hộp chọn", 10 | "Back" : "Quay lại", 11 | "Save" : "Lưu", 12 | "Saved" : "Đã lưu", 13 | "Limit to groups" : "Giới hạn nhóm", 14 | "Unknown error" : "Lỗi không xác định", 15 | "More actions" : "Nhiều hành động hơn" 16 | }, 17 | "nplurals=1; plural=0;"); 18 | -------------------------------------------------------------------------------- /l10n/vi.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "Đá kích hoạt", 3 | "Disabled" : "Đã vô hiệu", 4 | "Edit" : "Chỉnh sửa", 5 | "Delete" : "Xóa", 6 | "Text" : "Văn bản", 7 | "Checkbox" : "Hộp chọn", 8 | "Back" : "Quay lại", 9 | "Save" : "Lưu", 10 | "Saved" : "Đã lưu", 11 | "Limit to groups" : "Giới hạn nhóm", 12 | "Unknown error" : "Lỗi không xác định", 13 | "More actions" : "Nhiều hành động hơn" 14 | },"pluralForm" :"nplurals=1; plural=0;" 15 | } -------------------------------------------------------------------------------- /l10n/zh_CN.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_scripts", 3 | { 4 | "Enabled" : "已启用", 5 | "Disabled" : "已禁用", 6 | "Edit" : "编辑", 7 | "Duplicate" : "重复", 8 | "Delete" : "删除", 9 | "Text" : "文本 ", 10 | "Checkbox" : "复选框", 11 | "Back" : "返回", 12 | "Save" : "保存", 13 | "Saved" : "已保存", 14 | "A short description of what this action will do …" : "简短描述此动作能做些什么……", 15 | "Limit to groups" : "限制于分组", 16 | "Unknown error" : "未知错误", 17 | "New action" : "新操作", 18 | "More actions" : "更多操作 " 19 | }, 20 | "nplurals=1; plural=0;"); 21 | -------------------------------------------------------------------------------- /l10n/zh_CN.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Enabled" : "已启用", 3 | "Disabled" : "已禁用", 4 | "Edit" : "编辑", 5 | "Duplicate" : "重复", 6 | "Delete" : "删除", 7 | "Text" : "文本 ", 8 | "Checkbox" : "复选框", 9 | "Back" : "返回", 10 | "Save" : "保存", 11 | "Saved" : "已保存", 12 | "A short description of what this action will do …" : "简短描述此动作能做些什么……", 13 | "Limit to groups" : "限制于分组", 14 | "Unknown error" : "未知错误", 15 | "New action" : "新操作", 16 | "More actions" : "更多操作 " 17 | },"pluralForm" :"nplurals=1; plural=0;" 18 | } -------------------------------------------------------------------------------- /lib/Command/ListScripts.php: -------------------------------------------------------------------------------- 1 | scriptMapper = $scriptMapper; 17 | } 18 | 19 | protected function configure(): void { 20 | $this->setDescription('Lists all file actions'); 21 | parent::configure(); 22 | } 23 | 24 | protected function execute(InputInterface $input, OutputInterface $output) { 25 | $output->writeln('Listing file actions:'); 26 | $scripts = $this->scriptMapper->findAll(); 27 | 28 | $output->writeln("id\tname"); 29 | foreach ($scripts as $script) { 30 | $output->writeln($script->getId() . "\t" . $script->getTitle() ); 31 | } 32 | return 0; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lib/Controller/SettingsController.php: -------------------------------------------------------------------------------- 1 | config = $config; 22 | } 23 | 24 | public function index(): Response { 25 | return new JSONResponse([], Http::STATUS_NOT_IMPLEMENTED); 26 | } 27 | 28 | public function modify(string $name, string $value): Response { 29 | if (!in_array($value, ['true', 'false'], true)) { 30 | return new JSONResponse(['error' => 'Value can only be true or false'], Http::STATUS_BAD_REQUEST); 31 | } 32 | 33 | $success = new JSONResponse([], Http::STATUS_OK); 34 | switch ($name) { 35 | case Application::APP_CONFIG_USE_PHP_INTERPRETER: 36 | $this->config->setAppValue(Application::APP_ID, Application::APP_CONFIG_USE_PHP_INTERPRETER, $value); 37 | return $success; 38 | default: 39 | return new JSONResponse(['error' => 'Unknown option with name: ' . $name], Http::STATUS_BAD_REQUEST); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /lib/Db/ScriptInputMapper.php: -------------------------------------------------------------------------------- 1 | deleteBy('script_id', $scriptId); 23 | } 24 | 25 | /** 26 | * @return ScriptInput[] 27 | */ 28 | public function findAllByScriptId(int $scriptId): array { 29 | return $this->findAllBy('script_id', $scriptId); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /lib/Db/ScriptMapper.php: -------------------------------------------------------------------------------- 1 | scriptInputMapper = $scriptInputMapper; 22 | } 23 | 24 | public function findByTitle(string $title): ?Script { 25 | $title = trim($title); 26 | try { 27 | return $this->findBy('title', $title); 28 | } catch (MultipleObjectsReturnedException $e) { 29 | return $this->findAllBy('title', $title)[0] ?? null; 30 | } 31 | } 32 | 33 | /** 34 | * @return Script[] 35 | */ 36 | public function findAllStripProgram(): array { 37 | return array_map( 38 | static function (Script $script): Script { 39 | $script->setProgram(""); 40 | return $script; 41 | }, $this->findAll() 42 | ); 43 | } 44 | 45 | /** 46 | * @param Script $entity 47 | * @throws Exception 48 | */ 49 | public function delete($entity): Entity { 50 | $this->scriptInputMapper->deleteByScriptId($entity->getId()); 51 | return parent::delete($entity); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /lib/Event/RegisterScriptFunctionsEvent.php: -------------------------------------------------------------------------------- 1 | functionProviders = []; 14 | } 15 | 16 | public function registerFunctions(IFunctionProvider $functionProvider): void { 17 | $this->functionProviders[] = $functionProvider; 18 | } 19 | 20 | public function getFunctions(): iterable { 21 | foreach ($this->functionProviders as $functionProvider) { 22 | if (false === $functionProvider->isRegistrable()) { 23 | continue; 24 | } 25 | 26 | foreach ($functionProvider->getFunctions() as $function) { 27 | yield $function; 28 | } 29 | } 30 | } 31 | 32 | public function isRegistrable(): bool { 33 | return true; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lib/Interpreter/AbortException.php: -------------------------------------------------------------------------------- 1 | getNode($this->getPath($node)); 22 | if (false === $folder instanceof Folder) { 23 | return []; 24 | } 25 | 26 | try { 27 | $items = $folder->getDirectoryListing(); 28 | } catch (NotFoundException $e) { 29 | return []; 30 | } 31 | 32 | $nodes = []; 33 | $n = 1; 34 | foreach ($items as $item) { 35 | if ($this->filterType($item, $filterType)) { 36 | $nodes[$n++] = $this->getNodeData($item); 37 | } 38 | } 39 | 40 | return $nodes; 41 | } 42 | 43 | private function filterType($item, $filterType): bool { 44 | if ($filterType === 'file') { 45 | return $item instanceof File; 46 | } 47 | 48 | if ($filterType === 'folder') { 49 | return $item instanceof Folder; 50 | } 51 | 52 | return true; // unknown filter 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Files/Exists.php: -------------------------------------------------------------------------------- 1 | getPath($node); 20 | if ($fileName === null) { 21 | return $this->getHomeFolder()->nodeExists($path); 22 | } 23 | 24 | $folderNode = $this->getFolder($path); 25 | if (!$folderNode) { 26 | return false; 27 | } 28 | 29 | return $folderNode->nodeExists($fileName); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Files/Exists_Unsafe.php: -------------------------------------------------------------------------------- 1 | root = $root; 19 | } 20 | 21 | public function run($path = null): bool { 22 | if (!$path) { 23 | return false; 24 | } 25 | 26 | return $this->root->nodeExists($path); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Files/File_Content.php: -------------------------------------------------------------------------------- 1 | getFile($this->getPath($node)); 17 | if (!$node) { 18 | return null; 19 | } 20 | 21 | try { 22 | return $node->getContent(); 23 | } catch (LockedException|NotPermittedException $e) { 24 | return null; 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Files/File_Copy.php: -------------------------------------------------------------------------------- 1 | getNode($this->getPath($file)); 22 | $folderNode = $this->getFolder($folderPath); 23 | if (!$fileNode || !$folderNode) { 24 | return null; 25 | } 26 | 27 | $newName = $name ?: $fileNode->getName(); 28 | if ($folderNode->nodeExists($newName)) { 29 | return null; 30 | } 31 | 32 | return parent::run($file, $folderNode->getPath(), $name); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Files/File_Copy_Unsafe.php: -------------------------------------------------------------------------------- 1 | getNode($this->getPath($file)); 28 | if (!$fileNode) { 29 | return null; 30 | } 31 | 32 | $name = $name ?: $fileNode->getName(); 33 | $path = $folderPath . '/' . $name; 34 | 35 | try { 36 | $newFile = $fileNode->copy($path); 37 | return $this->getNodeData($newFile); 38 | } catch (\Exception $exception) { 39 | return null; 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Files/File_Delete_Unsafe.php: -------------------------------------------------------------------------------- 1 | root = $root; 22 | } 23 | 24 | public function run($path = null, $successIfNotFound = true): bool { 25 | try { 26 | $file = $this->root->get($path); 27 | } catch (\Exception|\Throwable $e) { 28 | $file = null; 29 | } 30 | 31 | if (!$file) { 32 | return (bool) $successIfNotFound; 33 | } 34 | 35 | try { 36 | $file->delete(); 37 | } catch (Exception $e) { 38 | return false; 39 | } 40 | return true; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Files/File_Unlock.php: -------------------------------------------------------------------------------- 1 | getNode($this->getPath($node)); 22 | } catch (\Throwable $e) { 23 | } 24 | 25 | if (!$file) { 26 | return (bool) $successIfNotFound; 27 | } 28 | 29 | try { 30 | $file->unlock(ILockingProvider::LOCK_SHARED); 31 | $file->unlock(ILockingProvider::LOCK_EXCLUSIVE); 32 | } catch (Exception $e) { 33 | return false; 34 | } 35 | return true; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Files/Full_Path.php: -------------------------------------------------------------------------------- 1 | getNode($this->getPath($node)); 19 | try { 20 | return $node ? $this->getHomeFolder()->getRelativePath($node->getPath()) : null; 21 | } catch (NotFoundException $e) { 22 | return null; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Files/Get_Parent.php: -------------------------------------------------------------------------------- 1 | getNode($this->getPath($node)); 20 | if (!$node) { 21 | return null; 22 | } 23 | try { 24 | if ($node->getId() === $this->getHomeFolder()->getId()) { 25 | $node = $this->getHomeFolder(); 26 | } 27 | } catch (InvalidPathException|NotFoundException $e) { 28 | return null; 29 | } 30 | 31 | return $this->getNodeData($node->getParent()); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Files/Home.php: -------------------------------------------------------------------------------- 1 | getNodeData($this->getHomeFolder()); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Files/Is_File.php: -------------------------------------------------------------------------------- 1 | getNode($this->getPath($node)) instanceof File; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Files/Is_Folder.php: -------------------------------------------------------------------------------- 1 | getNode($this->getPath($node)) instanceof Folder; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Files/New_File.php: -------------------------------------------------------------------------------- 1 | getNode($this->getPath($node)); 18 | if (false === $folder instanceof Folder || !$name) { 19 | return null; 20 | } 21 | 22 | try { 23 | $file = $folder->newFile($name, $content); 24 | return $this->getNodeData($file); 25 | } catch (NotPermittedException $e) { 26 | return null; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Files/New_Folder.php: -------------------------------------------------------------------------------- 1 | getNode($this->getPath($node)); 18 | if (false === $folder instanceof Folder || !$name) { 19 | return null; 20 | } 21 | 22 | try { 23 | $file = $folder->newFolder($name); 24 | return $this->getNodeData($file); 25 | } catch (NotPermittedException $e) { 26 | return null; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Files/NodeSerializerTrait.php: -------------------------------------------------------------------------------- 1 | getId(); 19 | } catch (InvalidPathException|NotFoundException $e) { 20 | $id = null; 21 | } 22 | 23 | $root = $homeFolder; 24 | $path = ''; 25 | $name = '/'; 26 | if ($id !== $root->getId()) { 27 | $path = $root->getRelativePath($node->getParent()->getPath()); 28 | $name = $node->getName(); 29 | } 30 | 31 | return [ 32 | '_type' => 'file', 33 | 'id' => $id, 34 | 'path' => $path, 35 | 'name' => $name, 36 | ]; 37 | } 38 | 39 | private function deserializeNode(array $nodeData, Folder $homeFolder): ?Node { 40 | $type = $nodeData['_type'] ?? ''; 41 | if ($type !== "file" || !isset($nodeData['path'], $nodeData['name'])) { 42 | return null; 43 | } 44 | 45 | $path = ($data['path'] ?? '') . '/' . ($data['name'] ?? ''); 46 | return $this->deserializeNodeFromPath($path, $homeFolder); 47 | } 48 | 49 | /** 50 | * @deprecated 51 | */ 52 | private function deserializeNodeFromPath(string $nodePath, Folder $homeFolder): ?Node { 53 | try { 54 | return $homeFolder->get($nodePath); 55 | } catch (NotFoundException $e) { 56 | return null; 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Files/UnsafeViewOperationTrait.php: -------------------------------------------------------------------------------- 1 | move()` method to evaluate the 16 | * relative paths of the two files. 17 | * 18 | * @see \OC\Files\View::rename 19 | * @see \OC\Files\View::getHookPath 20 | */ 21 | protected function tryUnsafeOperation(callable $operation) { 22 | $defaultInstance = null; 23 | 24 | try { 25 | $class = \OC\Files\Filesystem::class; 26 | $reflection = new ReflectionClass($class); 27 | 28 | $property = $reflection->getProperty("defaultInstance"); 29 | $property->setAccessible(true); 30 | 31 | $defaultInstance = $reflection->getStaticPropertyValue("defaultInstance"); 32 | $reflection->setStaticPropertyValue('defaultInstance', new \OC\Files\View('/')); 33 | 34 | return $operation(); 35 | } catch (\Exception|\Throwable $e) { 36 | return null; 37 | } finally { 38 | // Set the defaultInstance back to the previous value. 39 | isset($reflection) && $reflection->setStaticPropertyValue('defaultInstance', $defaultInstance); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Input/Get_Input.php: -------------------------------------------------------------------------------- 1 | getContext()->getInput() as $input) { 22 | $inputs[$input->getName()] = $this->getRuntimeValue($input); 23 | } 24 | 25 | return $inputName === null 26 | ? $inputs 27 | : $inputs[$inputName] ?? null; 28 | } 29 | 30 | private function getRuntimeValue(ScriptInput $scriptInput) { 31 | $scriptType = $scriptInput->getScriptOptions()['type'] ?? null; 32 | $value = $scriptInput->getValue(); 33 | 34 | switch ($scriptType) { 35 | case 'filepick': 36 | $node = $this->getNode($value); 37 | return $value && $node ? $this->getNodeData($node) : null; 38 | case 'checkbox': 39 | return (bool) $value; 40 | } 41 | 42 | if (is_array($value)) { 43 | return $this->reindex($value); 44 | } 45 | 46 | return (string) $value; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Input/Get_Input_Files.php: -------------------------------------------------------------------------------- 1 | getNodeData($file); 18 | }, 19 | $this->getContext()->getInputFiles() 20 | ); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Media/Ffprobe.php: -------------------------------------------------------------------------------- 1 | getFile($this->getPath($file)); 17 | $localPath = $fileNode ? $fileNode->getStorage()->getLocalFile($fileNode->getInternalPath()) : null; 18 | if (!$localPath) { 19 | return []; 20 | } 21 | 22 | $ffprobe = \FFMpeg\FFProbe::create(); 23 | $ffprobeStream = $ffprobe->streams($localPath) 24 | ->videos() 25 | ->first(); 26 | 27 | if (!$ffprobeStream) { 28 | return []; 29 | } 30 | 31 | return $ffprobeStream->all(); 32 | } catch (Throwable $throwable) { 33 | return null; 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Nextcloud/CommentSerializerTrait.php: -------------------------------------------------------------------------------- 1 | 'comment', 15 | 'id' => $comment->getId(), 16 | 'parent_id' => $comment->getParentId(), 17 | 'object_id' => $comment->getObjectId(), 18 | 'user_id' => $comment->getActorId(), 19 | 'created_at' => $comment->getCreationDateTime()->getTimestamp(), 20 | 'message' => $comment->getMessage(), 21 | ]; 22 | } 23 | 24 | private function deserializeComment(array $commentData, ICommentsManager $commentsManager): ?IComment { 25 | if (!is_array($commentData) || ($commentData["_type"] ?? null) !== "comment") { 26 | return null; 27 | } 28 | 29 | try { 30 | return $commentsManager->get($commentData['id'] ?? -1); 31 | } catch (\Throwable $e) { 32 | return null; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Nextcloud/Comment_Delete.php: -------------------------------------------------------------------------------- 1 | commentsManager = $commentsManager; 20 | } 21 | 22 | public function run($commentData = []): bool { 23 | $comment = $this->deserializeComment($commentData, $this->commentsManager); 24 | 25 | return $comment && $this->commentsManager->delete($comment->getId()); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Nextcloud/EventSerializerTrait.php: -------------------------------------------------------------------------------- 1 | "event", 16 | "id" => $id, 17 | 'app' => $event->getApp(), 18 | 'type' => $event->getType(), 19 | 'affecteduser' => $event->getAffectedUser(), 20 | 'user' => $event->getAuthor(), 21 | 'timestamp' => $event->getTimestamp(), 22 | 'subject' => $event->getParsedSubject(), 23 | 'message' => $event->getParsedMessage(), 24 | 'object_type' => $event->getObjectType(), 25 | 'object_id' => $event->getObjectId(), 26 | 'object_name' => $event->getObjectName(), 27 | 'link' => $event->getLink(), 28 | ]; 29 | } 30 | 31 | private function deserializeEvent($activityData, Data $activityManager): ?IEvent { 32 | if (!is_array($activityData) || ($userData["_type"] ?? null) !== "event") { 33 | return null; 34 | } 35 | 36 | try { 37 | $activity = $activityManager->getById($activityData["id"]); 38 | } catch (\Throwable $e) { 39 | return null; 40 | } 41 | return $activity; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Nextcloud/Get_File_Tags.php: -------------------------------------------------------------------------------- 1 | tagManager = $tagManager; 34 | $this->tagMapper = $tagMapper; 35 | } 36 | 37 | public function run($file=[]): array { 38 | $fileNode = $this->getNode($this->getPath($file)); 39 | 40 | if (!$fileNode ) { 41 | return []; 42 | } 43 | 44 | $mapping = $this->tagMapper->getTagIdsForObjects($fileNode->getId(), 'files'); 45 | if (sizeof($mapping) == 0) { 46 | return []; 47 | } 48 | 49 | $tags = $this->tagManager->getTagsByIds($mapping[$fileNode->getId()]); 50 | $tags = array_values($tags); 51 | return $this->reindex(array_map([$this, 'serializeTag'], $tags)); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Nextcloud/Notify.php: -------------------------------------------------------------------------------- 1 | notificationManager = $notificationManager; 28 | $this->userManager = $userManager; 29 | } 30 | 31 | public function run($userData = [], $subject = '', $message = ''): bool { 32 | $user = is_array($userData) ? $this->deserializeUser($userData, $this->userManager) : ''; 33 | if (!$user) { 34 | return false; 35 | } 36 | 37 | try { 38 | $notification = $this->notificationManager->createNotification() 39 | ->setApp(Application::APP_ID) 40 | ->setUser($user->getUID()) 41 | ->setSubject($subject) 42 | ->setMessage($message) 43 | ->setDateTime(date_create()) 44 | ->setObject('script', time()); 45 | 46 | $this->notificationManager->notify($notification); 47 | } catch (Throwable $e) { 48 | return false; 49 | } 50 | 51 | return true; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Nextcloud/ShareSerializerTrait.php: -------------------------------------------------------------------------------- 1 | 'share', 18 | 'id' => $share->getId(), 19 | 'full_id' => $share->getFullId(), 20 | 'type' => $share->getShareType(), 21 | 'share_owner' => $share->getShareOwner(), 22 | 'shared_by' => $share->getSharedBy(), 23 | 'shared_with' => $share->getSharedWith(), 24 | 'permissions' => $share->getPermissions(), 25 | 'token' => $share->getToken(), 26 | ]; 27 | 28 | try { 29 | $node = $this->serializeNode($share->getNode(), $homeFolder); 30 | $shareData['node'] = $node; 31 | } catch (\Throwable $e) { 32 | } 33 | 34 | return $shareData; 35 | } 36 | 37 | private function deserializeShare(array $shareData, IManager $shareManager): ?IShare { 38 | try { 39 | return $shareManager->getShareById($shareData['full_id'] ?? -1); 40 | } catch (\Throwable $e) { 41 | return null; 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Nextcloud/Share_Delete.php: -------------------------------------------------------------------------------- 1 | shareManager = $shareManager; 20 | } 21 | 22 | public function run($shareData = []): bool{ 23 | $share = $this->deserializeShare($shareData, $this->shareManager); 24 | if ($share === null) { 25 | return false; 26 | } 27 | 28 | try { 29 | $this->shareManager->deleteShare($share); 30 | return true; 31 | } catch (\Throwable $e) { 32 | return false; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Nextcloud/Tag_Create.php: -------------------------------------------------------------------------------- 1 | tagManager = $tagManager; 20 | } 21 | 22 | public function run($name = null, $user_visible = true, $user_assignable = true): ?array { 23 | if (!$name) { 24 | return null; 25 | } 26 | 27 | try { 28 | $tag = $this->tagManager->createTag($name, $user_visible, $user_assignable); 29 | } catch (\Throwable $t) { 30 | return null; 31 | } 32 | 33 | return $this->serializeTag($tag); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Nextcloud/Tag_File.php: -------------------------------------------------------------------------------- 1 | tagManager = $tagManager; 31 | $this->tagMapper = $tagMapper; 32 | } 33 | 34 | public function run($file = [], $tagData = []): bool { 35 | $fileNode = $this->getNode($this->getPath($file)); 36 | $tag = $this->deserializeTag($tagData, $this->tagManager); 37 | if (!$fileNode || !$tag) { 38 | return false; 39 | } 40 | 41 | try { 42 | $this->tagMapper->assignTags($fileNode->getId(), 'files', [$tag->getId()]); 43 | } catch (InvalidPathException|NotFoundException $e) { 44 | return false; 45 | } 46 | 47 | return true; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Nextcloud/Tag_File_Unassign.php: -------------------------------------------------------------------------------- 1 | tagManager = $tagManager; 24 | $this->tagMapper = $tagMapper; 25 | } 26 | 27 | public function run($file = [], $tagData = []): bool { 28 | $fileNode = $this->getNode($this->getPath($file)); 29 | $tag = $this->deserializeTag($tagData, $this->tagManager); 30 | if (!$fileNode || !$tag) { 31 | return false; 32 | } 33 | 34 | try { 35 | $this->tagMapper->unassignTags($fileNode->getId(), 'files', [$tag->getId()]); 36 | } catch (InvalidPathException|NotFoundException $e) { 37 | return false; 38 | } 39 | 40 | return true; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Nextcloud/TagsSerializerTrait.php: -------------------------------------------------------------------------------- 1 | 'tag', 15 | 'id' => $tag->getId(), 16 | 'name' => $tag->getName(), 17 | 'user_assignable' => $tag->isUserAssignable(), 18 | 'user_visible' => $tag->isUserVisible(), 19 | 'access_level' => $tag->getAccessLevel() 20 | ]; 21 | } 22 | 23 | private function deserializeTag(array $tagData, ISystemTagManager $tagManager): ?Tag { 24 | if (!is_array($tagData) || ($tagData["_type"] ?? null) !== "tag") { 25 | return null; 26 | } 27 | 28 | try { 29 | $tags = $tagManager->getTagsByIds([$tagData['id'] ?? -1]); 30 | } catch (\Throwable $e) { 31 | return null; 32 | } 33 | return reset($tags) ?: null; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Nextcloud/UserSerializerTrait.php: -------------------------------------------------------------------------------- 1 | 'user', 16 | 'uuid' => $user->getUID(), 17 | 'display_name' => $user->getDisplayName(), 18 | 'email_address' => $user->getEMailAddress(), 19 | ]; 20 | } 21 | 22 | private function deserializeUser($userData, IUserManager $userManager): ?IUser { 23 | if (!is_array($userData) || ($userData["_type"] ?? null) !== "user") { 24 | return null; 25 | } 26 | 27 | try { 28 | $user = $userManager->get($userData['uuid'] ?? ''); 29 | } catch (\Throwable $e) { 30 | return null; 31 | } 32 | return $user; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Nextcloud/Users_Find.php: -------------------------------------------------------------------------------- 1 | userSession = $userSession; 28 | $this->userManager = $userManager; 29 | } 30 | 31 | public function run($name = null, $uuid = null): array { 32 | if ($name === null && $uuid === null) { 33 | $users = [$this->userSession->getUser()]; 34 | } else { 35 | $users = $this->findUsers($name, $uuid); 36 | } 37 | 38 | $users = array_filter(array_values($users)); 39 | return $this->reindex(array_map([$this, 'serializeUser'], $users)); 40 | } 41 | 42 | /** 43 | * @return IUser[] 44 | */ 45 | private function findUsers($name, $uuid): array { 46 | try { 47 | if ($uuid) { 48 | return array_filter([$this->userManager->get($uuid)]); 49 | } 50 | 51 | return $this->userManager->search($name); 52 | } catch (Throwable $e) { 53 | return []; 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Output/Abort.php: -------------------------------------------------------------------------------- 1 | getContext()->addMessage($message, $type); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Output/Clear_Messages.php: -------------------------------------------------------------------------------- 1 | getContext()->clearMessages(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Output/Log.php: -------------------------------------------------------------------------------- 1 | logger = $logger; 21 | } 22 | 23 | public function run($message = '', $level = 1, $context = []) { 24 | $message = (string) $message; 25 | if (strlen($message) <= 0) { 26 | return; 27 | } 28 | 29 | $level = is_int($level) ? $level : 1; 30 | $level = ($level >= 0 && $level <= 4) ? $level : 4; 31 | $context = is_array($context) ? $context : []; 32 | 33 | $this->logger->log($level, $message, $context); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Output/View_Files.php: -------------------------------------------------------------------------------- 1 | getPath($nodeData); 22 | $node = $this->getNode($path); 23 | if ($node === null) { 24 | continue; 25 | } 26 | 27 | $nodes[] = $node; 28 | } 29 | 30 | $this->getContext()->setViewFiles($nodes); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Pdf/CheckDependency.php: -------------------------------------------------------------------------------- 1 | checkDependency(); 22 | $targetFileNode = $this->getFile($this->getPath($targetFile)); 23 | if (!$targetFileNode) { 24 | return null; 25 | } 26 | 27 | try { 28 | $targetPdf = Phpdf::fopen($targetFileNode->fopen('rb')); 29 | 30 | $operation = $password ? new Decrypt($password) : new Decrypt(); 31 | $operation->execute($targetPdf); 32 | 33 | $file = $targetFileNode; 34 | if ($newFileName) { 35 | $file = $targetFileNode->getParent()->newFile($newFileName); 36 | } 37 | $file->putContent(file_get_contents($targetPdf->getPath())); 38 | } catch (Exception $e) { 39 | return null; 40 | } 41 | 42 | return $this->getNodeData($file); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Pdf/Pdf_Merge.php: -------------------------------------------------------------------------------- 1 | checkDependency(); 25 | $fileName = $fileName ?? (time() . '_merged.pdf'); 26 | 27 | $targetFolder = $this->getFolder($this->getPath($folder)); 28 | if (!$targetFolder || $targetFolder->nodeExists($fileName)) { 29 | return null; 30 | } 31 | 32 | try { 33 | $pdfs = []; 34 | foreach ($files as $file) { 35 | $fileNode = $this->getFile($this->getPath($file)); 36 | if (!$fileNode) { 37 | continue; 38 | } 39 | $pdfs[] = Phpdf::fopen($fileNode->fopen('rb')); 40 | } 41 | 42 | $mergedPdf = (new Merge($pdfs))->execute(); 43 | 44 | $file = $targetFolder->newFile($fileName, file_get_contents($mergedPdf->getPath())); 45 | return $this->getNodeData($file); 46 | } catch (NotPermittedException|PhpdfException|LockedException $e) { 47 | return null; 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Pdf/Pdf_Page_Count.php: -------------------------------------------------------------------------------- 1 | checkDependency(); 20 | $targetFileNode = $this->getFile($this->getPath($targetFile)); 21 | if (!$targetFileNode) { 22 | return -1; 23 | } 24 | 25 | $phpdf = Phpdf::fopen($targetFileNode->fopen('r')); 26 | return getPageCount($phpdf); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Pdf/Pdf_Pages.php: -------------------------------------------------------------------------------- 1 | checkDependency(); 24 | $fileName = $fileName ?? (time() . '_trimmed.pdf'); 25 | $fileNode = $this->getNode($this->getPath($file)); 26 | 27 | if (!$fileNode) { 28 | return null; 29 | } 30 | 31 | try { 32 | $pagesPdf = (new Trim($pages))->execute(Phpdf::fopen($fileNode->fopen('rb'))); 33 | $fileOut = $fileNode->getParent()->newFile($fileName, file_get_contents($pagesPdf->getPath())); 34 | return $this->getNodeData($fileOut); 35 | } catch (NotPermittedException|PhpdfException|LockedException $e) { 36 | return null; 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Template/Html_To_Pdf.php: -------------------------------------------------------------------------------- 1 | normaliseArray($vars); 20 | 21 | return (new Mustache_Engine(['entity_flags' => ENT_QUOTES]))->render($template, $vars); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Util/Create_Date_Time.php: -------------------------------------------------------------------------------- 1 | setDate($year, $month, $day); 29 | $date = $date->setTime($hour, $minute, $second); 30 | } 31 | 32 | return $this->packDate($date); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Util/Csv_To_Table.php: -------------------------------------------------------------------------------- 1 | getFile($this->getPath($input)); 25 | $fileStream = $fileNode ? $fileNode->fopen('rb') : null; 26 | } catch (NotPermittedException|LockedException $e) { 27 | return []; 28 | } 29 | 30 | if (!$fileStream) { 31 | return []; 32 | } 33 | 34 | $csvTable = []; 35 | while ($line = fgets($fileStream)) { 36 | $csvTable[] = $this->reindex(str_getcsv($line, $separator, $enclosure)); 37 | } 38 | fclose($fileStream); 39 | return $this->reindex($csvTable); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Util/For_Each.php: -------------------------------------------------------------------------------- 1 | $item) { 31 | $this->getContext()->getLua()->call($function, [$idx, $item]); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Util/Format_Date_Time.php: -------------------------------------------------------------------------------- 1 | unpackDate($date)) ?: ''; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Util/Format_Price.php: -------------------------------------------------------------------------------- 1 | setSymbol(NumberFormatter::CURRENCY_SYMBOL, $symbol); 27 | return $fmt->formatCurrency($value, $currency); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Util/Http_Request.php: -------------------------------------------------------------------------------- 1 | setCurlMethod($curl, $method); 20 | !empty($fields) && curl_setopt($curl, CURLOPT_POSTFIELDS, $fields); 21 | curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 22 | 23 | $response = curl_exec($curl); 24 | curl_close($curl); 25 | 26 | return $response ?: null; 27 | } 28 | 29 | private function setCurlMethod(&$curl, string $method) { 30 | $method = strtoupper(trim($method)); 31 | switch ($method) { 32 | case 'GET': 33 | return; 34 | case 'POST': 35 | curl_setopt($curl, CURLOPT_POST, 1); 36 | return; 37 | case 'PUT': 38 | curl_setopt($curl, CURLOPT_PUT, 1); 39 | return; 40 | } 41 | 42 | curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Util/Json.php: -------------------------------------------------------------------------------- 1 | reindex($decoded) : null; 20 | } 21 | 22 | if (is_array($input)) { 23 | return json_encode($input) ?: null; 24 | } 25 | 26 | return null; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Util/Shell_Command.php: -------------------------------------------------------------------------------- 1 | setCommand($commandInput); 21 | $cmd->execute(); 22 | 23 | return [ 24 | 'exit_code' => $cmd->getExitCode(), 25 | 'output' => $cmd->getOutput(), 26 | 'errors' => $cmd->getStdErr() 27 | ]; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Util/Sort.php: -------------------------------------------------------------------------------- 1 | $e2 : $e2 <=> $e1; 40 | } 41 | ); 42 | 43 | return $this->reindex($items); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /lib/Interpreter/Functions/Util/Wait.php: -------------------------------------------------------------------------------- 1 | getFileContent($file); 31 | if ($lua === null) { 32 | return false; 33 | } 34 | 35 | try { 36 | $this->getContext()->getLua()->eval($lua); 37 | } catch (\Exception|\Throwable $e) { 38 | return false; 39 | } 40 | 41 | return true; 42 | } 43 | 44 | /** 45 | * Get the content from the file. File can be a path or a node array. 46 | * @param array|string $file 47 | * @return string|null 48 | */ 49 | private function getFileContent($file): ?string { 50 | if (is_string($file)) { 51 | return file_get_contents($file) ?: null; 52 | } 53 | 54 | try { 55 | $node = $this->getFile($this->getPath($file)); 56 | if (!$node) { 57 | return null; 58 | } 59 | return $node->getContent(); 60 | } catch (\Exception|\Throwable $exception) { 61 | return null; 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /lib/Interpreter/IFunctionProvider.php: -------------------------------------------------------------------------------- 1 | tempManager = $tempManager; 20 | $this->dispatcher = $dispatcher; 21 | } 22 | 23 | /** 24 | * @throws AbortException - Thrown by registrable functions during $lua->eval() 25 | */ 26 | public function execute(Script $script, Context $context): void { 27 | $this->registerFunctions($context); 28 | 29 | $oldVal = ignore_user_abort(true); 30 | 31 | Phpdf::setTempDirectory($this->tempManager->getTempBaseDir()); 32 | $context->getLua()->eval($script->getProgram()); 33 | 34 | ignore_user_abort($oldVal); 35 | } 36 | 37 | private function registerFunctions(Context $context) { 38 | $functionsEvent = new RegisterScriptFunctionsEvent(); 39 | $this->dispatcher->dispatchTyped($functionsEvent); 40 | 41 | $functions = $functionsEvent->getFunctions(); 42 | foreach ($functions as $function) { 43 | $function->register($context); 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /lib/Interpreter/Lua/LuaInterpreter.php: -------------------------------------------------------------------------------- 1 | interpreter = new Lua(); 11 | } 12 | 13 | public function eval(string $program) { 14 | return $this->interpreter->eval($program); 15 | } 16 | 17 | public function assign(string $key, $value): void { 18 | $this->interpreter->assign($key, $value); 19 | } 20 | 21 | public function call(callable $closure, array $args=[]) { 22 | $this->interpreter->call($closure, $args); 23 | } 24 | 25 | public function registerCallback(string $name, callable $callback): void { 26 | $this->interpreter->registerCallback($name, $callback); 27 | } 28 | 29 | public function getGlobalVariable(string $name) { 30 | return $this->interpreter->eval("return $name") ?: null; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /lib/Interpreter/Lua/LuaProvider.php: -------------------------------------------------------------------------------- 1 | config = $config; 12 | } 13 | 14 | public function createLua(): LuaWrapper { 15 | $usePhpLua = $this->config->getAppValue(Application::APP_ID, Application::APP_CONFIG_USE_PHP_INTERPRETER, 'false') === 'true'; 16 | 17 | if ($usePhpLua) { 18 | return new LuarInterpreter(); 19 | } 20 | 21 | if (!class_exists(\Lua::class)) { 22 | throw new \RuntimeException('No Lua interpreter available.'); 23 | } 24 | 25 | return new LuaInterpreter(); 26 | } 27 | 28 | public function isAvailable(): bool { 29 | $usePhpLua = $this->config->getAppValue(Application::APP_ID, Application::APP_CONFIG_USE_PHP_INTERPRETER, 'false') === 'true'; 30 | return $usePhpLua || self::isLuaPluginAvailable(); 31 | } 32 | 33 | public static function isLuaPluginAvailable(): bool { 34 | return class_exists(\Lua::class); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /lib/Interpreter/Lua/LuaWrapper.php: -------------------------------------------------------------------------------- 1 | interpreter = new Luar(); 11 | } 12 | 13 | public function eval(string $program) { 14 | return $this->interpreter->eval($program); 15 | } 16 | 17 | public function assign(string $key, $value): void { 18 | $this->interpreter->assign($key, $value); 19 | } 20 | 21 | public function call(callable $closure, array $args=[]) { 22 | return $this->interpreter->callLuarClosure($closure, $args); 23 | } 24 | 25 | public function registerCallback(string $name, callable $callback): void { 26 | $this->interpreter->assign($name, $callback); 27 | } 28 | 29 | public function getGlobalVariable(string $name) { 30 | return $this->interpreter->getGlobals()[$name] ?? null; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /lib/Listener/LoadAdditionalListener.php: -------------------------------------------------------------------------------- 1 | config = $config; 25 | $this->initialStateService = $initialStateService; 26 | } 27 | 28 | public function handle(Event $event): void { 29 | if (!($event instanceof LoadAdditionalScriptsEvent)) { 30 | return; 31 | } 32 | 33 | Util::addStyle(Application::APP_ID, 'global'); 34 | Util::addScript(Application::APP_ID, 'files_scripts-main'); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /lib/Listener/RegisterFlowOperationsListener.php: -------------------------------------------------------------------------------- 1 | container = $container; 17 | } 18 | 19 | /** 20 | * @inheritDoc 21 | */ 22 | public function handle(Event $event): void { 23 | if (!$event instanceof RegisterOperationsEvent) { 24 | return; 25 | } 26 | $operation = $this->container->get(Operation::class); 27 | $event->registerOperation($operation); 28 | Util::addScript('files_scripts', 'files_scripts-workflow'); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /lib/Listener/RegisterScriptFunctionListener.php: -------------------------------------------------------------------------------- 1 | functionProvider = $functionProvider; 18 | } 19 | 20 | public function handle(Event $event): void { 21 | if (!($event instanceof RegisterScriptFunctionsEvent)) { 22 | return; 23 | } 24 | 25 | $event->registerFunctions($this->functionProvider); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /lib/Listener/ShareLinkAccessedListener.php: -------------------------------------------------------------------------------- 1 | initialStateService = $initialStateService; 21 | } 22 | public function handle(Event $event): void { 23 | if (!($event instanceof ShareLinkAccessedEvent)) { 24 | return; 25 | } 26 | 27 | Util::addStyle(Application::APP_ID, 'global'); 28 | Util::addScript(Application::APP_ID, 'files_scripts-main'); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /lib/Migration/Version0100Date20220613.php: -------------------------------------------------------------------------------- 1 | hasTable('filescripts')) { 27 | $table = $schema->createTable('filescripts'); 28 | $table->addColumn('id', 'integer', [ 29 | 'autoincrement' => true, 30 | 'notnull' => true, 31 | ]); 32 | $table->addColumn('title', 'string', [ 33 | 'notnull' => true, 34 | 'length' => 200 35 | ]); 36 | $table->addColumn('description', 'string', [ 37 | 'notnull' => true, 38 | 'default' => '', 39 | 'length' => 1000 40 | ]); 41 | $table->addColumn('program', 'text', [ 42 | 'notnull' => true, 43 | 'default' => '' 44 | ]); 45 | $table->addColumn('enabled', 'boolean', [ 46 | 'notnull' => false, 47 | 'default' => false 48 | ]); 49 | $table->addColumn('background', 'boolean', [ 50 | 'notnull' => false, 51 | 'default' => false 52 | ]); 53 | $table->addColumn('request_directory', 'boolean', [ 54 | 'notnull' => false, 55 | 'default' => false 56 | ]); 57 | 58 | $table->setPrimaryKey(['id']); 59 | $table->addIndex(['title'], 'filescripts_title_index'); 60 | } 61 | return $schema; 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /lib/Migration/Version0100Date20220616.php: -------------------------------------------------------------------------------- 1 | hasTable('filescript_inputs')) { 27 | $table = $schema->createTable('filescript_inputs'); 28 | $table->addColumn('id', 'integer', [ 29 | 'autoincrement' => true, 30 | 'notnull' => true, 31 | ]); 32 | $table->addColumn('script_id', 'integer', [ 33 | 'notnull' => true, 34 | ]); 35 | $table->addColumn('name', 'string', [ 36 | 'notnull' => true, 37 | 'length' => 100 38 | ]); 39 | $table->addColumn('description', 'string', [ 40 | 'notnull' => true, 41 | 'length' => 100 42 | ]); 43 | 44 | $table->setPrimaryKey(['id']); 45 | $table->addIndex(['script_id'], 'filescript_script_id_index'); 46 | } 47 | return $schema; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /lib/Migration/Version020100Date20221126.php: -------------------------------------------------------------------------------- 1 | logger = $logger; 20 | } 21 | 22 | /** 23 | * @param IOutput $output 24 | * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` 25 | * @param array $options 26 | * @return ISchemaWrapper 27 | * @throws SchemaException 28 | */ 29 | public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ISchemaWrapper { 30 | /** @var ISchemaWrapper $schema */ 31 | $schema = $schemaClosure(); 32 | 33 | if ($schema->hasTable('filescript_inputs')) { 34 | $table = $schema->getTable('filescript_inputs'); 35 | $table->addColumn('options', 'text', [ 36 | 'notnull' => true, 37 | 'default' => '[]' 38 | ]); 39 | } else { 40 | $this->logger->error('File scripts (Version020100Date20221126) migration failed, because `filescript_inputs` table does not exist.'); 41 | } 42 | return $schema; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /lib/Migration/Version020102Date20230309.php: -------------------------------------------------------------------------------- 1 | logger = $logger; 20 | } 21 | 22 | /** 23 | * @param IOutput $output 24 | * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` 25 | * @param array $options 26 | * @return ISchemaWrapper 27 | * @throws SchemaException 28 | */ 29 | public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ISchemaWrapper { 30 | /** @var ISchemaWrapper $schema */ 31 | $schema = $schemaClosure(); 32 | 33 | if ($schema->hasTable('filescripts')) { 34 | $table = $schema->getTable('filescripts'); 35 | 36 | $table->dropColumn('background'); 37 | $table->addColumn('limit_groups', 'string', [ 38 | 'notnull' => false, 39 | 'default' => '', 40 | 'length' => 1000 41 | ]); 42 | } else { 43 | $this->logger->error('File scripts (Version020102Date20230309) migration failed, because `filescripts` table does not exist.'); 44 | } 45 | return $schema; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /lib/Migration/Version030000Date20230322.php: -------------------------------------------------------------------------------- 1 | logger = $logger; 17 | } 18 | 19 | /** 20 | * @param IOutput $output 21 | * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` 22 | * @param array $options 23 | * @return ISchemaWrapper 24 | * @throws SchemaException 25 | */ 26 | public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ISchemaWrapper { 27 | /** @var ISchemaWrapper $schema */ 28 | $schema = $schemaClosure(); 29 | 30 | if ($schema->hasTable('filescripts')) { 31 | $table = $schema->getTable('filescripts'); 32 | 33 | $table->addColumn('public', 'boolean', [ 34 | 'notnull' => false, 35 | 'default' => false 36 | ]); 37 | } else { 38 | $this->logger->error('File scripts (Version030000Date20230322) migration failed, because `filescripts` table does not exist.'); 39 | } 40 | return $schema; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /lib/Migration/Version030000Date20230323.php: -------------------------------------------------------------------------------- 1 | logger = $logger; 17 | } 18 | 19 | /** 20 | * @param IOutput $output 21 | * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` 22 | * @param array $options 23 | * @return ISchemaWrapper 24 | * @throws SchemaException 25 | */ 26 | public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ISchemaWrapper { 27 | /** @var ISchemaWrapper $schema */ 28 | $schema = $schemaClosure(); 29 | 30 | if ($schema->hasTable('filescripts')) { 31 | $table = $schema->getTable('filescripts'); 32 | 33 | $table->dropColumn('request_directory'); 34 | } else { 35 | $this->logger->error('File scripts (Version030000Date20230323) migration failed, because `filescripts` table does not exist.'); 36 | } 37 | return $schema; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/Migration/Version030000Date20230324.php: -------------------------------------------------------------------------------- 1 | logger = $logger; 17 | } 18 | 19 | /** 20 | * @param IOutput $output 21 | * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` 22 | * @param array $options 23 | * @return ISchemaWrapper 24 | * @throws SchemaException 25 | */ 26 | public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ISchemaWrapper { 27 | /** @var ISchemaWrapper $schema */ 28 | $schema = $schemaClosure(); 29 | 30 | if ($schema->hasTable('filescripts')) { 31 | $table = $schema->getTable('filescripts'); 32 | 33 | $table->addColumn('mimetype', 'string', [ 34 | 'notnull' => false, 35 | 'default' => '', 36 | 'length' => 32 37 | ]); 38 | } else { 39 | $this->logger->error('File scripts (Version030000Date20230324) migration failed, because `filescripts` table does not exist.'); 40 | } 41 | return $schema; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/Migration/Version030100Date20231215.php: -------------------------------------------------------------------------------- 1 | logger = $logger; 20 | } 21 | 22 | /** 23 | * @param IOutput $output 24 | * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` 25 | * @param array $options 26 | * @return ISchemaWrapper 27 | * @throws SchemaException 28 | */ 29 | public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ISchemaWrapper { 30 | /** @var ISchemaWrapper $schema */ 31 | $schema = $schemaClosure(); 32 | 33 | if ($schema->hasTable('filescript_inputs')) { 34 | $table = $schema->getTable('filescript_inputs'); 35 | $optionsCol = $table->getColumn('options'); 36 | 37 | $optionsDefault = $optionsCol->getDefault(); 38 | if ($optionsDefault === null) { 39 | $this->logger->info("Column `options` in `filescript_inputs` has no default, setting it now."); 40 | $optionsCol->setDefault('[]'); 41 | } 42 | } else { 43 | $this->logger->error('File scripts (Version030100Date20231215) migration failed, because `filescript_inputs` table does not exist.'); 44 | } 45 | return $schema; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /lib/Migration/Version040000Date20231217.php: -------------------------------------------------------------------------------- 1 | logger = $logger; 17 | } 18 | 19 | /** 20 | * @param IOutput $output 21 | * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` 22 | * @param array $options 23 | * @return ISchemaWrapper 24 | * @throws SchemaException 25 | */ 26 | public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ISchemaWrapper { 27 | /** @var ISchemaWrapper $schema */ 28 | $schema = $schemaClosure(); 29 | 30 | if ($schema->hasTable('filescripts')) { 31 | $table = $schema->getTable('filescripts'); 32 | 33 | $table->addColumn('show_in_context', 'boolean', [ 34 | 'notnull' => false, 35 | 'default' => false 36 | ]); 37 | } else { 38 | $this->logger->error('File scripts (Version040000Date20231217) migration failed, because `filescripts` table does not exist.'); 39 | throw new SchemaException("File scripts (Version040000Date20231217) migration failed, because `filescripts` table does not exist."); 40 | } 41 | return $schema; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/Service/Notifier.php: -------------------------------------------------------------------------------- 1 | l10nFactory = $l10nFactory; 20 | $this->url = $urlGenerator; 21 | } 22 | 23 | public function getID(): string { 24 | return Application::APP_ID; 25 | } 26 | 27 | public function getName(): string { 28 | return $this->l10nFactory->get(Application::APP_ID)->t('File actions'); 29 | } 30 | 31 | public function prepare(INotification $notification, string $languageCode): INotification { 32 | if ($notification->getApp() !== Application::APP_ID) { 33 | throw new \InvalidArgumentException(); 34 | } 35 | 36 | $notification->setParsedSubject($notification->getSubject()); 37 | $notification->setParsedMessage($notification->getMessage()); 38 | $notification->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files_scripts', 'files_scripts-dark.svg'))); 39 | return $notification; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /lib/Service/ScriptValidationException.php: -------------------------------------------------------------------------------- 1 | validationErrors = $validationErrors; 13 | $reasons = implode(',', $validationErrors); 14 | parent::__construct("Script is not valid: $reasons"); 15 | } 16 | 17 | /** 18 | * @return string[] 19 | */ 20 | public function getValidationErrors(): array { 21 | return $this->validationErrors; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /lib/Settings/AdminSection.php: -------------------------------------------------------------------------------- 1 | urlGenerator = $urlGenerator; 15 | $this->l = $l; 16 | } 17 | 18 | public function getID(): string { 19 | return 'files_scripts'; 20 | } 21 | 22 | public function getName(): string { 23 | return $this->l->t('File actions'); 24 | } 25 | 26 | public function getPriority(): int { 27 | return 80; 28 | } 29 | 30 | public function getIcon(): string { 31 | return $this->urlGenerator->imagePath('files_scripts', 'files_scripts-dark.svg'); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /lib/Settings/AdminSettings.php: -------------------------------------------------------------------------------- 1 | config = $config; 22 | $this->initialStateService = $initialStateService; 23 | } 24 | 25 | public function getForm(): TemplateResponse { 26 | $usePhpInterpreter = $this->config->getAppValue(Application::APP_ID, Application::APP_CONFIG_USE_PHP_INTERPRETER, 'false') === 'true'; 27 | $this->initialStateService->provideInitialState('use_php_interpreter', $usePhpInterpreter); 28 | $this->initialStateService->provideInitialState('lua_plugin_available', LuaProvider::isLuaPluginAvailable()); 29 | 30 | Util::addScript(Application::APP_ID, 'files_scripts-main'); 31 | return new TemplateResponse(Application::APP_ID, 'settings-admin'); 32 | } 33 | 34 | public function getSection(): string { 35 | return 'files_scripts'; 36 | } 37 | 38 | public function getPriority(): int { 39 | return 0; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /screenshots/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raudius/files_scripts/520947dfb66f41db718fde3e9662aef4c240ecda/screenshots/1.png -------------------------------------------------------------------------------- /screenshots/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raudius/files_scripts/520947dfb66f41db718fde3e9662aef4c240ecda/screenshots/2.png -------------------------------------------------------------------------------- /screenshots/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raudius/files_scripts/520947dfb66f41db718fde3e9662aef4c240ecda/screenshots/3.png -------------------------------------------------------------------------------- /screenshots/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raudius/files_scripts/520947dfb66f41db718fde3e9662aef4c240ecda/screenshots/4.png -------------------------------------------------------------------------------- /screenshots/docs/mime-type.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raudius/files_scripts/520947dfb66f41db718fde3e9662aef4c240ecda/screenshots/docs/mime-type.png -------------------------------------------------------------------------------- /screenshots/docs/save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raudius/files_scripts/520947dfb66f41db718fde3e9662aef4c240ecda/screenshots/docs/save.png -------------------------------------------------------------------------------- /src/components/ScriptCard.vue: -------------------------------------------------------------------------------- 1 | 26 | 27 | 63 | -------------------------------------------------------------------------------- /src/components/generic/FreeSelect.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 61 | 62 | 67 | -------------------------------------------------------------------------------- /src/components/generic/MultiInput.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 55 | 56 | 66 | -------------------------------------------------------------------------------- /src/l10n.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Translates a string. 3 | * 4 | * @param {String} ctxt Translation context 5 | * @param {string} str String to be translated 6 | * @param {object} params Translation parameters 7 | */ 8 | export function translate(ctxt: String, str: String, params?: Object) { 9 | return t(ctxt, str, params) 10 | } 11 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { generateFilePath } from '@nextcloud/router' 2 | import ScriptSelect from './views/ScriptSelect.vue' 3 | import Settings from './views/Settings.vue' 4 | import Vue from 'vue' 5 | 6 | // Import store after vuex registration. 7 | const scriptsStore = require('./store/scripts').store 8 | 9 | declare let appName: string 10 | 11 | declare global { 12 | const OC, OCA: any // eslint-disable-line no-unused-vars 13 | const t: (...args) => string // eslint-disable-line no-unused-vars 14 | const n: (...args) => string // eslint-disable-line no-unused-vars 15 | let __webpack_public_path__: string // eslint-disable-line 16 | } 17 | 18 | // eslint-disable-next-line 19 | __webpack_public_path__ = generateFilePath(appName, '', 'js/') 20 | 21 | const ID_DIV_SETTINGS = 'files_scripts_settings' 22 | const ID_DIV_FILES = 'files_scripts_files' 23 | 24 | /* 25 | * Render Vue app. 26 | * If we can find the settings mount DIV, we mount Settings.vue 27 | * Otherwise we add a modal mount DIV to the DOM, and mount ScriptSelectionModal.vue 28 | */ 29 | const settingsDiv = document.getElementById(ID_DIV_SETTINGS) 30 | if (settingsDiv) { 31 | new Vue({ // eslint-disable-line no-new 32 | el: '#' + ID_DIV_SETTINGS, 33 | render: h => h(Settings), 34 | store: scriptsStore, 35 | }) 36 | } else { 37 | const div = document.createElement('div') 38 | div.id = ID_DIV_FILES 39 | document.body.appendChild(div) 40 | 41 | new Vue({ // eslint-disable-line no-new 42 | el: '#' + ID_DIV_FILES, 43 | render: h => h(ScriptSelect), 44 | store: scriptsStore, 45 | }) 46 | } 47 | -------------------------------------------------------------------------------- /src/types/Messages.ts: -------------------------------------------------------------------------------- 1 | import {showError, showSuccess, showWarning, showInfo} from '@nextcloud/dialogs' 2 | 3 | export enum MessageType { 4 | ERROR = 'error', 5 | WARNING = 'warning', 6 | INFO = 'info', 7 | SUCCESS = 'success' 8 | } 9 | 10 | export interface Message { 11 | message: string 12 | type: MessageType 13 | } 14 | 15 | export function getMessageType(type: any): MessageType { 16 | return MessageType[type] ?? MessageType.INFO 17 | } 18 | 19 | export function showMessage(message: Message) { 20 | const options = { 21 | timeout: 10000 22 | } 23 | 24 | switch (message.type) { 25 | case MessageType.ERROR: 26 | showError(message.message, options) 27 | return 28 | 29 | case MessageType.WARNING: 30 | showWarning(message.message, options) 31 | return; 32 | 33 | case MessageType.SUCCESS: 34 | showSuccess(message.message, options) 35 | return; 36 | 37 | default: 38 | showInfo(message.message, options) 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/types/files.ts: -------------------------------------------------------------------------------- 1 | export interface NodeInfo { 2 | id: number 3 | basename: string 4 | fullPath: string 5 | mime: string 6 | } 7 | -------------------------------------------------------------------------------- /src/views/Flow.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 51 | -------------------------------------------------------------------------------- /src/vue.shims.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.vue' { 2 | import Vue from 'vue' 3 | export default Vue 4 | } 5 | -------------------------------------------------------------------------------- /src/workflow.ts: -------------------------------------------------------------------------------- 1 | // eslint-disable-next-line 2 | import {generateFilePath} from "@nextcloud/router"; 3 | import Flow from "./views/Flow.vue"; 4 | 5 | declare let appName: string 6 | // eslint-disable-next-line 7 | __webpack_public_path__ = generateFilePath(appName, '', 'js/'); 8 | 9 | (function() { 10 | OCA.WorkflowEngine.registerOperator({ 11 | id: 'OCA\\FilesScripts\\Flow\\Operation', 12 | operation: '', 13 | options: Flow, 14 | }); 15 | })(); 16 | -------------------------------------------------------------------------------- /stylelint.config.js: -------------------------------------------------------------------------------- 1 | const stylelintConfig = require('@nextcloud/stylelint-config') 2 | 3 | module.exports = stylelintConfig 4 | -------------------------------------------------------------------------------- /templates/settings-admin.php: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /tests/bootstrap.php: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | . 11 | 12 | 13 | 14 | 15 | ../appinfo 16 | ../lib 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /tests/unit/Interpreter/AbortTest.php: -------------------------------------------------------------------------------- 1 | expectException(AbortException::class); 12 | $this->expectExceptionMessage('testAbort'); 13 | (new Abort())->run('testAbort'); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tests/unit/Interpreter/TemplateTest.php: -------------------------------------------------------------------------------- 1 | 'bar', 12 | 'arr' => [ 1 => ['id' => 'a'], 2 => ['id' => 'b'], 3 => ['id' => 'c'] ] 13 | ]; 14 | $template = "{{ foo }} 15 | {{# arr}} 16 | {{ id }} 17 | {{/ arr}}"; 18 | $expected = "bar 19 | a 20 | b 21 | c 22 | "; 23 | 24 | 25 | $this->assertEquals( 26 | $expected, 27 | (new Mustache())->run($template, $data) 28 | ); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /tests/unit/Lua/LuaTestCase.php: -------------------------------------------------------------------------------- 1 | getMockBuilder(Folder::class) 16 | ->disableOriginalConstructor()->getMock(); 17 | $mockFolder->method('get')->willReturn($mockFolder); 18 | $mockFolder->method('getId')->willReturn('rootFolder'); 19 | 20 | $lua = new LuarInterpreter(); 21 | $context = new Context( 22 | $lua, 23 | $mockFolder, 24 | $inputs, 25 | [], 26 | null 27 | ); 28 | 29 | $interpreter = new Interpreter( 30 | new TestFunctionProvider(), 31 | new TestTempManager() 32 | ); 33 | 34 | $script = new Script(); 35 | $script->setProgram($program); 36 | 37 | $interpreter->execute($script, $context); 38 | return $lua; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /tests/unit/Lua/TemplateTest.php: -------------------------------------------------------------------------------- 1 | runLua($program); 13 | $output = $lua->getGlobalVariable('output'); 14 | 15 | $this->assertEquals( 16 | "value='hello world!'", 17 | $output 18 | ); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /tests/unit/NullLogger.php: -------------------------------------------------------------------------------- 1 |