Merge remote-tracking branch 'origin/master' into dev

pull/621/head
NGPixel 7 years ago
commit e183167c9b

@ -0,0 +1,46 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at abuse@requarks.io. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/

@ -5,3 +5,6 @@
### Steps to reproduce the behavior
<!--- FOR FEATURE REQUESTS: Use the feature request board instead: https://wikijs.canny.io/features --->
<!-- Love Wiki.js? Please consider supporting our collective:
👉 https://opencollective.com/wikijs/donate -->

4
.gitignore vendored

@ -34,3 +34,7 @@ config.yml
# IDE exclude
.idea
*.sublime-*
# Test results
test-results/

@ -2,6 +2,26 @@
All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).
## [v1.0.11] - 2017-10-14
### Added
- **Localization**: Japanese locale is now available (thanks to @johnnyshields)
- **Misc**: Added referrer policy header
## Fixed
- **Authentication**: Fix for name search when using OpenLDAP
## [v1.0.10] - 2017-10-09
### Added
- **Misc**: Ability to delete pages from the UI
## [v1.0.9] - 2017-09-14
### Added
- **Localization**: Persian (farsi) locale is now available (thanks to @ashkang)
- **UI**: Support for right-to-left languages
### Fixed
- **i18n**: Browser locale files not generated properly (ported from dev branch)
## [v1.0.8] - 2017-08-31
### Changed
- **Misc**: Updated dependencies
@ -217,8 +237,6 @@ This project adheres to [Semantic Versioning](http://semver.org/).
### Changed
- Updated dependencies + snyk policy
[v1.0.8]: https://github.com/Requarks/wiki/releases/tag/v1.0.8
[v1.0.7]: https://github.com/Requarks/wiki/releases/tag/v1.0.7
[v1.0.6]: https://github.com/Requarks/wiki/releases/tag/v1.0.6
[v1.0.5]: https://github.com/Requarks/wiki/releases/tag/v1.0.5
[v1.0.4]: https://github.com/Requarks/wiki/releases/tag/v1.0.4

@ -0,0 +1,67 @@
# Contribute
## Introduction
First, thank you for considering contributing to Wiki.js! It's people like you that make the open source community such a great community! 😊
We welcome any type of contribution, not only code. You can help with
- **QA**: file bug reports, the more details you can give the better (e.g. screenshots with the console open)
- **Marketing**: writing blog posts, howto's, printing stickers, ...
- **Community**: presenting the project at meetups, organizing a dedicated meetup for the local community, ...
- **Code**: take a look at the [open issues](issues). Even if you can't write code, commenting on them, showing that you care about a given issue matters. It helps us triage them.
- **Money**: we welcome financial contributions in full transparency on our [open collective](https://opencollective.com/wikijs).
## Your First Contribution
Working on your first Pull Request? You can learn how from this *free* series, [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github).
## Submitting code
Any code change should be submitted as a pull request. The description should explain what the code does and give steps to execute it. The pull request should also contain tests.
## Code review process
The bigger the pull request, the longer it will take to review and merge. Try to break down large pull requests in smaller chunks that are easier to review and merge.
It is also always helpful to have some context for your pull request. What was the purpose? Why does it matter to you?
## Financial contributions
We also welcome financial contributions in full transparency on our [open collective](https://opencollective.com/wikijs).
Anyone can file an expense. If the expense makes sense for the development of the community, it will be "merged" in the ledger of our open collective by the core contributors and the person who filed the expense will be reimbursed.
## Questions
If you have any questions, create an [issue](issue) (protip: do a quick search first to see if someone else didn't ask the same question before!).
You can also reach us at hello@wikijs.opencollective.com.
## Credits
### Contributors
Thank you to all the people who have already contributed to Wiki.js!
<a href="graphs/contributors"><img src="https://opencollective.com/wikijs/contributors.svg?width=890" /></a>
### Backers
Thank you to all our backers! [[Become a backer](https://opencollective.com/wikijs#backer)]
<a href="https://opencollective.com/wikijs#backers" target="_blank"><img src="https://opencollective.com/wikijs/backers.svg?width=890"></a>
### Sponsors
Thank you to all our sponsors! (please ask your company to also support this open source project by [becoming a sponsor](https://opencollective.com/wikijs#sponsor))
<a href="https://opencollective.com/wikijs/sponsor/0/website" target="_blank"><img src="https://opencollective.com/wikijs/sponsor/0/avatar.svg"></a>
<a href="https://opencollective.com/wikijs/sponsor/1/website" target="_blank"><img src="https://opencollective.com/wikijs/sponsor/1/avatar.svg"></a>
<a href="https://opencollective.com/wikijs/sponsor/2/website" target="_blank"><img src="https://opencollective.com/wikijs/sponsor/2/avatar.svg"></a>
<a href="https://opencollective.com/wikijs/sponsor/3/website" target="_blank"><img src="https://opencollective.com/wikijs/sponsor/3/avatar.svg"></a>
<a href="https://opencollective.com/wikijs/sponsor/4/website" target="_blank"><img src="https://opencollective.com/wikijs/sponsor/4/avatar.svg"></a>
<a href="https://opencollective.com/wikijs/sponsor/5/website" target="_blank"><img src="https://opencollective.com/wikijs/sponsor/5/avatar.svg"></a>
<a href="https://opencollective.com/wikijs/sponsor/6/website" target="_blank"><img src="https://opencollective.com/wikijs/sponsor/6/avatar.svg"></a>
<a href="https://opencollective.com/wikijs/sponsor/7/website" target="_blank"><img src="https://opencollective.com/wikijs/sponsor/7/avatar.svg"></a>
<a href="https://opencollective.com/wikijs/sponsor/8/website" target="_blank"><img src="https://opencollective.com/wikijs/sponsor/8/avatar.svg"></a>
<a href="https://opencollective.com/wikijs/sponsor/9/website" target="_blank"><img src="https://opencollective.com/wikijs/sponsor/9/avatar.svg"></a>
<!-- This `CONTRIBUTING.md` is based on @nayafia's template https://github.com/nayafia/contributing-template -->

@ -2,14 +2,15 @@
[![Release](https://img.shields.io/github/release/Requarks/wiki.svg?style=flat-square&maxAge=3600)](https://github.com/Requarks/wiki/releases)
[![License](https://img.shields.io/badge/license-AGPLv3-blue.svg?style=flat-square)](https://github.com/requarks/wiki/blob/master/LICENSE)
[![Backers on Open Collective](https://opencollective.com/wikijs/backers/badge.svg)](#backers)
[![Sponsors on Open Collective](https://opencollective.com/wikijs/sponsors/badge.svg)](#sponsors)
[![npm](https://img.shields.io/badge/npm-wiki.js-blue.svg?style=flat-square)](https://www.npmjs.com/package/wiki.js)
[![Downloads](https://img.shields.io/github/downloads/Requarks/wiki/total.svg?style=flat-square)](https://www.npmjs.com/package/wiki.js)
[![Twitter Follow](https://img.shields.io/badge/follow-%40requarks-blue.svg?style=flat-square)](https://twitter.com/requarks)
[![Build Status](https://app.wercker.com/status/fc8e75793b3cf12852314d6bfd83d148/s/master?style=flat-square)](https://app.wercker.com/project/byKey/fc8e75793b3cf12852314d6bfd83d148)
[![Downloads](https://img.shields.io/github/downloads/Requarks/wiki/total.svg?style=flat-square)](https://www.npmjs.com/package/wiki.js)
![Build Status](https://requarks.visualstudio.com/_apis/public/build/definitions/5850c090-02b9-4312-b4ce-0e1f5677b574/6/badge)
[![Codacy Badge](https://img.shields.io/codacy/grade/1d0217a3153c4595bdedb322263e55c8/master.svg?style=flat-square)](https://www.codacy.com/app/Requarks/wiki)
[![Dependency Status](https://img.shields.io/gemnasium/Requarks/wiki.svg?style=flat-square)](https://gemnasium.com/github.com/Requarks/wiki)
[![Standard - JavaScript Style Guide](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](http://standardjs.com/)
[![Chat on Gitter](https://img.shields.io/badge/chat-on_gitter-CC2B5E.svg?style=flat-square&logo=image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAOCAMAAADUg/YpAAAABlBMVEUAAAD///%2Bl2Z/dAAAAAXRSTlMAQObYZgAAABVJREFUeAFjwAUYYTQByAAh0WicAAAFnwAYeB5bLwAAAABJRU5ErkJggg==)](https://gitter.im/Requarks/wiki)
[![Twitter Follow](https://img.shields.io/badge/follow-%40requarks-blue.svg?style=flat-square)](https://twitter.com/requarks)
##### A modern, lightweight and powerful wiki app built on NodeJS, Git and Markdown
@ -24,6 +25,10 @@
- [Translations](#translations) *(We need your help!)*
- [Special Thanks](#special-thanks)
<a target='_blank' rel='nofollow' href='https://app.codesponsor.io/link/roGruqDX64HMJwmnvjhaQ7kt/Requarks/wiki'>
<img alt='Sponsor' width='888' height='68' src='https://app.codesponsor.io/embed/roGruqDX64HMJwmnvjhaQ7kt/Requarks/wiki.svg' />
</a>
## Requirements
Wiki.js can run on virtually all platforms where Node.js can (Windows, Mac, Linux, etc.).
@ -53,15 +58,23 @@ You can also use a Dockerfile ([see example](https://github.com/Requarks/wiki/bl
Current and upcoming milestones *(major features only, see the [changelog](https://github.com/Requarks/wiki/blob/master/CHANGELOG.md) for complete list of features and bug fixes)*:
### 1.0.8 - Stable
### 1.0.11 - Stable
![Progress](http://progressed.io/bar/100)
- [x] Fix: Azure AD client Id is now referenced correctly ([#219](https://github.com/Requarks/wiki/issues/219))
- [x] Fix: Git Branch is now referenced correctly ([#215](https://github.com/Requarks/wiki/issues/215))
- [x] Updated dependencies
**Note**: As 2.0 is under development, no new features are being developed in the 1.0 branch.
- [x] Japanese localization
- [x] Fix for name search when using OpenLDAP
- [x] Added referrer policy header
### 2.0.0 - Dev
![Progress](http://progressed.io/bar/25)
![Progress](http://progressed.io/bar/35)
**Goals**:
- Decouple front-end and back-end completely.
- All operations and queries will be made via GraphQL API.
- New fully responsive layout, with better customization capabilities.
- Full localization support, especially for non-latin languages.
**Breaking Changes**: MongoDB is being phased out in favor of PostgreSQL + Redis. An upgrade tool will be provided to migrate existing data to the new system.
@ -74,13 +87,14 @@ Current and upcoming milestones *(major features only, see the [changelog](https
- [x] Rights
- [x] Settings
- [x] Tags
- [x] Translations
- [x] Users
- [x] Migrate to PostgreSQL + Redis datastore
- [ ] New Login page
- [ ] History / Revert to previous version
- [ ] Optional Two-Steps Authentication (2FA)
- [x] Docker support + Auto compile/publish to Docker Hub
- [ ] Support sub-directory installations (e.g. example.com/wiki)
- [x] Support sub-directory installations (e.g. example.com/wiki)
- [ ] Persist system settings to database instead of file-based
- [ ] User Groups + Better permissions management
- [x] Make use of all available CPU cores, distributed jobs queue
@ -117,7 +131,9 @@ We are looking for translators to make Wiki.js available in multiple languages.
- [x] Dutch - *Thanks to [@weirdwater](https://github.com/weirdwater)*
- [x] French
- [x] German - *Thanks to [@joetjengerdes](https://github.com/joetjengerdes)*
- [x] Japanese - *Thanks to [@johnnyshields](https://github.com/johnnyshields)*
- [x] Korean - *Thanks to [@junwonpk](https://github.com/junwonpk)*
- [x] Persian - *Thanks to [@ashkang](https://github.com/ashkang)*
- [x] Portuguese - *Thanks to [@felipeplets](https://github.com/felipeplets)*
- [x] Russian - *Thanks to [@efimlosev](https://github.com/efimlosev)*
- [x] Spanish - *Thanks to [@MatiasArriola](https://github.com/MatiasArriola)*
@ -127,5 +143,31 @@ We are looking for translators to make Wiki.js available in multiple languages.
![Browserstack](https://wiki.js.org/assets/images/logo_browserstack.png)
[Browserstack](https://www.browserstack.com/) for providing access to their great cross-browser testing tools.
![DigitalOcean](https://wiki.js.org/assets/images/logo_digitalocean.png)
[DigitalOcean](https://www.digitalocean.com/) for providing hosting of the Wiki.js documentation site.
[![DigitalOcean](https://wiki.js.org/assets/images/logo_digitalocean.png)](https://m.do.co/c/5f7445bfa4d0)
[DigitalOcean](https://m.do.co/c/5f7445bfa4d0) for providing hosting of the Wiki.js documentation site.
## Contributors
This project exists thanks to all the people who contribute. [[Contribute]](CONTRIBUTING.md).
<a href="graphs/contributors"><img src="https://opencollective.com/wikijs/contributors.svg?width=890" /></a>
## Backers
Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/wikijs#backer)]
<a href="https://opencollective.com/wikijs#backers" target="_blank"><img src="https://opencollective.com/wikijs/backers.svg?width=890"></a>
## Sponsors
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/wikijs#sponsor)]
<a href="https://opencollective.com/wikijs/sponsor/0/website" target="_blank"><img src="https://opencollective.com/wikijs/sponsor/0/avatar.svg"></a>
<a href="https://opencollective.com/wikijs/sponsor/1/website" target="_blank"><img src="https://opencollective.com/wikijs/sponsor/1/avatar.svg"></a>
<a href="https://opencollective.com/wikijs/sponsor/2/website" target="_blank"><img src="https://opencollective.com/wikijs/sponsor/2/avatar.svg"></a>
<a href="https://opencollective.com/wikijs/sponsor/3/website" target="_blank"><img src="https://opencollective.com/wikijs/sponsor/3/avatar.svg"></a>
<a href="https://opencollective.com/wikijs/sponsor/4/website" target="_blank"><img src="https://opencollective.com/wikijs/sponsor/4/avatar.svg"></a>
<a href="https://opencollective.com/wikijs/sponsor/5/website" target="_blank"><img src="https://opencollective.com/wikijs/sponsor/5/avatar.svg"></a>
<a href="https://opencollective.com/wikijs/sponsor/6/website" target="_blank"><img src="https://opencollective.com/wikijs/sponsor/6/avatar.svg"></a>
<a href="https://opencollective.com/wikijs/sponsor/7/website" target="_blank"><img src="https://opencollective.com/wikijs/sponsor/7/avatar.svg"></a>
<a href="https://opencollective.com/wikijs/sponsor/8/website" target="_blank"><img src="https://opencollective.com/wikijs/sponsor/8/avatar.svg"></a>
<a href="https://opencollective.com/wikijs/sponsor/9/website" target="_blank"><img src="https://opencollective.com/wikijs/sponsor/9/avatar.svg"></a>

@ -39,6 +39,7 @@ import loadingSpinnerComponent from './components/loading-spinner.vue'
import loginComponent from './components/login.vue'
import modalCreatePageComponent from './components/modal-create-page.vue'
import modalCreateUserComponent from './components/modal-create-user.vue'
import modalDeletePageComponent from './components/modal-delete-page.vue'
import modalDeleteUserComponent from './components/modal-delete-user.vue'
import modalDiscardPageComponent from './components/modal-discard-page.vue'
import modalMovePageComponent from './components/modal-move-page.vue'
@ -118,6 +119,7 @@ Vue.component('loadingSpinner', loadingSpinnerComponent)
Vue.component('login', loginComponent)
Vue.component('modalCreatePage', modalCreatePageComponent)
Vue.component('modalCreateUser', modalCreateUserComponent)
Vue.component('modalDeletePage', modalDeletePageComponent)
Vue.component('modalDeleteUser', modalDeleteUserComponent)
Vue.component('modalDiscardPage', modalDiscardPageComponent)
Vue.component('modalMovePage', modalMovePageComponent)

@ -0,0 +1,66 @@
<template lang="pug">
transition(:duration="400")
.modal(v-show='isShown', v-cloak)
transition(name='modal-background')
.modal-background(v-show='isShown')
.modal-container
transition(name='modal-content')
.modal-content(v-show='isShown')
header.is-red
span {{ $t('modal.deletepagetitle') }}
p.modal-notify(v-bind:class='{ "is-active": isLoading }'): i
section
span {{ $t('modal.deletepagewarning') }}
footer
a.button.is-grey.is-outlined(v-on:click='discard') {{ $t('modal.discard') }}
a.button.is-red(v-on:click='deletePage') {{ $t('modal.delete') }}
</template>
<script>
export default {
name: 'modal-delete-page',
props: ['currentPath'],
data () {
return {
isLoading: false
}
},
computed: {
isShown () {
return this.$store.state.modalDeletePage.shown
}
},
methods: {
discard () {
this.isLoading = false
this.$store.dispatch('modalDeletePage/close')
},
deletePage () {
let self = this
this.isLoading = true
this.$http.delete(window.location.href).then(resp => {
return resp.json()
}).then(resp => {
if (resp.ok) {
window.location.assign('/')
} else {
self.isLoading = false
self.$store.dispatch('alert', {
style: 'red',
icon: 'ui-2_square-remove-09',
msg: resp.msg
})
}
}).catch(err => {
self.isLoading = false
self.$store.dispatch('alert', {
style: 'red',
icon: 'ui-2_square-remove-09',
msg: 'Error: ' + err.body.msg
})
})
}
}
}
</script>

@ -10,6 +10,7 @@ import editorVideo from './modules/editor-video'
import modalCreatePage from './modules/modal-create-page'
import modalCreateUser from './modules/modal-create-user'
import modalDeleteUser from './modules/modal-delete-user'
import modalDeletePage from './modules/modal-delete-page'
import modalDiscardPage from './modules/modal-discard-page'
import modalMovePage from './modules/modal-move-page'
import modalProfile2fa from './modules/modal-profile-2fa'
@ -39,6 +40,7 @@ export default new Vuex.Store({
editorVideo,
modalCreatePage,
modalCreateUser,
modalDeletePage,
modalDeleteUser,
modalDiscardPage,
modalMovePage,

@ -0,0 +1,14 @@
export default {
namespaced: true,
state: {
shown: false
},
getters: {},
mutations: {
shownChange: (state, shownState) => { state.shown = shownState }
},
actions: {
open({ commit }) { commit('shownChange', true) },
close({ commit }) { commit('shownChange', false) }
}
}

@ -42,6 +42,7 @@ $primary: 'indigo';
@import 'layout/_header';
@import 'layout/_loader';
@import 'layout/_rtl';
@import 'pages/login';
@import 'pages/welcome';

@ -173,7 +173,11 @@
&.is-outlined {
background-color: mc($primary, '500');
color: mc($primary, '100');
}
}
&.is-icon-only i {
margin-right: 0;
}
&:hover {
background-color: mc($primary, '700');

@ -0,0 +1,28 @@
.rtl {
direction: rtl;
.button i {
margin-left: 8px;
margin-right: 0px;
}
.nav-right .nav-item {
padding: 0 10px 0 0;
}
.nav-item h1 i {
margin-left: 8px;
margin-right: 8px;
}
.sidebar aside .sidebar-menu li a i {
margin-left: 7px;
margin-right: 0;
}
.mkcontent {
ul {
padding: 10px 40px 10px 0;
}
}
}

@ -39,6 +39,9 @@ redis:
db: 0
password: null
# Enable for right to left languages (e.g. arabic):
langRtl: false
# ---------------------------------------------------------------------
# Background Workers
# ---------------------------------------------------------------------

@ -9,7 +9,8 @@
"restart": "node wiki restart",
"build": "node tools/fuse",
"dev": "node tools/fuse -d",
"test": "jest"
"test": "jest",
"postinstall": "opencollective postinstall"
},
"bin": {
"wiki": "wiki.js"
@ -175,11 +176,23 @@
"vuex-persistedstate": "2.0.0"
},
"jest": {
"testResultsProcessor": "./node_modules/jest-junit",
"collectCoverage": false,
"testMatch": [
"**/test/**/*.js?(x)",
"**/?(*.)(spec|test).js?(x)"
],
"verbose": true
},
"jest-junit": {
"suiteName": "jest test",
"output": "./test-results/junit.xml",
"classNameTemplate": "{classname}-{title}",
"titleTemplate": "{classname}-{title}"
},
"collective": {
"type": "opencollective",
"url": "https://opencollective.com/wikijs",
"logo": "https://opencollective.com/opencollective/logo.txt"
}
}

@ -84,6 +84,9 @@ langs:
-
id: de
name: German - Deutsch
-
id: ja
name: Japanese - 日本語
-
id: ko
name: Korean - 한국어

@ -288,4 +288,29 @@ router.put('/*', (req, res, next) => {
})
})
/**
* Delete document
*/
router.delete('/*', (req, res, next) => {
if (!res.locals.rights.write) {
return res.json({
ok: false,
error: lang.t('errors:forbidden')
})
}
let safePath = entryHelper.parsePath(req.path)
entries.remove(safePath, req.user).then(() => {
res.json({
ok: true
})
}).catch((err) => {
res.json({
ok: false,
error: err.message
})
})
})
module.exports = router

@ -77,6 +77,8 @@
"delete": "Delete",
"deletefiletitle": "Delete?",
"deletefilewarn": "Are you sure you want to delete",
"deletepagewarning": "Are you sure you want to delete this page? This action cannot be undone!",
"deletepagetitle": "Delete this page?",
"deleteusertitle": "Delete User Account?",
"deleteuserwarning": "Are you sure you want to delete this user account? This action cannot be undone!",
"discard": "Discard",
@ -113,4 +115,4 @@
"placeholder": "Search...",
"results": "Search Results"
}
}
}

@ -45,6 +45,16 @@
"videosupportedtitle": "Los siguientes están soportados:",
"videotitle": "Insertar Video"
},
"history": {
"pastversions": "Versiones Previas",
"timestamp": "Marca de tiempo",
"author": "Autor",
"commit": "Commit",
"comparewith": "Comparar con...",
"view": "Ver",
"reverttoversion": "Volver a la Versión",
"sidebyside": "Vista lado a lado"
},
"modal": {
"abort": "Abortar",
"anchorerror": "Falló la copia del Portapapeles. Copie la URL manualmente.",

@ -4,9 +4,9 @@
"displaynameexample": "علی علوی",
"email": "ایمیل",
"lastprofileupdate": "آخرین زمان به روز رسانی پروفایل",
"membersince": "عضو از تاریخ",
"membersince": "تاریخ عضویت",
"password": "گذرواژه",
"passwordverify": کرار گذرواژه",
"passwordverify": ایید گذرواژه",
"provider": "سرویس‌دهنده",
"savechanges": "ذخیره تغییرات",
"subtitle": "اطلاعات پروفایل و سیستم احراز هویت",
@ -30,14 +30,14 @@
"systemversion": "نسخه سیستم",
"currentversion": "نسخه فعلی",
"latestversion": "آخرین نسخه",
"upgrade": "به روز رسانی",
"upgrade": "ارتقاء",
"reinstall": "نصب مجدد نسخه فعلی",
"versioncheckfailed": "امکان پیدا کردن آخرین نسخه نرم افزار وجود ندارد. لطفا بعدا امتحان کنید.",
"administrativetools": "ابزارهای مدیریت",
"flushcache": "پاک کردن کش و بازسازی فهرست‌ها",
"flushcachetext": "اگر به نظر میرسد محتوای وبسایت به روز نیست یا آخرین تغییرات در آن وجود ندارد، پاک کردن کش احتمالا میتواند به حل این مشکل کمک کند.",
"flushcachebtn": "پاک کردن و بازسازی",
"resetaccounts": "ریست کردن حسابهای کاربری به حالت پیش‌فرض",
"resetaccounts": "ریست کردن حسابهای کاربری سیستمی به حالت پیش‌فرض",
"resetaccountstext": "حسابهای کاربری سیستمی (مثل حساب مهمان) به حالت پیش‌فرض برخواهند گشت.",
"resetaccountsbtn": "ریست کردن حسابهای سیستمی",
"flushsessions": "پاک کردن نشست تمام کاربران آنلاین",
@ -54,7 +54,7 @@
"theme": {
"subtitle": "تغییر ظاهر وبسایت",
"primarycolor": "رنگ اصلی",
"primarycolordesc": "در نوار جهت‌یابی بالا، سرساز، پیوند‌ها و غیره استفاده میشود.",
"primarycolordesc": "در نوار ناوبری بالا، سرساز، پیوند‌ها و غیره استفاده میشود.",
"altcolor": "رنگ دوم",
"altcolordesc": "در نوارابزار گوشه استفاده میشود (با رنگ کمی تیره‌تر)",
"footercolor": "رنگ پاورقی",
@ -65,7 +65,7 @@
"colorize": "رنگ‌آمیزی کد بر اساس سینتکس"
},
"savechanges": "ذخیره تغییرات",
"reset": "برگشت تغییرات به وضعیت پیش‌فرض"
"reset": "برگشت به وضعیت پیش‌فرض"
},
"users": {
"createauthorize": "مدیریت کاربران",
@ -79,4 +79,4 @@
"edituser": "ویرایش کاربر",
"uniqueid": "شناسه یکتا"
}
}
}

@ -12,7 +12,7 @@
"errors": {
"invalidlogin": "شناسه کاربری نادرست",
"invalidloginmsg": "آدرس ایمیل یا گذرواژه نادرست است.",
"invaliduseremail": "آدرس ایمیل نادرست",
"invaliduseremail": "آدرس ایمیل نامعتبر",
"loginerror": "خطا در ورود به سیستم",
"notyetauthorized": "هنوز اجازه ورود به وبسایت به شما داده نشده است.",
"toomanyattempts": "تلاش‌های ناموفق زیاد!",
@ -29,4 +29,4 @@
"slack": "اسلک",
"ldap": "ال‌دپ/اکتیو دایرکتوری"
}
}
}

@ -1,19 +1,19 @@
{
"editor": {
"codeblockinsert": "وارد کردن بلوک کد",
"codeblockinsert": "قطعه کد را وارد کنید",
"codeblocklanguage": "زبان",
"codeblockloading": "در حال بارگذاری سینتکس {{name}}",
"codeblockloadingerror": "خطا: امکان بارگذاری سینتکس برای این زبان وجود ندارد.",
"codeblocksuccess": "بلوک کد شما الحاق شد.",
"codeblocktitle": "الحاق بلوک کد",
"codeblockloading": "در حال بارگیری سینتکس {{name}}",
"codeblockloadingerror": "خطا: امکان بارگیری سینتکس برای این زبان وجود ندارد.",
"codeblocksuccess": "قطعه کد شما درج شد.",
"codeblocktitle": "درج قطعه کد",
"discard": "دور انداختن",
"filedeleteaction": "پاک کردن",
"filedeleteloading": "در حال پاک کردن فایل...",
"filedeleteaction": "حذف",
"filedeleteloading": "در حال حذف فایل...",
"filedeletedefault": "این فایل",
"filedeletesuccess": "فایل با موفقیت پاک شد.",
"filedeletesuccess": "فایل با موفقیت حذف شد.",
"fileerror": "امکان دریافت فهرست به روز رسانی شده وجود ندارد.",
"filefolderempty": "این پوشه خالی است.",
"fileinsert": "افزودن لینک به فایل",
"fileinsert": "الصاق پیوند به فایل",
"fileloading": "در حال دریافت فایلها...",
"filemoveaction": "انتقال به...",
"filemoveerror": "خطا در انتقال: {{err}}",
@ -21,16 +21,16 @@
"filemovesuccess": "فایل با موفقیت منتقل شد.",
"fileprocessing": "در حال پردازش...",
"filerenameaction": "تغییر نام",
"filesuccess": "پیوند به فایل الحاق شد.",
"filetitle": "الحاق فایل",
"filesuccess": "پیوند به فایل درج شد.",
"filetitle": "الصاق فایل",
"fileupload": "بارگذاری فایل",
"fileuploaderror": "خطا در بارگذاری: {{err}}",
"fileuploadsuccess": "فایلها با موفقیت بارگذاری شدند.",
"folders": "پوشه‌ها",
"foldersloading": "در حال دریافت لیست پوشه‌ها...",
"imagetitle": "الحاق عکس",
"imageinsert": "الحاق عکس",
"imagesuccess": "عکس الحاق شد.",
"imagetitle": "الصاق عکس",
"imageinsert": "الصاق عکس",
"imagesuccess": "عکس الصاق شد.",
"imageupload": "بارگذاری عکس",
"imagealignleft": "چپ (پیش‌فرض)",
"imagealigncenter": "مرکز",
@ -38,12 +38,12 @@
"imagealignlogo": "لوگوی صفحه",
"newfolder": "پوشه جدید",
"videoanymp4file": "هر فایل ام‌پی‌۴ استاندارد",
"videoinsert": "الحاق ویدئو",
"videoinsert": "الصاق ویدئو",
"videolinktitle": "برای قرار دادن ویدئوی توکار، پیوند ویدئو را وارد کنید:",
"videonotsupported": "این یوآرال نادرست است یا پشتیبانی نمی‌شود.",
"videosuccess": "کد ویدئو الحاق شد.",
"videonotsupported": "این پیوند نادرست است یا پشتیبانی نمی‌شود.",
"videosuccess": "کد ویدئو الصاق شد.",
"videosupportedtitle": "موارد زیر پشتیبانی میشوند:",
"videotitle": "الحاق ویدئو"
"videotitle": "الصاق ویدئو"
},
"history": {
"pastversions": "نسخه‌های پیشین",
@ -58,7 +58,7 @@
"modal": {
"abort": "قطع کردن",
"anchorerror": "کپی از کلیپ‌برد امکان‌پذیر نیست. لطفا پیوند را دستی وارد کنید.",
"anchorsuccess": "یوآرال در کلیپ‌برد کپی شد.",
"anchorsuccess": "پیوند در کلیپ‌برد کپی شد.",
"anchortitle": "پیوند به این قسمت را کپی کن",
"copyclipboard": "کپی در کلیپ‌برد",
"create": "ایجاد",
@ -69,17 +69,48 @@
"createuserauthorize": "دسترسی دادن به کاربر",
"createuseremail": "آدرس ایمیل:",
"createuseremailplaceholder": "مثلا john.doe@company.com",
"createusername": "نام کامل:",
"createusername": "نام و نام خانوادگی:",
"createusernameplaceholder": "مثلا علی علوی",
"createuserpassword": "گذرواژه:",
"createuserprovider": "سرویس‌دهنده:",
"createusertitle": "ساخت حساب کاربری",
"delete": "پاک کردن",
"deletefiletitle": "پاک شود؟",
"deletefilewarn": "آیا مطمئن هستید که میخواهید پاک شود؟",
"deleteusertitle": "حساب کاربری پاک شود؟",
"deleteuserwarning": "آیا مطمئن هستید که میخواهید حساب کاربری شود؟ این عمل قابل بازگشت نیست.",
"delete": "حذف",
"deletefiletitle": "حذف شود؟",
"deletefilewarn": "آیا مطمئن هستید که میخواهید حذف شود؟",
"deleteusertitle": "حساب کاربری حذف شود؟",
"deleteuserwarning": "آیا مطمئن هستید که میخواهید حساب کاربری حذف شود؟ این عمل قابل بازگشت نیست.",
"discard": "دور انداختن",
"discardpagecreate": "آیا مطمئن هستید که میخواهید از این صفحه بروید؟ تمام چیزهایی که تا این لحظه نوشتید از بین میروند."
"discardpagecreate": "آیا مطمئن هستید که میخواهید این صفحه را ترک کنید؟ تمام چیزهایی که تا این لحظه نوشتید از بین خواهند رفت.",
"discardpageedit": "آیا مطمئن هستید که میخواهید این صفحه را ترک کنید؟ تغییرات شما از بین خواهند رفت.",
"discardpagestay": "در این صفحه بمان",
"discardpagetitle": "دور ریخته شود؟",
"move": "انتقال",
"movepageinvalid": "مسیر این صفحه مجاز نیست یا نامعتبر است",
"movepagepath": "مسیر جدید این صفحه را وارد کنید:",
"movepageplaceholder": "نام صفحه",
"movepagetitle": "انتقال صفحه",
"movepagewarning": "توجه کنید که تغییر نام یا انتقال صفحه موجب خراب شدن پیوندهای سایر صفحات به این صفحه میشود. مطمئن شوید که سایر پیوندها به این صفحه را پس از انجام این کار درست خواهید کرد.",
"newfolderinvalid": "نام پوشه نامعتبر است!",
"newfolderloading": "در حال ساخت پوشه جدید...",
"newfoldername": "نام پوشه جدید را وارد کنید:",
"newfoldernameplaceholder": "نام پوشه",
"newfoldersuccess": "پوشه جدید با نام {{name}} ایجاد شد.",
"newfoldertitle": "پوشه جدید",
"renamefile": "تغییر نام",
"renamefileerror": "خطا در تغییر نام: {{err}}",
"renamefileinvalid": "نام این فایل نامعتبر است!",
"renamefileloading": "در حال تغییر نام فایل...",
"renamefilename": "نام جدید این فایل را (بدون پسوند) وارد کنید:",
"renamefilenameplaceholder": "نام فایل",
"renamefiletitle": "تغییر نام فایل"
},
"nav": {
"home": "خانه"
},
"search": {
"didyoumean": "منظورتان این بود؟",
"nomatch": "نتیجه‌ای برای جست و جوی شما یافت نشد",
"placeholder": "جستجو...",
"results": "نتایج جستجو"
}
}
}

@ -0,0 +1,51 @@
{
"wiki": "ویکی",
"header": {
"overview": "بررسی اجمالی",
"createdoc": "ایجاد سند جدید"
},
"footer": {
"poweredby": "ساخته شده به وسیله",
"home": "خانه",
"top": "بازگشت به بالای صفحه"
},
"sidebar": {
"nav": "ناوبری",
"navigation": "ناوبری",
"pagecontents": "محتویات صفحه",
"pastversions": "نسخه های پیشین"
},
"nav": {
"account": "حساب کاربری",
"allpages": "تمام صفحات",
"create": "ايجاد کردن",
"discard": "دور انداختن",
"edit": "ویرایش",
"history": "تاریخچه",
"login": "ورود",
"logout": "خروج",
"move": "انتقال",
"myprofile": "پروفایل من",
"normalview": "چشم‌انداز معمولی",
"root": "خانه",
"savechanges": "ذخیره تغییرات",
"savedocument": "ذخیره سند",
"settings": "تنظیمات",
"source": "منبع",
"stats": "آمار",
"sysinfo": "اطلاعات سیستم",
"syssettings": "تنظیمات سیستم",
"theme": "تم رنگ",
"users": "کاربران",
"viewlatest": "مشاهده آخرین"
},
"welcome": {
"title": "به ویکی خودتان خوش آمدید!",
"subtitle": "شروع و ساختن صفحه اصلی",
"createhome": "ایجاد صفحه اصلی"
},
"loading": {
"source": "درحال بارگیری منبع...",
"editor": "در حال بارگیری ویرایشگر..."
}
}

@ -0,0 +1,30 @@
{
"alreadyexists": "این ورودی از پیش وجود دارد!",
"debugmsg": "ردپای دقیق برای اشکال زدائی",
"fileexists": "فایل {{path}} از پیش وجود دارد.",
"forbidden": "ممنوع",
"forbiddendetail": "متاسفانه شما اجازه لازم برای دسترسی به این صفحه را ندارید.",
"generic": "اشتباهی رخ داد",
"invalidaction": "عمل نامعتبر",
"invaliddestfolder": "پوشه مقصد نامعتبر است!",
"invalidfiletype": "نوع فایل نامعتبر است",
"invalidfolder": "پوشه نامعتبر",
"invalidoperation": "عملیات نامعتبر!",
"invalidpath": "مسیر صفحه نامعتبر است",
"invaliduserid": "شناسه کاربری نامعتبر",
"newpasswordtooshort": "گذرواژه جدید بسیار کوتاه است!",
"notexist": "مدخل {{path}} وجود ندارد!",
"notexistdetail": "آیا میخواهید این مدخل را ایجاد کنید؟",
"parentinvalid": "مدخل والد یک فایل معتبر نیست",
"parentisroot": "مدخل والد ریشه است.",
"remotetoolarge": "فایل خارجی بسیار بزرگ است",
"reservedname": "نمیتوانید سندی با این نام ایجاد کنید، چرا که نام این سند توسط سیستم رزرو شده است.",
"savefailed": "ذخیره سند با مشکل مواجه شد",
"starterfailed": "محتوای آغازگر بارگیری نشد!",
"unauthorized": "غیر مجاز",
"actions": {
"create": "ايجاد كردن",
"gohome": "بازگشت به خانه",
"loginas": "ورود به سیستم به عنوان..."
}
}

@ -0,0 +1,6 @@
{
"added": "مسیر {{path}} اضافه شد",
"deleted": "حذف/تغییرنام {{path}}",
"updated": "{{path}} به روز رسانی شد",
"uploaded": "مسیر {{path}} بارگذاری شد"
}

@ -0,0 +1,82 @@
{
"profile": {
"displayname": "表示する名前",
"displaynameexample": "山田 太郎",
"email": "Eメール",
"lastprofileupdate": "最後のプロファイル更新",
"membersince": "アカウント登録日",
"password": "パスポート",
"passwordverify": "パスポートの確認",
"provider": "プロバイダ",
"savechanges": "保存する",
"subtitle": "プロファイルと認証情報",
"tfa": "二段認証",
"tfadisable": "二段認証を無効にする",
"tfadisabled": "無効済み",
"tfaenable": "二段認証を有効にする",
"tfaenabled": "有効済み"
},
"stats": {
"subtitle": "一般的なサイト統計",
"entries": "記事",
"uploads": "アップロード",
"users": "ユーザー"
},
"setings": {
"subtitle": "サイト設定を管理する"
},
"system": {
"subtitle": "Wikiの情報とユーティリティ",
"systemversion": "システムバージョン",
"currentversion": "現在のバージョン",
"latestversion": "最新バージョン",
"upgrade": "アップグレード",
"reinstall": "現在のバージョンを再インストールする",
"versioncheckfailed": "最新バージョンを照会できません。後で再試行してください。",
"administrativetools": "管理ツール",
"flushcache": "キャッシュをフラッシュしてインデックスを再構築する",
"flushcachetext": "コンテンツや検索結果の期限が滞っているか、最新のコンテンツがない場合は、キャッシュをフラッシュするとこれらの問題を解決できます。",
"flushcachebtn": "フラッシュと再構築する",
"resetaccounts": "システムアカウントをデフォルトにリセットする",
"resetaccountstext": "システムアカウント(ゲストアカウントなど)はデフォルト設定にリセットされます。",
"resetaccountsbtn": "システムアカウントをリセットする",
"flushsessions": "全てのユーザーセッションをフラッシュする",
"flushsessionstext": "全てのユーザーがログアウトし、再度ログインする必要があります。現在のセッションにも影響があります!",
"flushsessionsbtn": "セッションをフラッシュする",
"hostinfo": "ホスト情報",
"os": "オペレーティングシステム",
"nodeversion": "Node.jsバージョン",
"hostname": "ホスト名",
"cores": "CPUコア",
"totalmem": "合計メモリ",
"cwd": "作業ディレクトリ"
},
"theme": {
"subtitle": "Wikiのテーマを変更する",
"primarycolor": "原色",
"primarycolordesc": "トップナビゲーションバー、ヘッダー、リンクなどに使用されます",
"altcolor": "代替色",
"altcolordesc": "サイドバーに使用されます(暗い色調)",
"footercolor": "フッターの色",
"footercolordesc": "フッターに使用されます(明るい色調)",
"codeblock": {
"title": "コードブロック",
"dark": "暗いテーマを使用する",
"colorize": "コードを色分けする"
},
"savechanges": "保存する",
"reset": "デフォルトに戻す"
},
"users": {
"createauthorize": "ユーザーの作成・承認",
"subtitle": "ユーザーとアクセス権限の管理",
"name": "名前",
"email": "Eメール",
"provider": "プロバイダ",
"createdon": "作成日",
"updatedon": "変更日",
"returntousers": "ユーザー画面へ",
"edituser": "ユーザーの編集",
"uniqueid": "一意なID"
}
}

@ -0,0 +1,32 @@
{
"loginrequired": "ログインが必要です",
"loginusing": "ログイン...",
"loginusingalt": "又は...",
"fields": {
"emailuser": "Eメール又はユーザー名",
"password": "パスワード"
},
"actions": {
"login": "ログイン"
},
"errors": {
"invalidlogin": "不正なログイン",
"invalidloginmsg": "Eメール又はパスワードが無効です。",
"invaliduseremail": "無効なユーザーEメール",
"lognerror": "ログインエラー",
"notyetauthorized": "まだこのサイトにログインする権限がありません。",
"toomanyattempts": "試行回数が多すぎます",
"toomanyattemptsmsg": "短期間に失敗した試行回数が多すぎます。{{time}}にもう一度お試しください。",
"usernotfound": "ユーザーが見つかりません"
},
"providers": {
"local": "ローカル",
"windowslive": "Microsoft Account",
"azure": "Azure Active Directory",
"google": "Google ID",
"facebook": "Facebook",
"github": "GitHub",
"slack": "Slack",
"ldap": "LDAP / Active Directory"
}
}

@ -0,0 +1,117 @@
{
"editor": {
"codeblockinsert": "コードブロックを挿入する",
"codeblocklanguage": "言語",
"codeblockloading": "{{name}}言語の構文を読み込み中",
"codeblockloadingerror": "エラー:言語の構文を読み込めません。",
"codeblocksuccess": "コードブロックが挿入されました。",
"codeblocktitle": "コードブロックを挿入する",
"discard": "キャンセル",
"filedeleteaction": "削除",
"filedeleteloading": "ファイルを削除中...",
"filedeletedefault": "このファイル",
"filedeletesuccess": "ファイルが削除されました。",
"fileerror": "更新されたリスティングを読み込むことはできませんでした。",
"filefolderempty": "このフォルダは空いています。",
"fileinsert": "ファイルのリンクを挿入する",
"fileloading": "ファイルを読み込み中...",
"filemoveaction": "移動...",
"filemoveerror": "移動エラー:{{err}}",
"filemoveloading": "ファイルを移動中...",
"filemovesuccess": "ファイルが移動されました。",
"fileprocessing": "処理中...",
"filerenameaction": "名称の変更",
"filesuccess": "ファイルリンクが挿入されました。",
"filetitle": "ファイルを挿入する",
"fileupload": "ファイルをアップロードする",
"fileuploaderror": "アップロードエラー:{{err}}",
"fileuploadsuccess": "ファイルがアップロードされました。",
"folders": "フォルダ",
"foldersloading": "フォルダリストを読み込み中...",
"imagetitle": "画像を挿入する",
"imageinsert": "画像を挿入する",
"imagesuccess": "画像が挿入されました。",
"imageupload": "画像をアップロードする",
"imagealignleft": "左(デフォルト)",
"imagealigncenter": "中",
"imagealignright": "右",
"imagealignlogo": "ページロゴ",
"newfolder": "新しいフォルダ",
"videoanymp4file": "標準MP4ファイル",
"videoinsert": "ビデオを挿入する",
"videolinktitle": "埋め込むビデオへのリンクを入力してください:",
"videonotsupported": "このURLは無効かサポートされていません。",
"videosuccess": "ビデオコードが挿入されました。",
"videosupportedtitle": "以下がサポートされています:",
"videotitle": "ビデオを挿入する"
},
"history": {
"pastversions": "過去のバージョン",
"timestamp": "タイムスタンプ",
"author": "著者",
"commit": "コミット",
"comparewith": "比べる...",
"view": "見る",
"reverttoversion": "バージョンに戻す",
"sidebyside": "サイドバイサイド画面"
},
"modal": {
"abort": "中止する",
"anchorerror": "クリップボードからのコピーが失敗しました。手動でURLをコピーしてください。",
"anchorsuccess": "URLがクリップボードにコピーされました。",
"anchortitle": "このセクションへのリンクをコピーする",
"copyclipboard": "クリップボードにコピーする",
"create": "作成",
"createpageinvalid": "ページパスは無効です。",
"createpagepath": "新しいページパスを入力してください:",
"createpagetitle": "新しいページを作成する",
"createuser": "ユーザーを作成する",
"createuserauthorize": "ユーザーを承認する",
"createuseremail": "Eメール",
"createuseremailplaceholder": "例taro.yamada@company.com",
"createusername": "名前:",
"createusernameplaceholder": "例:山田 太郎",
"createuserpassword": "パスポート:",
"createuserprovider": "プロバイダ:",
"createusertitle": "ユーザーを作成・承認する",
"delete": "削除",
"deletefiletitle": "を削除する?",
"deletefilewarn": "本当に削除しますか?",
"deletepagewarning": "本当にこのページを削除しますか?この操作は元に戻すことはできません!",
"deletepagetitle": "このページを削除しますか?",
"deleteusertitle": "ユーザーアカウントの削除しますか?",
"deleteuserwarning": "本当にこのユーザーアカウントを削除しますか?この操作は元に戻すことはできません!",
"discard": "キャンセル",
"discardpagecreate": "本当にこのページを離れますか?これまでの書いたものは失われます!",
"discardpageedit": "本当にこのページを離れますか?これまでの変更は失われます!",
"discardpagestay": "ページに留まる",
"discardpagetitle": "キャンセル?",
"move": "移動する",
"movepageinvalid": "このページパスは無効又は許可されていません。",
"movepagepath": "新しいページパスを入力してください:",
"movepageplaceholder": "page-name",
"movepagetitle": "ページを移動する",
"movepagewarning": "ページを移動又はページ名を変更する場合、リンクが壊れる可能性があります。その後、このページにリンクしているページは必ず編集してください。",
"newfolderloading": "新しいフォルダを作成中...",
"newfoldername": "新しいフォルダ名を入力してください:",
"newfoldernameplaceholder": "folder-name",
"newfoldersuccess": "新しいフォルダ{{name}}が作成されました。",
"newfoldertitle": "新しいフォルダ",
"renamefile": "ファイル名を変更する",
"renamefileerror": "ファイル名の変更エラー:{{err}}",
"renamefileinvalid": "ファイル名は無効です",
"renamefileloading": "ファイル名を変更中...",
"renamefilename": "新しいファイル名(拡張子なし)を入力してください:",
"renamefilenameplaceholder": "ファイル名",
"renamefiletitle": "ファイルの名前を変更する"
},
"nav": {
"home": "ホーム"
},
"search": {
"didyoumean": "もしかして...?",
"nomatch": "一致する結果はありません",
"placeholder": "検査...",
"results": "検査結果"
}
}

@ -0,0 +1,51 @@
{
"wiki": "Wiki",
"header": {
"overview": "概要",
"createdoc": "記事を作成する"
},
"footer": {
"poweredby": "Powered by",
"home": "ホーム",
"top": "トップ"
},
"sidebar": {
"nav": "ナビ",
"navigation": "ナビゲーション",
"pagecontents": "ページの内容",
"pastversions": "履歴"
},
"nav": {
"account": "アカウント",
"allpages": "全ての記事",
"create": "作成",
"discard": "キャンセル",
"edit": "編集",
"history": "履歴",
"login": "ログイン",
"logout": "ログアウト",
"move": "移動",
"myprofile": "マイページ",
"normalview": "普通の画面",
"root": "ホーム",
"savechanges": "保存する",
"savedocument": "記事を保存する",
"settings": "設定",
"source": "ソースコード",
"stats": "統計",
"sysinfo": "システム内容",
"syssettings": "システム設定",
"theme": "テーマ",
"users": "ユーザー",
"viewlatest": "最新を見る"
},
"welcome": {
"title": "Wikiへよこそ",
"subtitle": "ます、ホームページを作りましょう。",
"createhome": "ホームページの作成"
},
"loading": {
"source": "ソースコードをロード中...",
"editor": "編集画面をロード中..."
}
}

@ -0,0 +1,30 @@
{
"alreadyexists": "この記事は既に存在します",
"debugmsg": "詳細なデバッグトレイル",
"fileexists": "ファイル{{path}}は既に存在します。",
"forbidden": "禁じられました",
"forbiddendetail": "このページにアクセスするために必要な権限がありません。",
"generic": "エラーが発生しました",
"invalidaction": "無効なアクション.",
"invaliddestfolder": "無効なデスティネーションフォルダ",
"invalidfiletype": "無効なファイルタイプ",
"invalidfolder": "無効なフォルダ.",
"invalidoperation": "無効な操作",
"invalidpath": "無効なページパス",
"invaliduserid": "無効なユーザーID",
"newpasswordtooshort": "新しいパスワードが短すぎます",
"notexist": "記事{{path}}は存在しません",
"notexistdetail": "この記事を作成しますか?",
"parentinvalid": "親エントリは有効なファイルではありません。",
"parentisroot": "親エントリはトップです。",
"remotetoolarge": "モートファイルが大きすぎます",
"reservedname": "システムによって予約されているので、この名物名称で記事を作成することはできません。",
"savefailed": "記事の保存は失敗しました",
"starterfailed": "スターターコンテンツを読み込めませんでした",
"unauthorized": "無許可",
"actions": {
"create": "作成",
"gohome": "ホームへ",
"loginas": "ログイン..."
}
}

@ -0,0 +1,6 @@
{
"added": "{{path}}を追加しました",
"deleted": "{{path}}を削除又は名称を変更する",
"updated": "{{path}}を変更しました",
"uploaded": "{{path}}をアップロード"
}

@ -1,15 +1,20 @@
{
"profile": {
"displayname": "이름",
"displaynameexample": "박준원",
"displaynameexample": "홍길동",
"email": "이메일",
"lastprofileupdate": "최근 프로필 업데이트",
"membersince": "회원 가입일",
"password": "비밀번호",
"passwordverify": "비밀번호 확인",
"provider": "제공자",
"savechanges": "변경 사항 저장",
"subtitle": "프로필 및 인증 정보"
"savechanges": "변경사항 저장",
"subtitle": "프로필 및 인증 정보",
"tfa": "이중 인증",
"tfadisable": "이중 인증 해제",
"tfadisabled": "사용중지",
"tfaenable": "이중 인증 사용",
"tfaenabled": "사용"
},
"stats": {
"subtitle": "사이트 전체 통계",
@ -21,6 +26,7 @@
"subtitle": "사이트 구성 관리"
},
"system": {
"subtitle": "위키의 정보 및 유틸리티",
"systemversion": "시스템 버전",
"currentversion": "현재 버전",
"latestversion": "최신 버전",
@ -36,7 +42,30 @@
"resetaccountsbtn": "시스템 계정들 재설정",
"flushsessions": "모든 활성 사용자 세션 플러시",
"flushsessionstext": "모든 유저들이 로그아웃 됩니다. 당신의 지금 세션도 영향 받습니다.",
"flushsessionsbtn": "세션 플러시"
"flushsessionsbtn": "세션 플러시",
"hostinfo": "서버 정보",
"os": "운영 체제",
"nodeversion": "Node.js 버전",
"hostname": "서버 이름",
"cores": "CPU 코어 개수",
"totalmem": "총 메모리",
"cwd": "작업 폴더"
},
"theme": {
"subtitle": "위키의 색과 느낌을 바꿔보세요",
"primarycolor": "기본 색상",
"primarycolordesc": "상단 바, 제목, 링크 등에 쓰입니다.",
"altcolor": "포인트 색상",
"altcolordesc": "사이드 바에 쓰입니다 (어두운 톤)",
"footercolor": "하단 바 색상",
"footercolordesc": "하단 바에 쓰입니다 (밝은 톤)",
"codeblock": {
"title": "코드 블록",
"dark": "어두운 테마 사용",
"colorize": "코드 색상 강조하기"
},
"savechanges": "변경사항 저장",
"reset": "기본값으로 되돌리기"
},
"users": {
"createauthorize": "사용자 생성 / 허가",

@ -1,6 +1,108 @@
{
"editor": {
"codeblockinsert": "코드 블록 삽입",
"codeblocklanguage": "언어",
"codeblockloading": "{{name}} 코드 문법 로딩중",
"codeblockloadingerror": "오류; 언어 문법을 가져오지 못했습니다",
"codeblocksuccess": "코드 블록이 삽입되었습니다",
"codeblocktitle": "코드 블록 삽입",
"discard": "취소",
"filedeleteaction": "삭제",
"filedeleteloading": "파일 삭제 중..",
"filedeletedefault": "이 파일",
"filedeletesuccess": "파일이 성공적으로 삭제되었습니다.",
"fileerror": "업데이트된 목록을 가져올 수 없습니다.",
"filefolderempty": "이 폴더는 비어 있습니다.",
"fileinsert": "파일에 링크 삽입",
"fileloading": "파일을 불러오는중..",
"filemoveaction": "로 이동...",
"filemoveerror": "이동 실패 : {{err}}",
"filemoveloading": "파일 이동 중...",
"filemovesuccess": "파일을 성공적으로 이동했습니다.",
"fileprocessing": "처리중...",
"filerenameaction": "이름 바꾸기",
"filesuccess": "파일 링크가 삽입되었습니다.",
"filetitle": "파일 삽입",
"fileupload": "파일 업로드",
"fileuploaderror": "업로드 실패 : {{err}}",
"fileuploadsuccess": "파일이 성공적으로 업로드되었습니다.",
"folders": "폴더",
"foldersloading": "폴더 목록을 불러 오는 중...",
"imagetitle": "이미지 삽입",
"imageinsert": "이미지 삽입",
"imagesuccess": "이미지가 삽입되었습니다.",
"imageupload": "이미지 업로드",
"imagealignleft": "왼쪽 (기본)",
"imagealigncenter": "가운데",
"imagealignright": "오른쪽",
"imagealignlogo": "Page Logo",
"newfolder": "새 폴더",
"videoanymp4file": "표준 .MP4 파일",
"videoinsert": "영상 삽입",
"videolinktitle": "삽입할 영상의 링크를 입력하세요:",
"videonotsupported": "URL이 유효하지 않거나 지원되지 않는 형식입니다",
"videosuccess": "비디오 코드가 삽입되었습니다",
"videosupportedtitle": "아래 항목을 지원합니다:",
"videotitle": "영상 삽입"
},
"history": {
"pastversions": "지난 버전들",
"timestamp": "생성일",
"author": "작성자",
"commit": "변경ID",
"comparewith": "비교하기",
"view": "시각화",
"reverttoversion": "이전 버전으로 되돌리기",
"sidebyside": "나란히보기"
},
"modal": {
"move": "이동"
"abort": "중단",
"anchorerror": "클립보드 복사 실패. 수동으로 URL을 복사하십시오.",
"anchorsuccess": "URL이 클립보드에 복사되었습니다.",
"anchortitle": "이 섹션에 링크 복사",
"copyclipboard": "클립보드에 복사",
"create": "추가",
"createpageinvalid": "페이지 경로가 유효하지 않습니다",
"createpagepath": "새 페이지의 경로를 입력하세요:",
"createpagetitle": "새 페이지 생성",
"createuser": "사용자 생성",
"createuserauthorize": "사용자 승인",
"createuseremail": "이메일 주소",
"createuseremailplaceholder": "예: john.doe@company.com",
"createusername": "성명",
"createusernameplaceholder": "예: 홍길동",
"createuserpassword": "비밀번호:",
"createuserprovider": "제공자:",
"createusertitle": "사용자 계정 생성 / 승인",
"delete": "삭제",
"deletefiletitle": "삭제하시겠습니까?",
"deletefilewarn": "정말로 삭제하시겠습니까?",
"deleteusertitle": "계정을 삭제하시겠습니까?",
"deleteuserwarning": "정말로 삭제하시겠습니까? 이 작업은 복구할 수 없습니다",
"discard": "취소",
"discardpagecreate": "지금까지 작성한 내용을 저장하지 않고 나가겠습니까?",
"discardpageedit": "변경 사항을 저장하지 않고 나가시겠습니까? ",
"discardpagestay": "페이지에 머무르기",
"discardpagetitle": "취소하시겠습니까?",
"move": "이동",
"movepageinvalid": "페이지 경로가 잘못되었거나 페이지 접근 권한이 없습니다",
"movepagepath": "새로운 페이지 경로 등록",
"movepageplaceholder": "페이지 이름",
"movepagetitle": "페이지 이동",
"movepagewarning": "페이지를 이동하거나 이름을 변경하면 해당 페이지를 참조하는 다른 페이지의 링크를 꼭 수정하세요!",
"newfolderinvalid": "폴더 이름이 유효하지 않습니다",
"newfolderloading": "새 폴더 생성 중...",
"newfoldername": "새로 만들 폴더의 이름을 입력하세요:",
"newfoldernameplaceholder": "폴더명",
"newfoldersuccess": "{{name}} 폴더 생성 완료",
"newfoldertitle": "새 폴더",
"renamefile": "이름 바꾸기",
"renamefileerror": "이름 바꾸기 실패 : {{err}}",
"renamefileinvalid": "파일 이름이 유효하지 않습니다",
"renamefileloading": "파일 이름 변경 중...",
"renamefilename": "새로운 파일명(확장자 없이)을 입력하세요",
"renamefilenameplaceholder": "파일명",
"renamefiletitle": "파일 이름 바꾸기"
},
"nav": {
"home": "홈으로"

@ -27,11 +27,15 @@
"move": "이동",
"myprofile": "내 프로필",
"normalview": "기본 보기",
"root": "홈으로",
"savechanges": "변경사항 저장",
"savedocument": "문서 저장",
"settings": "설정",
"source": "소스",
"stats": "통계",
"sysinfo": "시스템 정보",
"syssettings": "시스템 설정",
"theme": "색상 테마",
"users": "사용자",
"viewlatest": "최신 보기"
},

@ -1,5 +1,5 @@
{
"alreadyexists": "이미 정보가 입력되었습니다.",
"alreadyexists": "이미 존재하는 문서입니다.",
"debugmsg": "상세한 디버그 트레일",
"fileexists": "{{path}} 이미 존재함",
"forbidden": "접근 금지",

@ -40,9 +40,9 @@
"resetaccounts": "Systeem gebruikers terugzetten naar fabrieksinstellingen",
"resetaccountstext": "De systeem gebruikers (zoals Gast) zullen teruggezet worden naar hun originele instellingen.",
"resetaccountsbtn": "Systeem accounts terugzetten",
"flushsessions": "Actieve gebruikerssessies sluiten",
"flushsessions": "Actieve gebruikerssessies beëindigen",
"flushsessionstext": "Alle actieve gebruikerssessies zullen gesloten worden. Alle gebruikers zullen opnieuw moeten inloggen. Ook jouw huidige sessie zal be-eindigen.",
"flushsessionsbtn": "Sessies sluiten",
"flushsessionsbtn": "Sessies beëindigen",
"hostinfo": "Host informatie",
"os": "Besturingssysteem",
"nodeversion": "Node.js versie",
@ -64,12 +64,12 @@
"dark": "Gebruik donkere thema",
"colorize": "Gebruik kleuren syntax"
},
"savechanges": "Veranderingen opslaan",
"savechanges": "Opslaan",
"reset": "Standaardinstellingen terugzetten"
},
"users": {
"createauthorize": "Gebruiker aanmaken ",
"subtitle": "Beheer gebruikersrechten",
"subtitle": "Gebruikers en gebruikersrechten beheren",
"name": "Naam",
"email": "E-mailadres",
"provider": "Inlog dienst",

@ -28,7 +28,7 @@
"myprofile": "Profiel",
"normalview": "Normaal uiterlijk",
"root": "Home",
"savechanges": "Veranderingen opslaan",
"savechanges": "Opslaan",
"savedocument": "Document opslaan",
"settings": "Instellingen",
"source": "Paginabron",

@ -25,7 +25,7 @@
"currentversion": "Versão Atual",
"latestversion": "Última Versão",
"upgrade": "Atualizar",
"reinstall": "Reinstalar versão atual",
"reinstall": "Re-instalar versão atual",
"versioncheckfailed": "Não é possível consultar a versão mais recente. Tente mais tarde.",
"administrativetools": "Ferramentas Administrativas",
"flushcache": "Limpar o cache e reconstruir índices",

@ -21,7 +21,7 @@
"create": "Criar",
"discard": "Descartar",
"edit": "Editar",
"history": "Histórico",
"history": "Historico",
"login": "Login",
"logout": "Sair",
"move": "Mover",
@ -31,7 +31,7 @@
"savedocument": "Salvar Documento",
"settings": "Configurações",
"source": "Fonte",
"stats": "Estatísticas",
"stats": "Statatísticas",
"syssettings": "Configurações do Sistema",
"theme": "Tema de Cor",
"users": "Usuários",

@ -56,9 +56,9 @@
"primarycolor": "原色",
"primarycolordesc": "用于顶级导航栏,标题,链接等",
"altcolor": "替代颜色",
"altcolordesc": "用于边栏(色)",
"altcolordesc": "用于边栏(色)",
"footercolor": "页脚颜色",
"footercolordesc": "用于foter较轻的音调",
"footercolordesc": "用于页脚(浅色",
"codeblock": {
"title": "代码块",
"dark": "使用黑色主题",

@ -24,5 +24,8 @@ module.exports = function (req, res, next) {
// -> Disable IE Compatibility Mode
res.set('X-UA-Compatible', 'IE=edge')
// -> Disables referrer header when navigating to a different origin
res.set('Referrer-Policy', 'same-origin')
return next()
}

@ -388,6 +388,32 @@ module.exports = {
})
},
/**
* Delete a document
*
* @param {String} entryPath The current entry path
* @param {Object} author The author user object
* @return {Promise} Promise of the operation
*/
remove(entryPath, author) {
if (_.isEmpty(entryPath) || entryPath === 'home') {
return Promise.reject(new Error(lang.t('errors:invalidpath')))
}
return git.deleteDocument(entryPath, author).then(() => {
// Delete old cache version
let oldEntryCachePath = entryHelper.getCachePath(entryPath)
fs.unlinkAsync(oldEntryCachePath).catch((err) => { return true }) // eslint-disable-line handle-callback-err
// Delete old index entry
search.delete(entryPath)
// Delete entry
return db.Entry.deleteOne({ _id: entryPath })
})
},
/**
* Generate a starter page content based on the entry path
*

@ -12,12 +12,15 @@ block rootNavRight
loading-spinner
.nav-item
if rights.write && pageData.meta.path !== 'home'
a.button.is-outlined.is-icon-only(@click='$store.dispatch("modalDeletePage/open")')
i.nc-icon-outline.ui-1_trash
a.button.is-outlined(v-on:click='$store.dispatch("modalMovePage/open")')
i.nc-icon-outline.arrows-1_shuffle-98
span= t('nav.move')
a.button.is-outlined(href='/source/' + pageData.meta.path)
i.nc-icon-outline.education_paper
span= t('nav.source')
if appconfig.theme.viewSource === 'all' || (rights.write && appconfig.theme.viewSource === 'write')
a.button.is-outlined(href='/source/' + pageData.meta.path)
i.nc-icon-outline.education_paper
span= t('nav.source')
//-a.button.is-outlined(href='/hist/' + pageData.meta.path)
i.nc-icon-outline.ui-2_time
span= t('nav.history')
@ -82,4 +85,5 @@ block content
modal-create-page(basepath=pageData.meta.path)
modal-move-page(current-path=pageData.meta.path)
modal-delete-page(current-path=pageData.meta.path)
anchor

@ -0,0 +1,15 @@
FROM node:8-alpine
LABEL maintainer="requarks.io"
RUN apk update && \
apk add bash curl git openssh supervisor --no-cache && \
mkdir -p /var/wiki
WORKDIR /var/wiki
COPY supervisord.conf /etc/supervisord.conf
COPY . /var/wiki
EXPOSE 3000
CMD ["supervisord", "--nodaemon", "-c", "/etc/supervisord.conf"]

@ -0,0 +1,23 @@
[unix_http_server]
file=/var/run/supervisor.sock
chmod=0700
[supervisord]
logfile=/logs/supervisord.log
pidfile=/var/run/supervisord.pid
childlogdir=/logs
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock
[program:wikijs]
command = node server
autostart=true
autorestart=true
priority=5
directory=/var/wiki
stdout_logfile=/logs/wiki-stdout.log
stderr_logfile=/logs/wiki-stderr.log

@ -1,52 +0,0 @@
#!/bin/bash
# Increment a version string using Semantic Versioning (SemVer) terminology.
# Parse command line options.
while getopts ":Mmp" Option
do
case $Option in
M ) major=true;;
m ) minor=true;;
p ) patch=true;;
esac
done
shift $(($OPTIND - 1))
version=$1
# Build array from version string.
a=( ${version//./ } )
# If version string is missing or has the wrong number of members, show usage message.
if [ ${#a[@]} -ne 3 ]
then
echo "usage: $(basename $0) [-Mmp] major.minor.patch"
exit 1
fi
# Increment version numbers as requested.
if [ ! -z $major ]
then
((a[0]++))
a[1]=0
a[2]=0
fi
if [ ! -z $minor ]
then
((a[1]++))
a[2]=0
fi
if [ ! -z $patch ]
then
((a[2]++))
fi
echo "${a[0]}.${a[1]}.${a[2]}"

@ -646,6 +646,30 @@ babel-core@^6.0.0, babel-core@^6.24.1:
slash "^1.0.0"
source-map "^0.5.0"
babel-core@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8"
dependencies:
babel-code-frame "^6.26.0"
babel-generator "^6.26.0"
babel-helpers "^6.24.1"
babel-messages "^6.23.0"
babel-register "^6.26.0"
babel-runtime "^6.26.0"
babel-template "^6.26.0"
babel-traverse "^6.26.0"
babel-types "^6.26.0"
babylon "^6.18.0"
convert-source-map "^1.5.0"
debug "^2.6.8"
json5 "^0.5.1"
lodash "^4.17.4"
minimatch "^3.0.4"
path-is-absolute "^1.0.1"
private "^0.1.7"
slash "^1.0.0"
source-map "^0.5.6"
babel-generator@^6.18.0, babel-generator@^6.25.0:
version "6.25.0"
resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.25.0.tgz#33a1af70d5f2890aeb465a4a7793c1df6a9ea9fc"
@ -1553,6 +1577,15 @@ bunyan@^1.8.3:
mv "~2"
safe-json-stringify "~1"
bunyan@~1.8.12:
version "1.8.12"
resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.12.tgz#f150f0f6748abdd72aeae84f04403be2ef113797"
optionalDependencies:
dtrace-provider "~0.8"
moment "^2.10.6"
mv "~2"
safe-json-stringify "~1"
busboy@^0.2.11:
version "0.2.14"
resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453"
@ -2183,6 +2216,10 @@ deep-extend@~0.4.0, deep-extend@~0.4.1:
version "0.4.2"
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f"
deep-extend@~0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.0.tgz#6ef4a09b05f98b0e358d6d93d4ca3caec6672803"
deep-is@~0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
@ -3001,6 +3038,18 @@ finalhandler@~1.0.3:
statuses "~1.3.1"
unpipe "~1.0.0"
finalhandler@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.4.tgz#18574f2e7c4b98b8ae3b230c21f201f31bdb3fb7"
dependencies:
debug "2.6.8"
encodeurl "~1.0.1"
escape-html "~1.0.3"
on-finished "~2.3.0"
parseurl "~1.3.1"
statuses "~1.3.1"
unpipe "~1.0.0"
find-line-column@^0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/find-line-column/-/find-line-column-0.5.2.tgz#db00238ff868551a182e74a103416d295a98c8ca"
@ -3609,6 +3658,15 @@ http-errors@~1.6.1:
setprototypeof "1.0.3"
statuses ">= 1.3.1 < 2"
http-errors@~1.6.2:
version "1.6.2"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736"
dependencies:
depd "1.1.1"
inherits "2.0.3"
setprototypeof "1.0.3"
statuses ">= 1.3.1 < 2"
http-signature@~1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
@ -5102,6 +5160,12 @@ mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.6, m
dependencies:
mime-db "~1.27.0"
mime-types@~2.1.16:
version "2.1.16"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.16.tgz#2b858a52e5ecd516db897ac2be87487830698e23"
dependencies:
mime-db "~1.29.0"
mime@1.3.4:
version "1.3.4"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53"
@ -5496,7 +5560,7 @@ onetime@^2.0.0:
dependencies:
mimic-fn "^1.0.0"
opencollective@^1.0.3:
opencollective@^1.0.3, opencollective@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/opencollective/-/opencollective-1.0.3.tgz#aee6372bc28144583690c3ca8daecfc120dd0ef1"
dependencies:
@ -7976,6 +8040,10 @@ xml2js@^0.4.5:
sax ">=0.6.0"
xmlbuilder "^4.1.0"
xml@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5"
xmlbuilder@^4.1.0:
version "4.2.1"
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz#aa58a3041a066f90eaa16c2f5389ff19f3f461a5"

Loading…
Cancel
Save