parent
ab2b6063f1
commit
f33dc6bff6
Binary file not shown.
@ -0,0 +1,97 @@
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2013 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.
|
||||
|
||||
require File.expand_path('../test_case', __FILE__)
|
||||
require 'tmpdir'
|
||||
|
||||
class RedminePmTest::RepositoryGitTest < RedminePmTest::TestCase
|
||||
fixtures :projects, :users, :members, :roles, :member_roles
|
||||
|
||||
GIT_BIN = Redmine::Configuration['scm_git_command'] || "git"
|
||||
|
||||
def test_anonymous_read_on_public_repo_with_permission_should_succeed
|
||||
assert_success "ls-remote", git_url
|
||||
end
|
||||
|
||||
def test_anonymous_read_on_public_repo_without_permission_should_fail
|
||||
Role.anonymous.remove_permission! :browse_repository
|
||||
assert_failure "ls-remote", git_url
|
||||
end
|
||||
|
||||
def test_invalid_credentials_should_fail
|
||||
Project.find(1).update_attribute :is_public, false
|
||||
with_credentials "dlopper", "foo" do
|
||||
assert_success "ls-remote", git_url
|
||||
end
|
||||
with_credentials "dlopper", "wrong" do
|
||||
assert_failure "ls-remote", git_url
|
||||
end
|
||||
end
|
||||
|
||||
def test_clone
|
||||
Dir.mktmpdir do |dir|
|
||||
Dir.chdir(dir) do
|
||||
assert_success "clone", git_url
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_write_commands
|
||||
Role.find(2).add_permission! :commit_access
|
||||
filename = random_filename
|
||||
|
||||
Dir.mktmpdir do |dir|
|
||||
assert_success "clone", git_url, dir
|
||||
Dir.chdir(dir) do
|
||||
f = File.new(File.join(dir, filename), "w")
|
||||
f.write "test file content"
|
||||
f.close
|
||||
|
||||
with_credentials "dlopper", "foo" do
|
||||
assert_success "add", filename
|
||||
assert_success "commit -a --message Committing_a_file"
|
||||
assert_success "push", git_url, "--all"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Dir.mktmpdir do |dir|
|
||||
assert_success "clone", git_url, dir
|
||||
Dir.chdir(dir) do
|
||||
assert File.exists?(File.join(dir, "#{filename}"))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def execute(*args)
|
||||
a = [GIT_BIN]
|
||||
super a, *args
|
||||
end
|
||||
|
||||
def git_url(path=nil)
|
||||
host = ENV['REDMINE_TEST_DAV_SERVER'] || '127.0.0.1'
|
||||
credentials = nil
|
||||
if username && password
|
||||
credentials = "#{username}:#{password}"
|
||||
end
|
||||
url = "http://#{credentials}@#{host}/git/ecookbook"
|
||||
url << "/#{path}" if path
|
||||
url
|
||||
end
|
||||
end
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,81 @@
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2013 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.
|
||||
|
||||
require File.expand_path('../../../test_helper', __FILE__)
|
||||
|
||||
module RedminePmTest
|
||||
class TestCase < ActiveSupport::TestCase
|
||||
attr_reader :command, :response, :status, :username, :password
|
||||
|
||||
# Cannot use transactional fixtures here: database
|
||||
# will be accessed from Redmine.pm with its own connection
|
||||
self.use_transactional_fixtures = false
|
||||
|
||||
def test_dummy
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def assert_response(expected, msg=nil)
|
||||
case expected
|
||||
when :success
|
||||
assert_equal 0, status,
|
||||
(msg || "The command failed (exit: #{status}):\n #{command}\nOutput was:\n#{formatted_response}")
|
||||
when :failure
|
||||
assert_not_equal 0, status,
|
||||
(msg || "The command succeed (exit: #{status}):\n #{command}\nOutput was:\n#{formatted_response}")
|
||||
else
|
||||
assert_equal expected, status, msg
|
||||
end
|
||||
end
|
||||
|
||||
def assert_success(*args)
|
||||
execute *args
|
||||
assert_response :success
|
||||
end
|
||||
|
||||
def assert_failure(*args)
|
||||
execute *args
|
||||
assert_response :failure
|
||||
end
|
||||
|
||||
def with_credentials(username, password)
|
||||
old_username, old_password = @username, @password
|
||||
@username, @password = username, password
|
||||
yield if block_given?
|
||||
ensure
|
||||
@username, @password = old_username, old_password
|
||||
end
|
||||
|
||||
def execute(*args)
|
||||
@command = args.join(' ')
|
||||
@status = nil
|
||||
IO.popen("#{command} 2>&1") do |io|
|
||||
@response = io.read
|
||||
end
|
||||
@status = $?.exitstatus
|
||||
end
|
||||
|
||||
def formatted_response
|
||||
"#{'='*40}\n#{response}#{'='*40}"
|
||||
end
|
||||
|
||||
def random_filename
|
||||
Redmine::Utils.random_hex(16)
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,13 @@
|
||||
---
|
||||
auth_sources_001:
|
||||
id: 1
|
||||
type: AuthSourceLdap
|
||||
name: 'LDAP test server'
|
||||
host: '127.0.0.1'
|
||||
port: 389
|
||||
base_dn: 'OU=Person,DC=redmine,DC=org'
|
||||
attr_login: uid
|
||||
attr_firstname: givenName
|
||||
attr_lastname: sn
|
||||
attr_mail: mail
|
||||
onthefly_register: false
|
@ -0,0 +1,22 @@
|
||||
---
|
||||
changes_001:
|
||||
id: 1
|
||||
changeset_id: 100
|
||||
action: A
|
||||
path: /test/some/path/in/the/repo
|
||||
from_path:
|
||||
from_revision:
|
||||
changes_002:
|
||||
id: 2
|
||||
changeset_id: 100
|
||||
action: A
|
||||
path: /test/some/path/elsewhere/in/the/repo
|
||||
from_path:
|
||||
from_revision:
|
||||
changes_003:
|
||||
id: 3
|
||||
changeset_id: 101
|
||||
action: M
|
||||
path: /test/some/path/in/the/repo
|
||||
from_path:
|
||||
from_revision:
|
@ -0,0 +1,104 @@
|
||||
---
|
||||
changesets_001:
|
||||
commit_date: 2007-04-11
|
||||
committed_on: 2007-04-11 15:14:44 +02:00
|
||||
revision: 1
|
||||
scmid: 691322a8eb01e11fd7
|
||||
id: 100
|
||||
comments: 'My very first commit do not escaping #<>&'
|
||||
repository_id: 10
|
||||
committer: dlopper
|
||||
user_id: 3
|
||||
changesets_002:
|
||||
commit_date: 2007-04-12
|
||||
committed_on: 2007-04-12 15:14:44 +02:00
|
||||
revision: 2
|
||||
id: 101
|
||||
comments: 'This commit fixes #1, #2 and references #1 & #3'
|
||||
repository_id: 10
|
||||
committer: dlopper
|
||||
user_id: 3
|
||||
changesets_003:
|
||||
commit_date: 2007-04-12
|
||||
committed_on: 2007-04-12 15:14:44 +02:00
|
||||
revision: 3
|
||||
id: 102
|
||||
comments: |-
|
||||
A commit with wrong issue ids
|
||||
IssueID #666 #3
|
||||
repository_id: 10
|
||||
committer: dlopper
|
||||
user_id: 3
|
||||
changesets_004:
|
||||
commit_date: 2007-04-12
|
||||
committed_on: 2007-04-12 15:14:44 +02:00
|
||||
revision: 4
|
||||
id: 103
|
||||
comments: |-
|
||||
A commit with an issue id of an other project
|
||||
IssueID 4 2
|
||||
repository_id: 10
|
||||
committer: dlopper
|
||||
user_id: 3
|
||||
changesets_005:
|
||||
commit_date: "2007-09-10"
|
||||
comments: Modified one file in the folder.
|
||||
committed_on: 2007-09-10 19:01:08
|
||||
revision: "5"
|
||||
id: 104
|
||||
scmid:
|
||||
user_id: 3
|
||||
repository_id: 10
|
||||
committer: dlopper
|
||||
changesets_006:
|
||||
commit_date: "2007-09-10"
|
||||
comments: Moved helloworld.rb from / to /folder.
|
||||
committed_on: 2007-09-10 19:01:47
|
||||
revision: "6"
|
||||
id: 105
|
||||
scmid:
|
||||
user_id: 3
|
||||
repository_id: 10
|
||||
committer: dlopper
|
||||
changesets_007:
|
||||
commit_date: "2007-09-10"
|
||||
comments: Removed one file.
|
||||
committed_on: 2007-09-10 19:02:16
|
||||
revision: "7"
|
||||
id: 106
|
||||
scmid:
|
||||
user_id: 3
|
||||
repository_id: 10
|
||||
committer: dlopper
|
||||
changesets_008:
|
||||
commit_date: "2007-09-10"
|
||||
comments: |-
|
||||
This commits references an issue.
|
||||
Refs #2
|
||||
committed_on: 2007-09-10 19:04:35
|
||||
revision: "8"
|
||||
id: 107
|
||||
scmid:
|
||||
user_id: 3
|
||||
repository_id: 10
|
||||
committer: dlopper
|
||||
changesets_009:
|
||||
commit_date: "2009-09-10"
|
||||
comments: One file added.
|
||||
committed_on: 2009-09-10 19:04:35
|
||||
revision: "9"
|
||||
id: 108
|
||||
scmid:
|
||||
user_id: 3
|
||||
repository_id: 10
|
||||
committer: dlopper
|
||||
changesets_010:
|
||||
commit_date: "2009-09-10"
|
||||
comments: Same file modified.
|
||||
committed_on: 2009-09-10 19:04:35
|
||||
revision: "10"
|
||||
id: 109
|
||||
scmid:
|
||||
user_id: 3
|
||||
repository_id: 10
|
||||
committer: dlopper
|
@ -0,0 +1,17 @@
|
||||
# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
|
||||
comments_001:
|
||||
commented_type: News
|
||||
commented_id: 1
|
||||
id: 1
|
||||
author_id: 1
|
||||
comments: my first comment
|
||||
created_on: 2006-12-10 18:10:10 +01:00
|
||||
updated_on: 2006-12-10 18:10:10 +01:00
|
||||
comments_002:
|
||||
commented_type: News
|
||||
commented_id: 1
|
||||
id: 2
|
||||
author_id: 2
|
||||
comments: This is an other comment
|
||||
created_on: 2006-12-10 18:12:10 +01:00
|
||||
updated_on: 2006-12-10 18:12:10 +01:00
|
@ -0,0 +1,8 @@
|
||||
default:
|
||||
somesetting: foo
|
||||
|
||||
production:
|
||||
|
||||
development:
|
||||
|
||||
test:
|
@ -0,0 +1,7 @@
|
||||
default:
|
||||
|
||||
production:
|
||||
|
||||
development:
|
||||
|
||||
test:
|
@ -0,0 +1,8 @@
|
||||
default:
|
||||
|
||||
production:
|
||||
|
||||
development:
|
||||
|
||||
test:
|
||||
somesetting: foo
|
@ -0,0 +1,9 @@
|
||||
default:
|
||||
somesetting: foo
|
||||
|
||||
production:
|
||||
|
||||
development:
|
||||
|
||||
test:
|
||||
somesetting: bar
|
@ -0,0 +1,165 @@
|
||||
---
|
||||
custom_fields_001:
|
||||
name: Database
|
||||
min_length: 0
|
||||
regexp: ""
|
||||
is_for_all: true
|
||||
is_filter: true
|
||||
type: IssueCustomField
|
||||
max_length: 0
|
||||
possible_values:
|
||||
- MySQL
|
||||
- PostgreSQL
|
||||
- Oracle
|
||||
id: 1
|
||||
is_required: false
|
||||
field_format: list
|
||||
default_value: ""
|
||||
editable: true
|
||||
position: 2
|
||||
custom_fields_002:
|
||||
name: Searchable field
|
||||
min_length: 1
|
||||
regexp: ""
|
||||
is_for_all: true
|
||||
is_filter: true
|
||||
type: IssueCustomField
|
||||
max_length: 100
|
||||
possible_values: ""
|
||||
id: 2
|
||||
is_required: false
|
||||
field_format: string
|
||||
searchable: true
|
||||
default_value: "Default string"
|
||||
editable: true
|
||||
position: 1
|
||||
custom_fields_003:
|
||||
name: Development status
|
||||
min_length: 0
|
||||
regexp: ""
|
||||
is_for_all: false
|
||||
is_filter: true
|
||||
type: ProjectCustomField
|
||||
max_length: 0
|
||||
possible_values:
|
||||
- Stable
|
||||
- Beta
|
||||
- Alpha
|
||||
- Planning
|
||||
id: 3
|
||||
is_required: false
|
||||
field_format: list
|
||||
default_value: ""
|
||||
editable: true
|
||||
position: 1
|
||||
custom_fields_004:
|
||||
name: Phone number
|
||||
min_length: 0
|
||||
regexp: ""
|
||||
is_for_all: false
|
||||
type: UserCustomField
|
||||
max_length: 0
|
||||
possible_values: ""
|
||||
id: 4
|
||||
is_required: false
|
||||
field_format: string
|
||||
default_value: ""
|
||||
editable: true
|
||||
position: 1
|
||||
custom_fields_005:
|
||||
name: Money
|
||||
min_length: 0
|
||||
regexp: ""
|
||||
is_for_all: false
|
||||
type: UserCustomField
|
||||
max_length: 0
|
||||
possible_values: ""
|
||||
id: 5
|
||||
is_required: false
|
||||
field_format: float
|
||||
default_value: ""
|
||||
editable: true
|
||||
position: 2
|
||||
custom_fields_006:
|
||||
name: Float field
|
||||
min_length: 0
|
||||
regexp: ""
|
||||
is_for_all: true
|
||||
type: IssueCustomField
|
||||
max_length: 0
|
||||
possible_values: ""
|
||||
id: 6
|
||||
is_required: false
|
||||
field_format: float
|
||||
default_value: ""
|
||||
editable: true
|
||||
position: 3
|
||||
custom_fields_007:
|
||||
name: Billable
|
||||
min_length: 0
|
||||
regexp: ""
|
||||
is_for_all: false
|
||||
is_filter: true
|
||||
type: TimeEntryActivityCustomField
|
||||
max_length: 0
|
||||
possible_values: ""
|
||||
id: 7
|
||||
is_required: false
|
||||
field_format: bool
|
||||
default_value: ""
|
||||
editable: true
|
||||
position: 1
|
||||
custom_fields_008:
|
||||
name: Custom date
|
||||
min_length: 0
|
||||
regexp: ""
|
||||
is_for_all: true
|
||||
is_filter: false
|
||||
type: IssueCustomField
|
||||
max_length: 0
|
||||
possible_values: ""
|
||||
id: 8
|
||||
is_required: false
|
||||
field_format: date
|
||||
default_value: ""
|
||||
editable: true
|
||||
position: 4
|
||||
custom_fields_009:
|
||||
name: Project 1 cf
|
||||
min_length: 0
|
||||
regexp: ""
|
||||
is_for_all: false
|
||||
is_filter: true
|
||||
type: IssueCustomField
|
||||
max_length: 0
|
||||
possible_values: ""
|
||||
id: 9
|
||||
is_required: false
|
||||
field_format: date
|
||||
default_value: ""
|
||||
editable: true
|
||||
position: 5
|
||||
custom_fields_010:
|
||||
name: Overtime
|
||||
min_length: 0
|
||||
regexp: ""
|
||||
is_for_all: false
|
||||
is_filter: false
|
||||
type: TimeEntryCustomField
|
||||
max_length: 0
|
||||
possible_values: ""
|
||||
id: 10
|
||||
is_required: false
|
||||
field_format: bool
|
||||
default_value: 0
|
||||
editable: true
|
||||
position: 1
|
||||
custom_fields_011:
|
||||
id: 11
|
||||
name: Binary
|
||||
type: CustomField
|
||||
possible_values:
|
||||
- !binary |
|
||||
SGXDqWzDp2prc2Tigqw2NTTDuQ==
|
||||
- Other value
|
||||
field_format: list
|
@ -0,0 +1,4 @@
|
||||
---
|
||||
custom_fields_projects_001:
|
||||
custom_field_id: 9
|
||||
project_id: 1
|
@ -0,0 +1,19 @@
|
||||
---
|
||||
custom_fields_trackers_001:
|
||||
custom_field_id: 1
|
||||
tracker_id: 1
|
||||
custom_fields_trackers_002:
|
||||
custom_field_id: 2
|
||||
tracker_id: 1
|
||||
custom_fields_trackers_003:
|
||||
custom_field_id: 2
|
||||
tracker_id: 3
|
||||
custom_fields_trackers_004:
|
||||
custom_field_id: 6
|
||||
tracker_id: 1
|
||||
custom_fields_trackers_005:
|
||||
custom_field_id: 6
|
||||
tracker_id: 2
|
||||
custom_fields_trackers_006:
|
||||
custom_field_id: 6
|
||||
tracker_id: 3
|
@ -0,0 +1,103 @@
|
||||
---
|
||||
custom_values_006:
|
||||
customized_type: Issue
|
||||
custom_field_id: 2
|
||||
customized_id: 3
|
||||
id: 6
|
||||
value: "125"
|
||||
custom_values_007:
|
||||
customized_type: Project
|
||||
custom_field_id: 3
|
||||
customized_id: 1
|
||||
id: 7
|
||||
value: Stable
|
||||
custom_values_001:
|
||||
customized_type: Principal
|
||||
custom_field_id: 4
|
||||
customized_id: 3
|
||||
id: 1
|
||||
value: ""
|
||||
custom_values_002:
|
||||
customized_type: Principal
|
||||
custom_field_id: 4
|
||||
customized_id: 4
|
||||
id: 2
|
||||
value: 01 23 45 67 89
|
||||
custom_values_003:
|
||||
customized_type: Principal
|
||||
custom_field_id: 4
|
||||
customized_id: 2
|
||||
id: 3
|
||||
value: "01 42 50 00 00"
|
||||
custom_values_004:
|
||||
customized_type: Issue
|
||||
custom_field_id: 2
|
||||
customized_id: 1
|
||||
id: 4
|
||||
value: "125"
|
||||
custom_values_005:
|
||||
customized_type: Issue
|
||||
custom_field_id: 2
|
||||
customized_id: 2
|
||||
id: 5
|
||||
value: ""
|
||||
custom_values_008:
|
||||
customized_type: Issue
|
||||
custom_field_id: 1
|
||||
customized_id: 3
|
||||
id: 8
|
||||
value: "MySQL"
|
||||
custom_values_009:
|
||||
customized_type: Issue
|
||||
custom_field_id: 2
|
||||
customized_id: 7
|
||||
id: 9
|
||||
value: "this is a stringforcustomfield search"
|
||||
custom_values_010:
|
||||
customized_type: Issue
|
||||
custom_field_id: 6
|
||||
customized_id: 1
|
||||
id: 10
|
||||
value: "2.1"
|
||||
custom_values_011:
|
||||
customized_type: Issue
|
||||
custom_field_id: 6
|
||||
customized_id: 2
|
||||
id: 11
|
||||
value: "2.05"
|
||||
custom_values_012:
|
||||
customized_type: Issue
|
||||
custom_field_id: 6
|
||||
customized_id: 3
|
||||
id: 12
|
||||
value: "11.65"
|
||||
custom_values_013:
|
||||
customized_type: Issue
|
||||
custom_field_id: 6
|
||||
customized_id: 7
|
||||
id: 13
|
||||
value: ""
|
||||
custom_values_014:
|
||||
customized_type: Issue
|
||||
custom_field_id: 6
|
||||
customized_id: 5
|
||||
id: 14
|
||||
value: "-7.6"
|
||||
custom_values_015:
|
||||
customized_type: Enumeration
|
||||
custom_field_id: 7
|
||||
customized_id: 10
|
||||
id: 15
|
||||
value: true
|
||||
custom_values_016:
|
||||
customized_type: Enumeration
|
||||
custom_field_id: 7
|
||||
customized_id: 11
|
||||
id: 16
|
||||
value: '1'
|
||||
custom_values_017:
|
||||
customized_type: Issue
|
||||
custom_field_id: 8
|
||||
customized_id: 1
|
||||
id: 17
|
||||
value: '2009-12-01'
|
@ -0,0 +1,25 @@
|
||||
# HG changeset patch
|
||||
# User tmaruyama
|
||||
# Date 1362559296 0
|
||||
# Node ID ee54942e0289c30bea1b1973750b698b1ee7c466
|
||||
# Parent 738777832f379f6f099c25251593fc57bc17f586
|
||||
fix some Japanese "issue" translations (#13350)
|
||||
|
||||
Contributed by Go MAEDA.
|
||||
|
||||
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
|
||||
--- a/config/locales/ja.yml
|
||||
+++ b/config/locales/ja.yml
|
||||
@@ -904,9 +904,9 @@ ja:
|
||||
text_journal_set_to: "%{label} を %{value} にセット"
|
||||
text_journal_deleted: "%{label} を削除 (%{old})"
|
||||
text_journal_added: "%{label} %{value} を追加"
|
||||
- text_tip_issue_begin_day: この日に開始するタスク
|
||||
- text_tip_issue_end_day: この日に終了するタスク
|
||||
- text_tip_issue_begin_end_day: この日のうちに開始して終了するタスク
|
||||
+ text_tip_issue_begin_day: この日に開始するチケット
|
||||
+ text_tip_issue_end_day: この日に終了するチケット
|
||||
+ text_tip_issue_begin_end_day: この日に開始・終了するチケット
|
||||
text_caracters_maximum: "最大%{count}文字です。"
|
||||
text_caracters_minimum: "最低%{count}文字の長さが必要です"
|
||||
text_length_between: "長さは%{min}から%{max}文字までです。"
|
@ -0,0 +1,19 @@
|
||||
# HG changeset patch
|
||||
# User tmaruyama
|
||||
# Date 1355872765 0
|
||||
# Node ID 8a13ebed1779c2e85fa644ecdd0de81996c969c4
|
||||
# Parent 5c3c5f917ae92f278fe42c6978366996595b0796
|
||||
Russian "about_x_hours" translation changed by Mikhail Velkin (#12640)
|
||||
|
||||
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
|
||||
--- a/config/locales/ru.yml
|
||||
+++ b/config/locales/ru.yml
|
||||
@@ -115,7 +115,7 @@ ru:
|
||||
one: "около %{count} часа"
|
||||
few: "около %{count} часов"
|
||||
many: "около %{count} часов"
|
||||
- other: "около %{count} часа"
|
||||
+ other: "около %{count} часов"
|
||||
x_hours:
|
||||
one: "1 час"
|
||||
other: "%{count} часов"
|
@ -0,0 +1,7 @@
|
||||
--- a.txt 2013-04-05 14:19:39.000000000 +0900
|
||||
+++ b.txt 2013-04-05 14:19:51.000000000 +0900
|
||||
@@ -1,3 +1,3 @@
|
||||
aaaa
|
||||
-日本
|
||||
+日本語
|
||||
bbbb
|
@ -0,0 +1,7 @@
|
||||
--- a.txt 2013-04-05 14:19:39.000000000 +0900
|
||||
+++ b.txt 2013-04-05 14:19:51.000000000 +0900
|
||||
@@ -1,3 +1,3 @@
|
||||
aaaa
|
||||
-日本
|
||||
+にっぽん日本
|
||||
bbbb
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue