#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing,
#  software distributed under the License is distributed on an
#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#  KIND, either express or implied.  See the License for the
#  specific language governing permissions and limitations
#  under the License.

#
#  This is the main i18n resource file for JSPWiki internal
#  code, the so-called core code.
#
# Please, do not forget to use proper HTML entities, so
#   " = &quot;
#   ' = &#39;  Note that &apos; is NOT HTML, and does not necessarily work in all browsers.



#
#  Time/date formatting.  Some plugins might be using some specific formats,
#  but you are free to use these times and dates.
#

# Timedate format used when a full time/date is used
common.datetimeformat = HH:mm:ss dd-MMM-yyyy zzz

# Time stamp format when a simple time stamp is needed (without date)
common.timeformat = HH:mm:ss

# Date stamp format when showing just the date.
common.dateformat = EEEE, MMMM d, yyyy

# "Unknown author"

common.unknownauthor = UnknownAuthor

# Decisions: {0}=task owner; {1}=requester; {2-9}=additional message arguments for workflow
decision.editWikiApproval=Edit page {2}

# Security

security.error.noaccess.logged=You don&#39;t have access to &#39;{0}&#39;. Do you want to log in as another user?.
security.error.noaccess=You don&#39;t have access to &#39;{0}&#39;. Please log in first.
security.error.wrongip=Attempt to post from a different IP address than where the page was originally fetched.

security.error.createprofilebeforelogin=You must log in before creating a profile.
security.error.blankpassword=Password cannot be blank
security.error.passwordnomatch=Passwords don&#39;t match

security.error.illegalfullname=Full name ''{0}'' fails validation checks
security.error.illegalloginname=Login name ''{0}'' fails validation checks

security.error.cannot.rename=Cannot rename: the login name ''{0}'' is already taken.
security.error.fullname.taken=The full name ''{0}'' is already taken.
security.error.login.taken=The login name ''{0}'' is already taken.

# These should roughly match whatever is used in default.properties for UserProfile.jsp
security.user.loginname=Login name
security.user.fullname=Full name
security.user.email=Email address
security.user.fullname.invalid=Invalid Username

# Renaming

rename.empty=New page name empty. 
rename.error.title=Unable to rename page
rename.error.reason=Reason:
rename.identical=Page names identical. 
rename.exists=Page "{0}" already exists. Please change the new name or delete the page "{0}" first.
rename.unknownerror=An unknown error occurred ({0})

# Login.jsp  
#login.error.capslock=Invalid login (please check your Caps Lock key) #obsolete
login.error.password=Not a valid login.
login.error.noaccess=It seems you don't have access to that. Sorry.

# Lostpassword.jsp

# 0 = login name, 1 = password, 2 = URL, 3 = Application name (as signature)
# This is text, not HTML.
lostpwd.newpassword.email=As requested, your new password for login "{0}" is "{1}" \
                    \n\nYou may log in at {2}.\n\n-- {3}
lostpwd.newpassword.subject=New password for {0}
lostpwd.nouser=No user or email "{0}" was found.
lostpwd.nomail=Internal error: couldn't send the email!  Contact the site administrator, please.
lostpwd.emailed=A new password has been emailed to the requested account.

lostpwd.reset.title=Password reset
lostpwd.reset.unable=Unable to reset password.  Please try again.

lostpwd.reset.blurb=Lost or forgot your password?  Enter your account name or email here:
lostpwd.reset.submit=Reset password!

# TraditionalDiffProvider

diff.traditional.added=At line {0} added {1}
diff.traditional.changed=At line {0} changed {1}
diff.traditional.removed=At line {0} removed {1}
diff.traditional.oneline=one line
diff.traditional.lines={2} lines

# InputValidator

validate.unsafechars={0} cannot contain these characters: {1}
validate.invalidemail={0} is not valid
validate.cantbenull={0} cannot be blank

# UserProfileTag

userprofile.nogroups=(none)
userprofile.noroles=(none)

# NewGroup.jsp
newgroup.exists=Group {0} already exists. Try another name.

# JSPWikiMarkupParser 

markupparser.error.invalidset = Invalid SET found: {0}
markupparser.error.nointerwikiref = No InterWiki reference defined in properties for Wiki called "{0}"!
markupparser.error.parserfailure = Parser failed: {0}
markupparser.error.javascriptattempt = Attempt to output javascript!
markupparser.link.create = Create "{0}"

# Captcha.jsp
captcha.js.humancheckcomplete.alert=Please correctly identify the cats.
captcha.description=We believe you may be a robot or a spammer.  Could you please pick out the kittens from the below \
                    set of images, so we know you are a normal human being?
captcha.asirra.please.select=Please select all the cat photos:
captcha.asirra.adopt.me=Adopt me
captcha.asirra.a.get.challenge=Request different images.
captcha.asirra.a.whatsthis=What is this?
captcha.submit=Submit

