1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-02 23:48:47 +00:00

repair translate bug (#2892)

* repair translate bug

* escape repo-name

* repair translate bug

* repair shared-repo-list-item translate bug
This commit is contained in:
杨顺强
2019-01-28 16:32:32 +08:00
committed by Daniel Pan
parent 55da78826e
commit d702be3b2b
10 changed files with 51 additions and 32 deletions

View File

@@ -35,6 +35,7 @@ class CreateDepartmentRepoDialog extends React.Component {
handleKeyPress = (e) => {
if (e.key === 'Enter') {
this.handleSubmit();
e.preventDefault();
}
}
@@ -50,20 +51,16 @@ class CreateDepartmentRepoDialog extends React.Component {
let errMessage = '';
let repoName = this.state.repoName.trim();
if (!repoName.length) {
errMessage = 'Name is required';
errMessage = gettext('Name is required');
this.setState({errMessage: errMessage});
return false;
}
if (repoName.indexOf('/') > -1) {
errMessage = 'Name should not include \'/\'.';
this.setState({errMessage: errMessage});
return false;
}
if (repoName.length > maxFileName) {
errMessage = 'RepoName\'s length is must little than ' + maxFileName;
errMessage = gettext('Name should not include \'/\'.');
this.setState({errMessage: errMessage});
return false;
}
return true;
}
@@ -90,7 +87,7 @@ class CreateDepartmentRepoDialog extends React.Component {
/>
</FormGroup>
</Form>
<Label className="err-message">{gettext(this.state.errMessage)}</Label>
<Label className="err-message">{this.state.errMessage}</Label>
</ModalBody>
<ModalFooter>
<Button color="primary" onClick={this.handleSubmit}>{gettext('Submit')}</Button>

View File

@@ -66,12 +66,12 @@ class CreateRepoDialog extends React.Component {
let errMessage = '';
let repoName = this.state.repoName.trim();
if (!repoName.length) {
errMessage = 'Name is required';
errMessage = gettext('Name is required');
this.setState({errMessage: errMessage});
return false;
}
if (repoName.indexOf('/') > -1) {
errMessage = 'Name should not include \'/\'.';
errMessage = gettext('Name should not include \'/\'.');
this.setState({errMessage: errMessage});
return false;
}
@@ -79,22 +79,22 @@ class CreateRepoDialog extends React.Component {
let password1 = this.state.password1.trim();
let password2 = this.state.password2.trim();
if (!password1.length) {
errMessage = 'Please enter password';
errMessage = gettext('Please enter password');
this.setState({errMessage: errMessage});
return false;
}
if (!password2.length) {
errMessage = 'Please enter the password again';
errMessage = gettext('Please enter the password again');
this.setState({errMessage: errMessage});
return false;
}
if (password1.length < 8) {
errMessage = 'Password is too short';
errMessage = gettext('Password is too short');
this.setState({errMessage: errMessage});
return false;
}
if (password1 !== password2) {
errMessage = 'Passwords don\'t match';
errMessage = gettext('Passwords don\'t match');
this.setState({errMessage: errMessage});
return false;
}
@@ -201,7 +201,7 @@ class CreateRepoDialog extends React.Component {
</div>
}
</Form>
<Label className="err-message">{gettext(this.state.errMessage)}</Label>
<Label className="err-message">{this.state.errMessage}</Label>
</ModalBody>
<ModalFooter>
<Button color="primary" onClick={this.handleSubmit}>{gettext('Submit')}</Button>

View File

@@ -1,6 +1,7 @@
import React, { Component } from 'react';
import { Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap';
import { gettext } from '../../utils/constants';
import { Utils } from '../../utils/utils';
class DeleteRepoDialog extends Component {
@@ -20,7 +21,7 @@ class DeleteRepoDialog extends Component {
render() {
const data = this.props.data;
const repoName = data ? '<span class="sf-font">' + data.repoName + '</span>' : null;
const repoName = data ? '<span class="sf-font">' + Utils.HTMLescape(data.repoName) + '</span>' : null;
let message = gettext("Are you sure you want to delete %s ?");
message = message.replace('%s', repoName);
const popup = (

View File

@@ -54,7 +54,6 @@ class InternalLinkDialog extends React.Component {
}
render() {
let internalLinkDesc = 'An internal link is a link to a file or folder that can be accessed by users with read permission to the file or folder.';
return (
<span className={'file-internal-link'} title={gettext('Internal Link')}>
<i className="fa fa-link" onClick={this.getInternalLink}></i>
@@ -62,7 +61,7 @@ class InternalLinkDialog extends React.Component {
<ModalHeader toggle={this.toggle}>{gettext('Internal Link')}</ModalHeader>
<ModalBody>
<p className="tip mb-1">
{gettext(internalLinkDesc)}
{gettext('An internal link is a link to a file or folder that can be accessed by users with read permission to the file or folder.')}
</p>
<p>
<a target="_blank" href={this.state.smartLink}>{this.state.smartLink}</a>

View File

@@ -38,7 +38,7 @@ class ReadmeDialog extends React.Component {
render() {
return (
<Modal isOpen={true} toggle={this.props.toggleCancel} className="readme-dialog" size="lg">
<ModalHeader>{gettext(this.props.fileName)}
<ModalHeader>{this.props.fileName}
<a className="readme-dialog-edit" href={this.props.href} target='_blank'><i className="fa fa-pencil"></i></a>
</ModalHeader>
<ModalBody>

View File

@@ -32,7 +32,7 @@ class ShareRepoListItem extends React.Component {
<tr>
<td className="text-center"><input type="checkbox" className="vam" name="repo" onChange={this.onRepoSelect} /></td>
<td className="text-center"><img src={siteRoot + 'media/img/lib/48/lib.png'} alt={gettext('icon')} /></td>
<td className="name">{gettext(repo.repo_name)}</td>
<td className="name">{repo.repo_name}</td>
<td>{moment(repo.last_modified).fromNow()}</td>
<td>
<Input style={{height: '1.5rem', padding: 0}} type="select" name="select" onChange={this.onPermissionChange} value={repo.sharePermission}>

View File

@@ -72,7 +72,7 @@ class WikiSelectDialog extends React.Component {
<tr key={index}>
<td className="text-center"><input type="radio" className="vam" name="repo" value={repo.repo_id} onChange={this.onChange.bind(this, repo)} /></td>
<td className="text-center"><img src={siteRoot + 'media/img/lib/48/lib.png'} width="24" alt={gettext('icon')} /></td>
<td>{gettext(repo.repo_name)}</td>
<td>{repo.repo_name}</td>
<td>{moment(repo.last_modified).fromNow()}</td>
</tr>
);

View File

@@ -290,8 +290,6 @@ class DirentListItem extends React.Component {
this.interval = setInterval(this.addDownloadAnimation, 1000);
}).catch(() => {
clearInterval(this.interval);
// toaster.danger(gettext(''));
//todo;
});
} else {
let url = URLDecorator.getUrl({type: 'download_file_url', repoID: repoID, filePath: direntPath});

View File

@@ -151,6 +151,30 @@ class SharedRepoListItem extends React.Component {
this.setState({isShowSharedDialog: false});
}
translateMenuItem = (menuItem) => {
let translateResult = '';
switch(menuItem) {
case 'Rename':
translateResult = gettext('Rename');
break;
case 'Folder Permission':
translateResult = gettext('Folder Premission');
break;
case 'Details':
translateResult = gettext('Details');
break;
case 'Unshare':
translateResult = gettext('Unshare');
break;
case 'Share':
translateResult = gettext('Share');
break;
default:
break;
}
return translateResult;
}
generatorOperations = () => {
let { repo, currentGroup } = this.props;
//todo this have a bug; use current api is not return admins param;
@@ -164,7 +188,7 @@ class SharedRepoListItem extends React.Component {
if (isStaff && repo.owner_email == currentGroup.id + '@seafile_group') { //is a member of this current group,
this.isDeparementOnwerGroupMember = true;
if (folderPermEnabled) {
operations = ['Rename', 'Folder Permission', 'deatils'];
operations = ['Rename', 'Folder Permission', 'Details'];
} else {
operations = ['Rename', 'Details']
}
@@ -181,7 +205,7 @@ class SharedRepoListItem extends React.Component {
}
} else {
if (isRepoOwner) {
operations.push('share');
operations.push('Share');
}
if (isStaff || isRepoOwner) {
operations.push('Unshare');
@@ -195,13 +219,13 @@ class SharedRepoListItem extends React.Component {
if (this.props.libraryType && this.props.libraryType === 'public') {
let isRepoOwner = this.props.repo.owner_email === username;
if (isSystemStaff || isRepoOwner) {
operations.push('unshare');
operations.push('Unshare');
}
} else {
operations = this.generatorOperations();
if (this.isDeparementOnwerGroupMember) {
operations.unshift('unshare');
operations.unshift('share');
operations.unshift('Unshare');
operations.unshift('Share');
}
}
return (
@@ -219,7 +243,7 @@ class SharedRepoListItem extends React.Component {
<div className="mobile-operation-menu">
{operations.map((item, index) => {
return (
<DropdownItem key={index} data-toggle={item} onClick={this.onMenuItemClick}>{gettext(item)}</DropdownItem>
<DropdownItem key={index} data-toggle={item} onClick={this.onMenuItemClick}>{this.translateMenuItem(item)}</DropdownItem>
);
})}
</div>
@@ -260,7 +284,7 @@ class SharedRepoListItem extends React.Component {
/>
<DropdownMenu>
{operations.map((item, index) => {
return <DropdownItem key={index} data-toggle={item} onClick={this.onMenuItemClick}>{gettext(item)}</DropdownItem>
return <DropdownItem key={index} data-toggle={item} onClick={this.onMenuItemClick}>{this.translateMenuItem(item)}</DropdownItem>
})}
</DropdownMenu>
</Dropdown>

View File

@@ -164,10 +164,10 @@ class WikiListItem extends Component {
<td className="name">
{this.state.isRenameing ?
<WikiRename wiki={wiki} onRenameConfirm={this.onRenameConfirm} onRenameCancel={this.onRenameCancel}/> :
<a href={wiki.link}>{gettext(wiki.name)}</a>
<a href={wiki.link}>{wiki.name}</a>
}
</td>
<td><a href={userProfileURL} target='_blank'>{gettext(wiki.owner_nickname)}</a></td>
<td><a href={userProfileURL} target='_blank'>{wiki.owner_nickname}</a></td>
<td>{moment(wiki.updated_at).fromNow()}</td>
<td>
<WikiPermissionEditor