summaryrefslogtreecommitdiffstats
path: root/app/models/project.rb
blob: f9030bdf2a21c7aa15ba983e3ff51825ea9c48b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
# redMine - project management software
# Copyright (C) 2006  Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

class Project < ActiveRecord::Base
  # Project statuses
  STATUS_ACTIVE     = 1
  STATUS_ARCHIVED   = 9
  
  has_many :members, :include => :user, :conditions => "#{User.table_name}.type='User' AND #{User.table_name}.status=#{User::STATUS_ACTIVE}"
  has_many :member_principals, :class_name => 'Member', 
                               :include => :principal,
                               :conditions => "#{Principal.table_name}.type='Group' OR (#{Principal.table_name}.type='User' AND #{Principal.table_name}.status=#{User::STATUS_ACTIVE})"
  has_many :users, :through => :members
  has_many :principals, :through => :member_principals, :source => :principal
  
  has_many :enabled_modules, :dependent => :delete_all
  has_and_belongs_to_many :trackers, :order => "#{Tracker.table_name}.position"
  has_many :issues, :dependent => :destroy, :order => "#{Issue.table_name}.created_on DESC", :include => [:status, :tracker]
  has_many :issue_changes, :through => :issues, :source => :journals
  has_many :versions, :dependent => :destroy, :order => "#{Version.table_name}.effective_date DESC, #{Version.table_name}.name DESC"
  has_many :time_entries, :dependent => :delete_all
  has_many :queries, :dependent => :delete_all
  has_many :documents, :dependent => :destroy
  has_many :news, :dependent => :delete_all, :include => :author
  has_many :issue_categories, :dependent => :delete_all, :order => "#{IssueCategory.table_name}.name"
  has_many :boards, :dependent => :destroy, :order => "position ASC"
  has_one :repository, :dependent => :destroy
  has_many :changesets, :through => :repository
  has_one :wiki, :dependent => :destroy
  # Custom field for the project issues
  has_and_belongs_to_many :issue_custom_fields, 
                          :class_name => 'IssueCustomField',
                          :order => "#{CustomField.table_name}.position",
                          :join_table => "#{table_name_prefix}custom_fields_projects#{table_name_suffix}",
                          :association_foreign_key => 'custom_field_id'
                          
  acts_as_nested_set :order => 'name', :dependent => :destroy
  acts_as_attachable :view_permission => :view_files,
                     :delete_permission => :manage_files

  acts_as_customizable
  acts_as_searchable :columns => ['name', 'description'], :project_key => 'id', :permission => nil
  acts_as_event :title => Proc.new {|o| "#{l(:label_project)}: #{o.name}"},
                :url => Proc.new {|o| {:controller => 'projects', :action => 'show', :id => o.id}},
                :author => nil

  attr_protected :status, :enabled_module_names
  
  validates_presence_of :name, :identifier
  validates_uniqueness_of :name, :identifier
  validates_associated :repository, :wiki
  validates_length_of :name, :maximum => 30
  validates_length_of :homepage, :maximum => 255
  validates_length_of :identifier, :in => 1..20
  # donwcase letters, digits, dashes but not digits only
  validates_format_of :identifier, :with => /^(?!\d+$)[a-z0-9\-]*$/, :if => Proc.new { |p| p.identifier_changed? }
  # reserved words
  validates_exclusion_of :identifier, :in => %w( new )

  before_destroy :delete_all_members

  named_scope :has_module, lambda { |mod| { :conditions => ["#{Project.table_name}.id IN (SELECT em.project_id FROM #{EnabledModule.table_name} em WHERE em.name=?)", mod.to_s] } }
  named_scope :active, { :conditions => "#{Project.table_name}.status = #{STATUS_ACTIVE}"}
  named_scope :all_public, { :conditions => { :is_public => true } }
  named_scope :visible, lambda { { :conditions => Project.visible_by(User.current) } }
  
  def identifier=(identifier)
    super unless identifier_frozen?
  end
  
  def identifier_frozen?
    errors[:identifier].nil? && !(new_record? || identifier.blank?)
  end
  
  def issues_with_subprojects(include_subprojects=false)
    conditions = nil
    if include_subprojects
      ids = [id] + descendants.collect(&:id)
      conditions = ["#{Project.table_name}.id IN (#{ids.join(',')}) AND #{Project.visible_by}"]
    end
    conditions ||= ["#{Project.table_name}.id = ?", id]
    # Quick and dirty fix for Rails 2 compatibility
    Issue.send(:with_scope, :find => { :conditions => conditions }) do 
      Version.send(:with_scope, :find => { :conditions => conditions }) do
        yield
      end
    end 
  end

  # returns latest created projects
  # non public projects will be returned only if user is a member of those
  def self.latest(user=nil, count=5)
    find(:all, :limit => count, :conditions => visible_by(user), :order => "created_on DESC")	
  end	

  # Returns a SQL :conditions string used to find all active projects for the specified user.
  #
  # Examples:
  #     Projects.visible_by(admin)        => "projects.status = 1"
  #     Projects.visible_by(normal_user)  => "projects.status = 1 AND projects.is_public = 1"
  def self.visible_by(user=nil)
    user ||= User.current
    if user && user.admin?
      return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE}"
    elsif user && user.memberships.any?
      return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE} AND (#{Project.table_name}.is_public = #{connection.quoted_true} or #{Project.table_name}.id IN (#{user.memberships.collect{|m| m.project_id}.join(',')}))"
    else
      return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE} AND #{Project.table_name}.is_public = #{connection.quoted_true}"
    end
  end
  
  def self.allowed_to_condition(user, permission, options={})
    statements = []
    base_statement = "#{Project.table_name}.status=#{Project::STATUS_ACTIVE}"
    if perm = Redmine::AccessControl.permission(permission)
      unless perm.project_module.nil?
        # If the permission belongs to a project module, make sure the module is enabled
        base_statement << " AND #{Project.table_name}.id IN (SELECT em.project_id FROM #{EnabledModule.table_name} em WHERE em.name='#{perm.project_module}')"
      end
    end
    if options[:project]
      project_statement = "#{Project.table_name}.id = #{options[:project].id}"
      project_statement << " OR (#{Project.table_name}.lft > #{options[:project].lft} AND #{Project.table_name}.rgt < #{options[:project].rgt})" if options[:with_subprojects]
      base_statement = "(#{project_statement}) AND (#{base_statement})"
    end
    if user.admin?
      # no restriction
    else
      statements << "1=0"
      if user.logged?
        statements << "#{Project.table_name}.is_public = #{connection.quoted_true}" if Role.non_member.allowed_to?(permission)
        allowed_project_ids = user.memberships.select {|m| m.roles.detect {|role| role.allowed_to?(permission)}}.collect {|m| m.project_id}
        statements << "#{Project.table_name}.id IN (#{allowed_project_ids.join(',')})" if allowed_project_ids.any?
      elsif Role.anonymous.allowed_to?(permission)
        # anonymous user allowed on public project
        statements << "#{Project.table_name}.is_public = #{connection.quoted_true}" 
      else
        # anonymous user is not authorized
      end
    end
    statements.empty? ? base_statement : "((#{base_statement}) AND (#{statements.join(' OR ')}))"
  end

  # Returns a :conditions SQL string that can be used to find the issues associated with this project.
  #
  # Examples:
  #   project.project_condition(true)  => "(projects.id = 1 OR (projects.lft > 1 AND projects.rgt < 10))"
  #   project.project_condition(false) => "projects.id = 1"
  def project_condition(with_subprojects)
    cond = "#{Project.table_name}.id = #{id}"
    cond = "(#{cond} OR (#{Project.table_name}.lft > #{lft} AND #{Project.table_name}.rgt < #{rgt}))" if with_subprojects
    cond
  end
  
  def self.find(*args)
    if args.first && args.first.is_a?(String) && !args.first.match(/^\d*$/)
      project = find_by_identifier(*args)
      raise ActiveRecord::RecordNotFound, "Couldn't find Project with identifier=#{args.first}" if project.nil?
      project
    else
      super
    end
  end
 
  def to_param
    # id is used for projects with a numeric identifier (compatibility)
    @to_param ||= (identifier.to_s =~ %r{^\d*$} ? id : identifier)
  end
  
  def active?
    self.status == STATUS_ACTIVE
  end
  
  # Archives the project and its descendants recursively
  def archive
    # Archive subprojects if any
    children.each do |subproject|
      subproject.archive
    end
    update_attribute :status, STATUS_ARCHIVED
  end
  
  # Unarchives the project
  # All its ancestors must be active
  def unarchive
    return false if ancestors.detect {|a| !a.active?}
    update_attribute :status, STATUS_ACTIVE
  end
  
  # Returns an array of projects the project can be moved to
  def possible_parents
    @possible_parents ||= (Project.active.find(:all) - self_and_descendants)
  end
  
  # Sets the parent of the project
  # Argument can be either a Project, a String, a Fixnum or nil
  def set_parent!(p)
    unless p.nil? || p.is_a?(Project)
      if p.to_s.blank?
        p = nil
      else
        p = Project.find_by_id(p)
        return false unless p
      end
    end
    if p == parent && !p.nil?
      # Nothing to do
      true
    elsif p.nil? || (p.active? && move_possible?(p))
      # Insert the project so that target's children or root projects stay alphabetically sorted
      sibs = (p.nil? ? self.class.roots : p.children)
      to_be_inserted_before = sibs.detect {|c| c.name.to_s.downcase > name.to_s.downcase }
      if to_be_inserted_before
        move_to_left_of(to_be_inserted_before)
      elsif p.nil?
        if sibs.empty?
          # move_to_root adds the project in first (ie. left) position
          move_to_root
        else
          move_to_right_of(sibs.last) unless self == sibs.last
        end
      else
        # move_to_child_of adds the project in last (ie.right) position
        move_to_child_of(p)
      end
      true
    else
      # Can not move to the given target
      false
    end
  end
  
  # Returns an array of the trackers used by the project and its active sub projects
  def rolled_up_trackers
    @rolled_up_trackers ||=
      Tracker.find(:all, :include => :projects,
                         :select => "DISTINCT #{Tracker.table_name}.*",
                         :conditions => ["#{Project.table_name}.lft >= ? AND #{Project.table_name}.rgt <= ? AND #{Project.table_name}.status = #{STATUS_ACTIVE}", lft, rgt],
                         :order => "#{Tracker.table_name}.position")
  end
  
  # Returns a hash of project users grouped by role
  def users_by_role
    members.find(:all, :include => [:user, :roles]).inject({}) do |h, m|
      m.roles.each do |r|
        h[r] ||= []
        h[r] << m.user
      end
      h
    end
  end
  
  # Deletes all project's members
  def delete_all_members
    me, mr = Member.table_name, MemberRole.table_name
    connection.delete("DELETE FROM #{mr} WHERE #{mr}.member_id IN (SELECT #{me}.id FROM #{me} WHERE #{me}.project_id = #{id})")
    Member.delete_all(['project_id = ?', id])
  end
  
  # Users issues can be assigned to
  def assignable_users
    members.select {|m| m.roles.detect {|role| role.assignable?}}.collect {|m| m.user}.sort
  end
  
  # Returns the mail adresses of users that should be always notified on project events
  def recipients
    members.select {|m| m.mail_notification? || m.user.mail_notification?}.collect {|m| m.user.mail}
  end
  
  # Returns an array of all custom fields enabled for project issues
  # (explictly associated custom fields and custom fields enabled for all projects)
  def all_issue_custom_fields
    @all_issue_custom_fields ||= (IssueCustomField.for_all + issue_custom_fields).uniq.sort
  end
  
  def project
    self
  end
  
  def <=>(project)
    name.downcase <=> project.name.downcase
  end
  
  def to_s
    name
  end
  
  # Returns a short description of the projects (first lines)
  def short_description(length = 255)
    description.gsub(/^(.{#{length}}[^\n\r]*).*$/m, '\1...').strip if description
  end
  
  # Return true if this project is allowed to do the specified action.
  # action can be:
  # * a parameter-like Hash (eg. :controller => 'projects', :action => 'edit')
  # * a permission Symbol (eg. :edit_project)
  def allows_to?(action)
    if action.is_a? Hash
      allowed_actions.include? "#{action[:controller]}/#{action[:action]}"
    else
      allowed_permissions.include? action
    end
  end
  
  def module_enabled?(module_name)
    module_name = module_name.to_s
    enabled_modules.detect {|m| m.name == module_name}
  end
  
  def enabled_module_names=(module_names)
    if module_names && module_names.is_a?(Array)
      module_names = module_names.collect(&:to_s)
      # remove disabled modules
      enabled_modules.each {|mod| mod.destroy unless module_names.include?(mod.name)}
      # add new modules
      module_names.each {|name| enabled_modules << EnabledModule.new(:name => name)}
    else
      enabled_modules.clear
    end
  end
  
  # Returns an auto-generated project identifier based on the last identifier used
  def self.next_identifier
    p = Project.find(:first, :order => 'created_on DESC')
    p.nil? ? nil : p.identifier.to_s.succ
  end

  # Copies and saves the Project instance based on the +project+.
  # Will duplicate the source project's:
  # * Issues
  # * Members
  # * Queries
  def copy(project)
    project = project.is_a?(Project) ? project : Project.find(project)

    Project.transaction do
      # Wikis
      self.wiki = Wiki.new(project.wiki.attributes.dup.except("project_id"))
      project.wiki.pages.each do |page|
        new_wiki_content = WikiContent.new(page.content.attributes.dup.except("page_id"))
        new_wiki_page = WikiPage.new(page.attributes.dup.except("wiki_id"))
        new_wiki_page.content = new_wiki_content

        self.wiki.pages << new_wiki_page
      end
      
      # Versions
      project.versions.each do |version|
        new_version = Version.new
        new_version.attributes = version.attributes.dup.except("project_id")
        self.versions << new_version
      end

      project.issue_categories.each do |issue_category|
        new_issue_category = IssueCategory.new
        new_issue_category.attributes = issue_category.attributes.dup.except("project_id")
        self.issue_categories << new_issue_category
      end
      
      # Issues
      project.issues.each do |issue|
        new_issue = Issue.new
        new_issue.copy_from(issue)
        # Reassign fixed_versions by name, since names are unique per
        # project and the versions for self are not yet saved
        if issue.fixed_version
          new_issue.fixed_version = self.versions.select {|v| v.name == issue.fixed_version.name}.first
        end
        # Reassign the category by name, since names are unique per
        # project and the categories for self are not yet saved
        if issue.category
          new_issue.category = self.issue_categories.select {|c| c.name == issue.category.name}.first
        end
        
        self.issues << new_issue
      end
    
      # Members
      project.members.each do |member|
        new_member = Member.new
        new_member.attributes = member.attributes.dup.except("project_id")
        new_member.role_ids = member.role_ids.dup
        new_member.project = self
        self.members << new_member
      end
      
      # Queries
      project.queries.each do |query|
        new_query = Query.new
        new_query.attributes = query.attributes.dup.except("project_id", "sort_criteria")
        new_query.sort_criteria = query.sort_criteria if query.sort_criteria
        new_query.project = self
        self.queries << new_query
      end

      Redmine::Hook.call_hook(:model_project_copy_before_save, :source_project => project, :destination_project => self)
      self.save
    end
  end

  
  # Copies +project+ and returns the new instance.  This will not save
  # the copy
  def self.copy_from(project)
    begin
      project = project.is_a?(Project) ? project : Project.find(project)
      if project
        # clear unique attributes
        attributes = project.attributes.dup.except('name', 'identifier', 'id', 'status')
        copy = Project.new(attributes)
        copy.enabled_modules = project.enabled_modules
        copy.trackers = project.trackers
        copy.custom_values = project.custom_values.collect {|v| v.clone}
        copy.issue_custom_fields = project.issue_custom_fields
        return copy
      else
        return nil
      end
    rescue ActiveRecord::RecordNotFound
      return nil
    end
  end
  
private
  def allowed_permissions
    @allowed_permissions ||= begin
      module_names = enabled_modules.collect {|m| m.name}
      Redmine::AccessControl.modules_permissions(module_names).collect {|p| p.name}
    end
  end

  def allowed_actions
    @actions_allowed ||= allowed_permissions.inject([]) { |actions, permission| actions += Redmine::AccessControl.allowed_actions(permission) }.flatten
  end
end
x/files/delete-display-no-trashbin Nextcloud server, a safe home for all your data: https://github.com/nextcloud/serverwww-data
summaryrefslogtreecommitdiffstats
path: root/settings/l10n/ja_JP.php
blob: d6e83a6d7bf0784294e43032fc78fbc72209c38b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "アプリストアからリストをロードできません",
"Authentication error" => "認証エラー",
"Unable to change display name" => "表示名を変更できません",
"Group already exists" => "グループは既に存在しています",
"Unable to add group" => "グループを追加できません",
"Could not enable app. " => "アプリを有効にできませんでした。",
"Email saved" => "メールアドレスを保存しました",
"Invalid email" => "無効なメールアドレス",
"Unable to delete group" => "グループを削除できません",
"Unable to delete user" => "ユーザを削除できません",
"Language changed" => "言語が変更されました",
"Invalid request" => "無効なリクエストです",
"Admins can't remove themself from the admin group" => "管理者は自身を管理者グループから削除できません。",
"Unable to add user to group %s" => "ユーザをグループ %s に追加できません",
"Unable to remove user from group %s" => "ユーザをグループ %s から削除できません",
"Couldn't update app." => "アプリを更新出来ませんでした。",
"Update to {appversion}" => "{appversion} に更新",
"Disable" => "無効",
"Enable" => "有効",
"Please wait...." => "しばらくお待ちください。",
"Updating...." => "更新中....",
"Error while updating app" => "アプリの更新中にエラーが発生",
"Error" => "エラー",
"Updated" => "更新済み",
"Saving..." => "保存中...",
"deleted" => "削除",
"undo" => "元に戻す",
"Unable to remove user" => "ユーザを削除出来ません",
"Groups" => "グループ",
"Group Admin" => "グループ管理者",
"Delete" => "削除",
"add group" => "グループを追加",
"A valid username must be provided" => "有効なユーザ名を指定する必要があります",
"Error creating user" => "ユーザ作成エラー",
"A valid password must be provided" => "有効なパスワードを指定する必要があります",
"__language_name__" => "Japanese (日本語)",
"Security Warning" => "セキュリティ警告",
"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "データディレクトリとファイルが恐らくインターネットからアクセスできるようになっています。ownCloudが提供する .htaccessファイルが機能していません。データディレクトリを全くアクセスできないようにするか、データディレクトリをウェブサーバのドキュメントルートの外に置くようにウェブサーバを設定することを強くお勧めします。 ",
"Setup Warning" => "セットアップ警告",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "WebDAVインタフェースが動作していないと考えられるため、あなたのWEBサーバはまだファイルの同期を許可するように適切な設定がされていません。",
"Please double check the <a href='%s'>installation guides</a>." => "<a href='%s'>インストールガイド</a>をよく確認してください。",
"Module 'fileinfo' missing" => "モジュール 'fileinfo' が見つかりません",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." => "PHP のモジュール 'fileinfo' が見つかりません。mimeタイプの検出を精度良く行うために、このモジュールを有効にすることを強くお勧めします。",
"Locale not working" => "ロケールが動作していません",
"Internet connection not working" => "インターネット接続が動作していません",
"This ownCloud server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features of ownCloud." => "この ownCloud サーバには有効なインターネット接続がありません。これは、外部ストレージのマウント、更新の通知、サードパーティ製アプリのインストール、のようないくつかの機能が動作しないことを意味しています。リモートからファイルにアクセスしたり、通知メールを送信したりすることもできません。全ての機能を利用するためには、このサーバのインターネット接続を有効にすることを推奨します。",
"Cron" => "Cron",
"Execute one task with each page loaded" => "各ページの読み込み時にタスクを実行する",
"cron.php is registered at a webcron service. Call the cron.php page in the owncloud root once a minute over http." => "cron.php は webcron サービスに登録されています。owncloud のルートにある cron.php のページを http 経由で1分に1回呼び出して下さい。",
"Use systems cron service. Call the cron.php file in the owncloud folder via a system cronjob once a minute." => "システムの cron サービスを利用する。システムの cronjob を通して1分に1回 owncloud 内の cron.php ファイルを呼び出して下さい。",
"Sharing" => "共有",
"Enable Share API" => "共有APIを有効にする",
"Allow apps to use the Share API" => "アプリからの共有APIの利用を許可する",
"Allow links" => "リンクを許可する",
"Allow users to share items to the public with links" => "リンクによりアイテムを公開することを許可する",
"Allow resharing" => "再共有を許可する",
"Allow users to share items shared with them again" => "ユーザが共有しているアイテムの再共有を許可する",
"Allow users to share with anyone" => "ユーザが誰とでも共有することを許可する",
"Allow users to only share with users in their groups" => "ユーザにグループ内のユーザとのみ共有を許可する",
"Security" => "セキュリティ",
"Enforce HTTPS" => "常にHTTPSを使用する",
"Enforces the clients to connect to ownCloud via an encrypted connection." => "クライアントからownCloudへの接続を常に暗号化する",
"Please connect to this ownCloud instance via HTTPS to enable or disable the SSL enforcement." => "常にSSL接続を有効/無効にするために、HTTPS経由でこの ownCloud に接続して下さい。",
"Log" => "ログ",
"Log level" => "ログレベル",
"More" => "詳細",
"Version" => "バージョン",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "<a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>により開発されています、<a href=\"https://github.com/owncloud\" target=\"_blank\">ソースコード</a>ライセンスは、<a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> ライセンスにより提供されています。",
"Add your App" => "アプリを追加",
"More Apps" => "さらにアプリを表示",
"Select an App" => "アプリを選択してください",
"See application page at apps.owncloud.com" => "apps.owncloud.com でアプリケーションのページを見てください",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-ライセンス: <span class=\"author\"></span>",
"Update" => "更新",
"User Documentation" => "ユーザドキュメント",
"Administrator Documentation" => "管理者ドキュメント",
"Online Documentation" => "オンラインドキュメント",
"Forum" => "フォーラム",
"Bugtracker" => "バグトラッカー",
"Commercial Support" => "コマーシャルサポート",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "現在、<strong>%s</strong> / <strong>%s</strong> を利用しています",
"Get the apps to sync your files" => "あなたのファイルを同期するためのアプリを取得",
"Show First Run Wizard again" => "初回実行ウィザードを再度表示する",
"Password" => "パスワード",
"Your password was changed" => "パスワードを変更しました",
"Unable to change your password" => "パスワードを変更することができません",
"Current password" => "現在のパスワード",
"New password" => "新しいパスワード",
"Change password" => "パスワードを変更",
"Display Name" => "表示名",
"Your display name was changed" => "あなたの表示名を変更しました",
"Unable to change your display name" => "あなたの表示名を変更できません",
"Change display name" => "表示名を変更",
"Email" => "Email",
"Your email address" => "あなたのメールアドレス",
"Fill in an email address to enable password recovery" => "※パスワード回復を有効にするにはメールアドレスの入力が必要です",
"Language" => "言語",
"Help translate" => "翻訳に協力する",
"WebDAV" => "WebDAV",
"Use this address to connect to your ownCloud in your file manager" => "ファイルマネージャでownCloudに接続する際はこのアドレスを利用してください",
"Login Name" => "ログイン名",
"Create" => "作成",
"Default Storage" => "デフォルトストレージ",
"Unlimited" => "無制限",
"Other" => "その他",
"Storage" => "ストレージ",
"change display name" => "表示名を変更",
"set new password" => "新しいパスワードを設定",
"Default" => "デフォルト"
);