#
#  This is the main i18n resource file for JSPWiki internal
#  code, the so-called core code.
#
# Anrede Du oder Sie? http://lists.wikimedia.org/pipermail/wikide-l/2007-July/019595.html
#
# 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.


# 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 &quot;{0}&quot; is illegal
security.error.illegalloginname=Login name &quot;{0}&quot; is illegal

# 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

# Renaming

rename.empty=New page name empty.  Click "back" on your browser and fill in the new name.
rename.error.title=Unable to rename page
rename.error.reason=Reason:
rename.identical=Page names identical.  Click "back" on your browser and change the new name.
rename.exists=Page "{0}" already exists. Click "back" on your browser and 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 &#39;{0}&#39; 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 submit, 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 Jakarta 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.