# Install.jsp
install.jsp.title=JSPWiki Installer
install.jsp.intro.title=JSPWiki Installer
install.jsp.intro.p1=Welcome\!  This little JSP page is here to help you do the first difficult stage of JSPWiki installation.  If you're seeing this page, you have already installed JSPWiki correctly inside your container.
install.jsp.intro.p2=There are now some things that you should configure.  When you press Configure, the \
                     <code>jspwiki.properties</code> file from the distribution will be modified, or if it \
                     can't be found, a new one will be created.
install.jsp.intro.p3=This setup system is really meant for people who just want to be up and running really quickly. \
                     If you want to integrate JSPWiki with an existing system, I would recommend that you go and edit \
                     the <code>jspwiki.properties</code> file directly.  You can find a sample config file from \
                     <code>yourwiki/WEB-INF/</code>.
install.jsp.install.info=Good news: 
install.jsp.install.warning=Warning: 
install.jsp.install.error=Could not save configuration: 
install.jsp.install.msg.rnd.pwd=Because no administrator account exists yet, JSPWiki created one for you, with a \
                                random password. You can change this password later, of course. The account''s id is \
                                {0} and the password is {1}. Please write this information down and keep it in a \
                                safe place. JSPWiki also created a wiki group called {2} that contains this user.
install.jsp.install.msg.admin.notexists=Is this the first time you've run the Installer? If it is, you should know that after JSPWiki validates and saves your configuration for the first time, you will need administrative privileges to access this page again. We do this to prevent random people on the Internet from doing bad things to your wiki.   

install.jsp.basics.title=Basics
install.jsp.basics.appname.label=Application Name
install.jsp.basics.appname.desc=What should your wiki be called?  Try and make this a relatively short name.
install.jsp.basics.baseurl.label=Base URL
install.jsp.basics.baseurl.desc=Please tell JSPWiki where your wiki is located.
install.jsp.basics.page.storage.label=Page storage
install.jsp.basics.page.storage.desc=By default, JSPWiki will use the VersioningFileProvider that stores files in a particular \
                                     directory on your hard drive. If you specify a directory that does not exist, JSPWiki will \
                                     create one for you. All attachments will also be put in the same directory.

install.jsp.security.title=Security
install.jsp.security.sec.conf.label=Security configuration
install.jsp.security.sec.conf.opt1=JAAS plus container security (default)
install.jsp.security.sec.conf.opt2=Container security only
install.jsp.security.sec.conf.desc=By default, JSPWiki manages access to resources using a JAAS-based security system. \
                                   It will also respect any container security constraints you might have, \
                                   if you've enabled them in your <code>web.xml</code> file. If you disable JAAS security, \
                                   JSPWiki might not work as you expect. But sometimes you might want to do this if you're \
                                   trying to troubleshoot.
install.jsp.security.admaccount.label=Administrator account
install.jsp.security.admaccount.enabled=Enabled
install.jsp.security.admaccount.notenabled=Not enabled
install.jsp.security.admaccount.enabled.desc=This wiki has an administrator account named <strong>admin</strong> that is part of \
                                             the wiki group <strong>Admin</strong>. By default, JSPWiki's security policy grants \
                                             all members of the Admin group the all-powerful <code>AllPermission</code>.
install.jsp.security.admaccount.notenabled.desc=This wiki doesn't seem to have an administrator account. When you click <em>Configure\!</em>,JSPWiki will create one for you.

install.jsp.adv.settings.title=Advanced Settings
install.jsp.adv.settings.logfile.label=Log files
install.jsp.adv.settings.logfile.desc=JSPWiki uses Apache Log4j for logging.  Please tell JSPWiki where the log files should go.
install.jsp.adv.settings.workdir.label=Work directory
install.jsp.adv.settings.workdir.desc=This is the place where all caches and other runtime stuff is stored.
install.jsp.instr.desc=After you click <em>Configure\!</em>, the installer will write your settings to <code>{0}</code>. It will also create an Administrator account with a random password and a corresponding Admin group. 
install.jsp.instr.submit=Configure!
install.jsp.validated.new.props=Here is your new jspwiki.properties

# Installer.java
install.installer.unable.read.props=Unable to read properties: {0}
install.installer.default.appname=MyWiki
install.installer.default.pagedir=Please configure me!
install.installer.props.saved=Your new properties have been saved.  Please restart your container (unless this was your first \
                              install).  Scroll down a bit to see your new jspwiki.properties.
install.installer.props.notsaved=Unable to write properties\: {0}. Please copy the file below as your jspwiki.properties\:\n{1}
install.installer.validate.baseurl=You must define the base URL for this wiki.
install.installer.validate.pagedir=You must define the location where the files are stored.
install.installer.validate.appname=You must define the application name.
install.installer.validate.workdir=You must define a work directory.
install.installer.validate.logdir=You must define a log directory.

# RSSImageLinkTag
rss.title=RSS feed for page {0}

# AttachmentManager
attach.unwanted.file=Unwanted file name.
attach.empty.file=Empty file name given.
attach.parent.not.exist=Parent page does not exist

# VariableManager
varmgr.not.logged.in=not logged in
varmgr.authenticated=authenticated
varmgr.asserted=asserted
varmgr.anonymous=anonymous
