mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2025-06-23 16:05:09 +00:00
Compare commits
1 Commits
ad19875235
...
46fb848e8b
Author | SHA1 | Date | |
---|---|---|---|
![]() |
46fb848e8b |
24
.github/scripts/check_language_properties.py
vendored
24
.github/scripts/check_language_properties.py
vendored
@ -196,9 +196,7 @@ def check_for_differences(reference_file, file_list, branch, actor):
|
||||
|
||||
if len(file_list) == 1:
|
||||
file_arr = file_list[0].split()
|
||||
base_dir = os.path.abspath(
|
||||
os.path.join(os.getcwd(), "stirling-pdf", "src", "main", "resources")
|
||||
)
|
||||
base_dir = os.path.abspath(os.path.join(os.getcwd(), "stirling-pdf", "src", "main", "resources"))
|
||||
|
||||
for file_path in file_arr:
|
||||
file_normpath = os.path.normpath(file_path)
|
||||
@ -218,19 +216,10 @@ def check_for_differences(reference_file, file_list, branch, actor):
|
||||
or (
|
||||
# only local windows command
|
||||
not file_normpath.startswith(
|
||||
os.path.join(
|
||||
"", "stirling-pdf", "src", "main", "resources", "messages_"
|
||||
)
|
||||
os.path.join("", "stirling-pdf", "src", "main", "resources", "messages_")
|
||||
)
|
||||
and not file_normpath.startswith(
|
||||
os.path.join(
|
||||
os.getcwd(),
|
||||
"stirling-pdf",
|
||||
"src",
|
||||
"main",
|
||||
"resources",
|
||||
"messages_",
|
||||
)
|
||||
os.path.join(os.getcwd(), "stirling-pdf", "src", "main", "resources", "messages_")
|
||||
)
|
||||
)
|
||||
or not file_normpath.endswith(".properties")
|
||||
@ -388,12 +377,7 @@ if __name__ == "__main__":
|
||||
else:
|
||||
file_list = glob.glob(
|
||||
os.path.join(
|
||||
os.getcwd(),
|
||||
"stirling-pdf",
|
||||
"src",
|
||||
"main",
|
||||
"resources",
|
||||
"messages_*.properties",
|
||||
os.getcwd(), "stirling-pdf", "src", "main", "resources", "messages_*.properties"
|
||||
)
|
||||
)
|
||||
update_missing_keys(args.reference_file, file_list)
|
||||
|
7
.github/workflows/check_properties.yml
vendored
7
.github/workflows/check_properties.yml
vendored
@ -115,11 +115,8 @@ jobs:
|
||||
|
||||
// Filter for relevant files based on the PR changes
|
||||
const changedFiles = files
|
||||
.filter(file =>
|
||||
file.status !== "removed" &&
|
||||
/^stirling-pdf\/src\/main\/resources\/messages_[a-zA-Z_]{2}_[a-zA-Z_]{2,7}\.properties$/.test(file.filename)
|
||||
)
|
||||
.map(file => file.filename);
|
||||
.map(file => file.filename)
|
||||
.filter(file => /^stirling-pdf\/src\/main\/resources\/messages_[a-zA-Z_]{2}_[a-zA-Z_]{2,7}\.properties$/.test(file));
|
||||
|
||||
console.log("Changed files:", changedFiles);
|
||||
|
||||
|
5
.vscode/settings.json
vendored
5
.vscode/settings.json
vendored
@ -86,9 +86,4 @@
|
||||
"spring.initializr.defaultLanguage": "Java",
|
||||
"spring.initializr.defaultGroupId": "stirling.software.SPDF",
|
||||
"spring.initializr.defaultArtifactId": "SPDF",
|
||||
"java.project.sourcePaths": [
|
||||
"stirling-pdf/src/main/java",
|
||||
"common/src/main/java",
|
||||
"proprietary/src/main/java"
|
||||
],
|
||||
}
|
||||
|
48
README.md
48
README.md
@ -117,46 +117,46 @@ Stirling-PDF currently supports 40 languages!
|
||||
| Language | Progress |
|
||||
| -------------------------------------------- | -------------------------------------- |
|
||||
| Arabic (العربية) (ar_AR) |  |
|
||||
| Azerbaijani (Azərbaycan Dili) (az_AZ) |  |
|
||||
| Azerbaijani (Azərbaycan Dili) (az_AZ) |  |
|
||||
| Basque (Euskara) (eu_ES) |  |
|
||||
| Bulgarian (Български) (bg_BG) |  |
|
||||
| Bulgarian (Български) (bg_BG) |  |
|
||||
| Catalan (Català) (ca_CA) |  |
|
||||
| Croatian (Hrvatski) (hr_HR) |  |
|
||||
| Czech (Česky) (cs_CZ) |  |
|
||||
| Danish (Dansk) (da_DK) |  |
|
||||
| Dutch (Nederlands) (nl_NL) |  |
|
||||
| Czech (Česky) (cs_CZ) |  |
|
||||
| Danish (Dansk) (da_DK) |  |
|
||||
| Dutch (Nederlands) (nl_NL) |  |
|
||||
| English (English) (en_GB) |  |
|
||||
| English (US) (en_US) |  |
|
||||
| French (Français) (fr_FR) |  |
|
||||
| German (Deutsch) (de_DE) |  |
|
||||
| Greek (Ελληνικά) (el_GR) |  |
|
||||
| Hindi (हिंदी) (hi_IN) |  |
|
||||
| Hungarian (Magyar) (hu_HU) |  |
|
||||
| Indonesian (Bahasa Indonesia) (id_ID) |  |
|
||||
| Irish (Gaeilge) (ga_IE) |  |
|
||||
| French (Français) (fr_FR) |  |
|
||||
| German (Deutsch) (de_DE) |  |
|
||||
| Greek (Ελληνικά) (el_GR) |  |
|
||||
| Hindi (हिंदी) (hi_IN) |  |
|
||||
| Hungarian (Magyar) (hu_HU) |  |
|
||||
| Indonesian (Bahasa Indonesia) (id_ID) |  |
|
||||
| Irish (Gaeilge) (ga_IE) |  |
|
||||
| Italian (Italiano) (it_IT) |  |
|
||||
| Japanese (日本語) (ja_JP) |  |
|
||||
| Korean (한국어) (ko_KR) |  |
|
||||
| Norwegian (Norsk) (no_NB) |  |
|
||||
| Persian (فارسی) (fa_IR) |  |
|
||||
| Polish (Polski) (pl_PL) |  |
|
||||
| Persian (فارسی) (fa_IR) |  |
|
||||
| Polish (Polski) (pl_PL) |  |
|
||||
| Portuguese (Português) (pt_PT) |  |
|
||||
| Portuguese Brazilian (Português) (pt_BR) |  |
|
||||
| Romanian (Română) (ro_RO) |  |
|
||||
| Romanian (Română) (ro_RO) |  |
|
||||
| Russian (Русский) (ru_RU) |  |
|
||||
| Serbian Latin alphabet (Srpski) (sr_LATN_RS) |  |
|
||||
| Simplified Chinese (简体中文) (zh_CN) |  |
|
||||
| Serbian Latin alphabet (Srpski) (sr_LATN_RS) |  |
|
||||
| Simplified Chinese (简体中文) (zh_CN) |  |
|
||||
| Slovakian (Slovensky) (sk_SK) |  |
|
||||
| Slovenian (Slovenščina) (sl_SI) |  |
|
||||
| Spanish (Español) (es_ES) |  |
|
||||
| Swedish (Svenska) (sv_SE) |  |
|
||||
| Thai (ไทย) (th_TH) |  |
|
||||
| Swedish (Svenska) (sv_SE) |  |
|
||||
| Thai (ไทย) (th_TH) |  |
|
||||
| Tibetan (བོད་ཡིག་) (bo_CN) |  |
|
||||
| Traditional Chinese (繁體中文) (zh_TW) |  |
|
||||
| Turkish (Türkçe) (tr_TR) |  |
|
||||
| Ukrainian (Українська) (uk_UA) |  |
|
||||
| Vietnamese (Tiếng Việt) (vi_VN) |  |
|
||||
| Malayalam (മലയാളം) (ml_IN) |  |
|
||||
| Traditional Chinese (繁體中文) (zh_TW) |  |
|
||||
| Turkish (Türkçe) (tr_TR) |  |
|
||||
| Ukrainian (Українська) (uk_UA) |  |
|
||||
| Vietnamese (Tiếng Việt) (vi_VN) |  |
|
||||
| Malayalam (മലയാളം) (ml_IN) |  |
|
||||
|
||||
## Stirling PDF Enterprise
|
||||
|
||||
|
@ -10,11 +10,11 @@ public class TeamWithUserCountDTO {
|
||||
private Long id;
|
||||
private String name;
|
||||
private Long userCount;
|
||||
|
||||
|
||||
// Constructor for JPQL projection
|
||||
public TeamWithUserCountDTO(Long id, String name, Long userCount) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.userCount = userCount;
|
||||
}
|
||||
}
|
||||
}
|
@ -2,7 +2,6 @@ package stirling.software.proprietary.security;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -54,15 +53,10 @@ public class InitialSecuritySetup {
|
||||
|
||||
private void assignUsersToDefaultTeamIfMissing() {
|
||||
Team defaultTeam = teamService.getOrCreateDefaultTeam();
|
||||
Team internalTeam = teamService.getOrCreateInternalTeam();
|
||||
List<User> usersWithoutTeam = userService.getUsersWithoutTeam();
|
||||
|
||||
for (User user : usersWithoutTeam) {
|
||||
if (user.getUsername().equalsIgnoreCase(Role.INTERNAL_API_USER.getRoleId())) {
|
||||
user.setTeam(internalTeam);
|
||||
} else {
|
||||
user.setTeam(defaultTeam);
|
||||
}
|
||||
user.setTeam(defaultTeam);
|
||||
}
|
||||
|
||||
userService.saveAll(usersWithoutTeam); // batch save
|
||||
@ -114,20 +108,6 @@ public class InitialSecuritySetup {
|
||||
false);
|
||||
userService.addApiKeyToUser(Role.INTERNAL_API_USER.getRoleId());
|
||||
log.info("Internal API user created: {}", Role.INTERNAL_API_USER.getRoleId());
|
||||
} else {
|
||||
Optional<User> internalApiUserOpt =
|
||||
userService.findByUsernameIgnoreCase(Role.INTERNAL_API_USER.getRoleId());
|
||||
if (internalApiUserOpt.isPresent()) {
|
||||
User internalApiUser = internalApiUserOpt.get();
|
||||
// move to team internal API user
|
||||
if (!internalApiUser.getTeam().getName().equals(TeamService.INTERNAL_TEAM_NAME)) {
|
||||
log.info(
|
||||
"Moving internal API user to team: {}", TeamService.INTERNAL_TEAM_NAME);
|
||||
Team internalTeam = teamService.getOrCreateInternalTeam();
|
||||
|
||||
userService.changeUserTeam(internalApiUser, internalTeam);
|
||||
}
|
||||
}
|
||||
}
|
||||
userService.syncCustomApiUser(applicationProperties.getSecurity().getCustomGlobalAPIKey());
|
||||
}
|
||||
|
@ -228,7 +228,7 @@ public class AccountWebController {
|
||||
User user = iterator.next();
|
||||
if (user != null) {
|
||||
boolean shouldRemove = false;
|
||||
|
||||
|
||||
// Check if user is an INTERNAL_API_USER
|
||||
for (Authority authority : user.getAuthorities()) {
|
||||
if (authority.getAuthority().equals(Role.INTERNAL_API_USER.getRoleId())) {
|
||||
@ -237,12 +237,12 @@ public class AccountWebController {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Also check if user is part of the Internal team
|
||||
if (user.getTeam() != null && user.getTeam().getName().equals(TeamService.INTERNAL_TEAM_NAME)) {
|
||||
shouldRemove = true;
|
||||
}
|
||||
|
||||
|
||||
// Remove the user if either condition is true
|
||||
if (shouldRemove) {
|
||||
iterator.remove();
|
||||
|
@ -56,12 +56,12 @@ public class TeamController {
|
||||
return new RedirectView("/adminSettings?messageType=teamNameExists");
|
||||
}
|
||||
Team team = existing.get();
|
||||
|
||||
|
||||
// Prevent renaming the Internal team
|
||||
if (team.getName().equals(TeamService.INTERNAL_TEAM_NAME)) {
|
||||
return new RedirectView("/adminSettings?messageType=internalTeamNotAccessible");
|
||||
}
|
||||
|
||||
|
||||
team.setName(newName);
|
||||
teamRepository.save(team);
|
||||
return new RedirectView("/adminSettings?messageType=teamRenamed");
|
||||
@ -77,12 +77,12 @@ public class TeamController {
|
||||
}
|
||||
|
||||
Team team = teamOpt.get();
|
||||
|
||||
|
||||
// Prevent deleting the Internal team
|
||||
if (team.getName().equals(TeamService.INTERNAL_TEAM_NAME)) {
|
||||
return new RedirectView("/adminSettings?messageType=internalTeamNotAccessible");
|
||||
}
|
||||
|
||||
|
||||
long memberCount = userRepository.countByTeam(team);
|
||||
if (memberCount > 0) {
|
||||
return new RedirectView("/adminSettings?messageType=teamHasUsers");
|
||||
@ -91,36 +91,36 @@ public class TeamController {
|
||||
teamRepository.delete(team);
|
||||
return new RedirectView("/adminSettings?messageType=teamDeleted");
|
||||
}
|
||||
|
||||
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
||||
@PostMapping("/addUser")
|
||||
@Transactional
|
||||
public RedirectView addUserToTeam(
|
||||
@RequestParam("teamId") Long teamId,
|
||||
@RequestParam("userId") Long userId) {
|
||||
|
||||
|
||||
// Find the team
|
||||
Team team = teamRepository.findById(teamId)
|
||||
.orElseThrow(() -> new RuntimeException("Team not found"));
|
||||
|
||||
|
||||
// Prevent adding users to the Internal team
|
||||
if (team.getName().equals(TeamService.INTERNAL_TEAM_NAME)) {
|
||||
return new RedirectView("/teams?error=internalTeamNotAccessible");
|
||||
}
|
||||
|
||||
|
||||
// Find the user
|
||||
User user = userRepository.findById(userId)
|
||||
.orElseThrow(() -> new RuntimeException("User not found"));
|
||||
|
||||
|
||||
// Check if user is in the Internal team - prevent moving them
|
||||
if (user.getTeam() != null && user.getTeam().getName().equals(TeamService.INTERNAL_TEAM_NAME)) {
|
||||
return new RedirectView("/teams/" + teamId + "?error=cannotMoveInternalUsers");
|
||||
}
|
||||
|
||||
|
||||
// Assign user to team
|
||||
user.setTeam(team);
|
||||
userRepository.save(user);
|
||||
|
||||
|
||||
// Redirect back to team details page
|
||||
return new RedirectView("/teams/" + teamId + "?messageType=userAdded");
|
||||
}
|
||||
|
@ -246,7 +246,7 @@ public class UserController {
|
||||
// If the role ID is not valid, redirect with an error message
|
||||
return new RedirectView("/adminSettings?messageType=invalidRole", true);
|
||||
}
|
||||
|
||||
|
||||
// Use teamId if provided, otherwise use default team
|
||||
Long effectiveTeamId = teamId;
|
||||
if (effectiveTeamId == null) {
|
||||
@ -261,7 +261,7 @@ public class UserController {
|
||||
return new RedirectView("/adminSettings?messageType=internalTeamNotAccessible", true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (authType.equalsIgnoreCase(AuthenticationType.SSO.toString())) {
|
||||
userService.saveUser(username, AuthenticationType.SSO, effectiveTeamId, role);
|
||||
} else {
|
||||
@ -309,7 +309,7 @@ public class UserController {
|
||||
return new RedirectView("/adminSettings?messageType=invalidRole", true);
|
||||
}
|
||||
User user = userOpt.get();
|
||||
|
||||
|
||||
// Update the team if a teamId is provided
|
||||
if (teamId != null) {
|
||||
Team team = teamRepository.findById(teamId).orElse(null);
|
||||
@ -318,17 +318,17 @@ public class UserController {
|
||||
if (TeamService.INTERNAL_TEAM_NAME.equals(team.getName())) {
|
||||
return new RedirectView("/adminSettings?messageType=internalTeamNotAccessible", true);
|
||||
}
|
||||
|
||||
|
||||
// Prevent moving users from Internal team
|
||||
if (user.getTeam() != null && TeamService.INTERNAL_TEAM_NAME.equals(user.getTeam().getName())) {
|
||||
return new RedirectView("/adminSettings?messageType=cannotMoveInternalUsers", true);
|
||||
}
|
||||
|
||||
|
||||
user.setTeam(team);
|
||||
userRepository.save(user);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
userService.changeRole(user, role);
|
||||
return new RedirectView(
|
||||
"/adminSettings", // Redirect to account page after adding the user
|
||||
|
@ -38,7 +38,7 @@ public class TeamWebController {
|
||||
public String listTeams(Model model) {
|
||||
// Get teams with user counts using a DTO projection
|
||||
List<TeamWithUserCountDTO> allTeamsWithCounts = teamRepository.findAllTeamsWithUserCount();
|
||||
|
||||
|
||||
// Filter out the Internal team
|
||||
List<TeamWithUserCountDTO> teamsWithCounts = allTeamsWithCounts.stream()
|
||||
.filter(team -> !team.getName().equals(TeamService.INTERNAL_TEAM_NAME))
|
||||
@ -58,7 +58,7 @@ public class TeamWebController {
|
||||
// Add data to the model
|
||||
model.addAttribute("teamsWithCounts", teamsWithCounts);
|
||||
model.addAttribute("teamLastRequest", teamLastRequest);
|
||||
|
||||
|
||||
return "accounts/teams";
|
||||
}
|
||||
|
||||
@ -68,23 +68,23 @@ public class TeamWebController {
|
||||
// Get the team
|
||||
Team team = teamRepository.findById(id)
|
||||
.orElseThrow(() -> new RuntimeException("Team not found"));
|
||||
|
||||
|
||||
// Prevent access to Internal team
|
||||
if (team.getName().equals(TeamService.INTERNAL_TEAM_NAME)) {
|
||||
return "redirect:/teams?error=internalTeamNotAccessible";
|
||||
}
|
||||
|
||||
|
||||
// Get users for this team directly using the direct query
|
||||
List<User> teamUsers = userRepository.findAllByTeamId(id);
|
||||
|
||||
|
||||
// Get all users not in this team for the Add User to Team dropdown
|
||||
// Exclude users that are in the Internal team
|
||||
List<User> allUsers = userRepository.findAllWithTeam();
|
||||
List<User> availableUsers = allUsers.stream()
|
||||
.filter(user -> (user.getTeam() == null || !user.getTeam().getId().equals(id)) &&
|
||||
.filter(user -> (user.getTeam() == null || !user.getTeam().getId().equals(id)) &&
|
||||
(user.getTeam() == null || !user.getTeam().getName().equals(TeamService.INTERNAL_TEAM_NAME)))
|
||||
.toList();
|
||||
|
||||
|
||||
// Get the latest session for each user in the team
|
||||
List<Object[]> userSessions = sessionRepository.findLatestSessionByTeamId(id);
|
||||
|
||||
|
@ -29,7 +29,7 @@ public interface UserRepository extends JpaRepository<User, Long> {
|
||||
|
||||
@Query(value = "SELECT u FROM User u LEFT JOIN FETCH u.team")
|
||||
List<User> findAllWithTeam();
|
||||
|
||||
|
||||
@Query("SELECT u FROM User u JOIN FETCH u.authorities JOIN FETCH u.team WHERE u.team.id = :teamId")
|
||||
List<User> findAllByTeamId(@Param("teamId") Long teamId);
|
||||
|
||||
|
@ -58,7 +58,7 @@ public class User implements Serializable {
|
||||
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "user")
|
||||
private Set<Authority> authorities = new HashSet<>();
|
||||
|
||||
@ManyToOne(fetch = FetchType.EAGER)
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "team_id")
|
||||
private Team team;
|
||||
|
||||
|
@ -371,16 +371,6 @@ public class UserService implements UserServiceInterface {
|
||||
databaseService.exportDatabase();
|
||||
}
|
||||
|
||||
public void changeUserTeam(User user, Team team)
|
||||
throws SQLException, UnsupportedProviderException {
|
||||
if (team == null) {
|
||||
team = getDefaultTeam();
|
||||
}
|
||||
user.setTeam(team);
|
||||
userRepository.save(user);
|
||||
databaseService.exportDatabase();
|
||||
}
|
||||
|
||||
public boolean isPasswordCorrect(User user, String currentPassword) {
|
||||
return passwordEncoder.matches(currentPassword, user.getPassword());
|
||||
}
|
||||
|
@ -384,11 +384,4 @@
|
||||
padding: 0.75rem 1rem;
|
||||
border-radius: 0.5rem;
|
||||
border: 1px solid
|
||||
}
|
||||
|
||||
.text-overflow {
|
||||
max-width: 100px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
}
|
@ -1,200 +1,196 @@
|
||||
<!DOCTYPE html>
|
||||
<html th:lang="${#locale.language}" th:dir="#{language.direction}" th:data-language="${#locale.toString()}"
|
||||
xmlns:th="https://www.thymeleaf.org">
|
||||
<html th:lang="${#locale.language}" th:dir="#{language.direction}" th:data-language="${#locale.toString()}" xmlns:th="https://www.thymeleaf.org">
|
||||
<head>
|
||||
<th:block th:insert="~{fragments/common :: head(title=#{team.details.title}, header=#{team.details.header})}"></th:block>
|
||||
<link rel="stylesheet" th:href="@{/css/modern-tables.css}">
|
||||
</head>
|
||||
|
||||
<head>
|
||||
<th:block th:insert="~{fragments/common :: head(title=#{team.details.title}, header=#{team.details.header})}"></th:block>
|
||||
<link rel="stylesheet" th:href="@{/css/modern-tables.css}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<th:block th:insert="~{fragments/common :: game}"></th:block>
|
||||
<div id="page-container">
|
||||
<div id="content-wrap">
|
||||
<th:block th:insert="~{fragments/navbar.html :: navbar}"></th:block>
|
||||
|
||||
<div class="data-container">
|
||||
<div class="data-panel">
|
||||
<div class="data-header">
|
||||
<h1 class="data-title">
|
||||
<span class="data-icon">
|
||||
<span class="material-symbols-rounded">group</span>
|
||||
</span>
|
||||
<span th:text="'Team: ' + ${team.name}">Team Name</span>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<div class="data-body">
|
||||
<div class="data-stats">
|
||||
<div class="data-stat-card">
|
||||
<div class="data-stat-label" th:text="#{team.totalMembers}">Total Members:</div>
|
||||
<div class="data-stat-value" th:text="${teamUsers.size()}">1</div>
|
||||
<body>
|
||||
<th:block th:insert="~{fragments/common :: game}"></th:block>
|
||||
<div id="page-container">
|
||||
<div id="content-wrap">
|
||||
<th:block th:insert="~{fragments/navbar.html :: navbar}"></th:block>
|
||||
|
||||
<div class="data-container">
|
||||
<div class="data-panel">
|
||||
<div class="data-header">
|
||||
<h1 class="data-title">
|
||||
<span class="data-icon">
|
||||
<span class="material-symbols-rounded">group</span>
|
||||
</span>
|
||||
<span th:text="'Team: ' + ${team.name}">Team Name</span>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<div class="data-body">
|
||||
<div class="data-stats">
|
||||
<div class="data-stat-card">
|
||||
<div class="data-stat-label">Total Members:</div>
|
||||
<div class="data-stat-value" th:text="${teamUsers.size()}">1</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="data-actions data-actions-start">
|
||||
<a th:href="@{'/teams'}" class="data-btn data-btn-secondary">
|
||||
<span class="material-symbols-rounded">arrow_back</span>
|
||||
<span th:text="#{team.back}">Back to Teams</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="data-section-title">Members</div>
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="data-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>Username</th>
|
||||
<th>Role</th>
|
||||
<th scope="col" th:title="${@runningProOrHigher} ? #{adminUserSettings.lastRequest} : 'Pro feature'" class="text-overflow" th:text="#{adminUserSettings.lastRequest}">Last Request</th>
|
||||
<th>Status</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr th:each="user : ${teamUsers}">
|
||||
<td th:text="${user.id}">1</td>
|
||||
<td th:text="${user.username}">username</td>
|
||||
<td th:text="#{${user.roleName}}">Role</td>
|
||||
<td th:text="${@runningProOrHigher} ? (${userLastRequest[user.username] != null ? #dates.format(userLastRequest[user.username], 'yyyy-MM-dd HH:mm:ss') : 'N/A'}) : 'hidden'">2023-01-01 12:00:00</td>
|
||||
<td>
|
||||
<span th:if="${user.enabled}" class="data-status data-status-success">
|
||||
<span class="material-symbols-rounded">person</span>
|
||||
Enabled
|
||||
</span>
|
||||
<span th:unless="${user.enabled}" class="data-status data-status-danger">
|
||||
<span class="material-symbols-rounded">person_off</span>
|
||||
Disabled
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<!-- Empty state for when there are no team members -->
|
||||
<div th:if="${teamUsers.empty}" class="data-empty">
|
||||
<span class="material-symbols-rounded data-empty-icon">person_off</span>
|
||||
<p class="data-empty-text">This team has no members yet.</p>
|
||||
<button data-bs-toggle="modal" data-bs-target="#addUserToTeamModal" class="data-btn data-btn-primary">
|
||||
<span class="material-symbols-rounded">person_add</span>
|
||||
<span th:text="#{team.addUser}">Add User to Team</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- Add button for non-empty teams too -->
|
||||
<div th:if="${!teamUsers.empty}" class="data-actions data-mt-3">
|
||||
<button data-bs-toggle="modal" data-bs-target="#addUserToTeamModal" class="data-btn data-btn-primary">
|
||||
<span class="material-symbols-rounded">person_add</span>
|
||||
<span th:text="#{team.addUser}">Add User to Team</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="data-actions data-actions-start">
|
||||
<a th:href="@{'/teams'}" class="data-btn data-btn-secondary">
|
||||
<span class="material-symbols-rounded">arrow_back</span>
|
||||
<span th:text="#{team.back}">Back to Teams</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="data-section-title" th:text="#{team.members}">Members</div>
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="data-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<th th:text="#{team.username}">Username</th>
|
||||
<th th:text="#{team.role}">Role</th>
|
||||
<th scope="col" th:title="${@runningProOrHigher} ? #{adminUserSettings.lastRequest} : #{proFeatures}"
|
||||
class="text-overflow" th:text="#{adminUserSettings.lastRequest}">Last Request</th>
|
||||
<th th:text="#{team.status}">Status</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr th:each="user : ${teamUsers}">
|
||||
<td th:text="${user.id}">1</td>
|
||||
<td th:text="${user.username}">username</td>
|
||||
<td th:text="#{${user.roleName}}">Role</td>
|
||||
<td
|
||||
th:text="${@runningProOrHigher} ? (${userLastRequest[user.username] != null ? #dates.format(userLastRequest[user.username], 'yyyy-MM-dd HH:mm:ss') : 'N/A'}) : #{team.hidden}">
|
||||
2023-01-01 12:00:00</td>
|
||||
<td>
|
||||
<span th:if="${user.enabled}" class="data-status data-status-success">
|
||||
<span class="material-symbols-rounded">person</span>
|
||||
<span th:text="#{team.enabled}">Enabled</span>
|
||||
</span>
|
||||
<span th:unless="${user.enabled}" class="data-status data-status-danger">
|
||||
<span class="material-symbols-rounded">person_off</span>
|
||||
<span th:text="#{team.disabled}">Disabled</span>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<!-- Empty state for when there are no team members -->
|
||||
<div th:if="${teamUsers.empty}" class="data-empty">
|
||||
<span class="material-symbols-rounded data-empty-icon">person_off</span>
|
||||
<p class="data-empty-text" th:text="#{team.noMembers}">This team has no members yet.</p>
|
||||
<button data-bs-toggle="modal" data-bs-target="#addUserToTeamModal" class="data-btn data-btn-primary">
|
||||
<span class="material-symbols-rounded">person_add</span>
|
||||
<span th:text="#{team.addUser}">Add User to Team</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- Add button for non-empty teams too -->
|
||||
<div th:if="${!teamUsers.empty}" class="data-actions data-mt-3">
|
||||
<button data-bs-toggle="modal" data-bs-target="#addUserToTeamModal" class="data-btn data-btn-primary">
|
||||
<span class="material-symbols-rounded">person_add</span>
|
||||
<span th:text="#{team.addUser}">Add User to Team</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- JavaScript for team warning -->
|
||||
<script th:inline="javascript">
|
||||
function checkUserTeam(userId) {
|
||||
// Clear any existing warning
|
||||
const warningDiv = document.getElementById('teamChangeWarning');
|
||||
const warningMessage = document.getElementById('warningMessage');
|
||||
const submitButton = document.getElementById('addUserSubmitBtn');
|
||||
|
||||
// Reset
|
||||
warningDiv.style.display = 'none';
|
||||
submitButton.onclick = null;
|
||||
|
||||
// Get the selected option
|
||||
const selectedOption = document.querySelector('#userId option[value="' + userId + '"]');
|
||||
if (!selectedOption) return;
|
||||
|
||||
// Get team data
|
||||
const currentTeam = selectedOption.getAttribute('data-team');
|
||||
const currentTeamId = selectedOption.getAttribute('data-team-id');
|
||||
const newTeamName = /*[[${team.name}]]*/ 'Current Team';
|
||||
|
||||
// If user is already in a team, show warning
|
||||
if (currentTeam && currentTeam.length > 0) {
|
||||
// Use internationalized message
|
||||
const warningTemplate = /*[[#{team.warning.moveUser}]]*/ 'Warning: This will move the user from "{0}" team to "{1}" team. Are you sure?';
|
||||
const formattedWarning = warningTemplate.replace('{0}', currentTeam).replace('{1}', newTeamName);
|
||||
warningMessage.textContent = formattedWarning;
|
||||
warningDiv.style.display = 'block';
|
||||
|
||||
// Add confirmation to submit button
|
||||
submitButton.onclick = function (e) {
|
||||
|
||||
<!-- JavaScript for team warning -->
|
||||
<script th:inline="javascript">
|
||||
function checkUserTeam(userId) {
|
||||
// Clear any existing warning
|
||||
const warningDiv = document.getElementById('teamChangeWarning');
|
||||
const warningMessage = document.getElementById('warningMessage');
|
||||
const submitButton = document.getElementById('addUserSubmitBtn');
|
||||
|
||||
// Reset
|
||||
warningDiv.style.display = 'none';
|
||||
submitButton.onclick = null;
|
||||
|
||||
// Get the selected option
|
||||
const selectedOption = document.querySelector('#userId option[value="' + userId + '"]');
|
||||
if (!selectedOption) return;
|
||||
|
||||
// Get team data
|
||||
const currentTeam = selectedOption.getAttribute('data-team');
|
||||
const currentTeamId = selectedOption.getAttribute('data-team-id');
|
||||
const newTeamName = /*[[${team.name}]]*/ 'Current Team';
|
||||
|
||||
// If user is already in a team, show warning
|
||||
if (currentTeam && currentTeam.length > 0) {
|
||||
// Use internationalized message
|
||||
const confirmTemplate = /*[[#{team.confirm.moveUser}]]*/ 'Are you sure you want to move this user from "{0}" team to "{1}" team?';
|
||||
const formattedConfirm = confirmTemplate.replace('{0}', currentTeam).replace('{1}', newTeamName);
|
||||
if (!confirm(formattedConfirm)) {
|
||||
e.preventDefault();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
const warningTemplate = /*[[#{team.warning.moveUser}]]*/ 'Warning: This will move the user from "{0}" team to "{1}" team. Are you sure?';
|
||||
const formattedWarning = warningTemplate.replace('{0}', currentTeam).replace('{1}', newTeamName);
|
||||
warningMessage.textContent = formattedWarning;
|
||||
warningDiv.style.display = 'block';
|
||||
|
||||
// Add confirmation to submit button
|
||||
submitButton.onclick = function(e) {
|
||||
// Use internationalized message
|
||||
const confirmTemplate = /*[[#{team.confirm.moveUser}]]*/ 'Are you sure you want to move this user from "{0}" team to "{1}" team?';
|
||||
const formattedConfirm = confirmTemplate.replace('{0}', currentTeam).replace('{1}', newTeamName);
|
||||
if (!confirm(formattedConfirm)) {
|
||||
e.preventDefault();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- Add User to Team Modal -->
|
||||
<div class="modal fade" id="addUserToTeamModal" tabindex="-1" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<form th:action="@{'/api/v1/team/addUser'}" method="post" class="modal-content data-modal">
|
||||
<div class="data-modal-header">
|
||||
<h5 class="data-modal-title">
|
||||
<span class="data-icon">
|
||||
<span class="material-symbols-rounded">person_add</span>
|
||||
</span>
|
||||
<span th:text="#{team.addUser}">Add User to Team</span>
|
||||
</h5>
|
||||
<button type="button" class="data-btn-close" data-bs-dismiss="modal" aria-label="Close">
|
||||
<span class="material-symbols-rounded">close</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="data-modal-body">
|
||||
<input type="hidden" name="teamId" th:value="${team.id}" />
|
||||
|
||||
<div class="data-form-group">
|
||||
<label for="userId" class="data-form-label" th:text="#{team.selectUser}">Select User</label>
|
||||
<select name="userId" id="userId" class="data-form-control" required onchange="checkUserTeam(this.value)">
|
||||
<option value="" disabled selected th:text="#{selectFillter}">-- Select User --</option>
|
||||
<option th:each="user : ${availableUsers}" th:value="${user.id}" th:text="${user.username}"
|
||||
th:data-team="${user.team != null ? user.team.name : ''}"
|
||||
th:data-team-id="${user.team != null ? user.team.id : ''}">
|
||||
Username
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<!-- Warning message for users being moved between teams -->
|
||||
<div id="teamChangeWarning" class="alert alert-warning mt-3" style="display: none;">
|
||||
<span class="material-symbols-rounded">warning</span>
|
||||
<span id="warningMessage">Warning: This will move the user from their current team to this team.</span>
|
||||
</div>
|
||||
|
||||
<div class="data-form-actions">
|
||||
<button type="button" class="data-btn data-btn-secondary" data-bs-dismiss="modal">
|
||||
</script>
|
||||
|
||||
<!-- Add User to Team Modal -->
|
||||
<div class="modal fade" id="addUserToTeamModal" tabindex="-1" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<form th:action="@{'/api/v1/team/addUser'}" method="post" class="modal-content data-modal">
|
||||
<div class="data-modal-header">
|
||||
<h5 class="data-modal-title">
|
||||
<span class="data-icon">
|
||||
<span class="material-symbols-rounded">person_add</span>
|
||||
</span>
|
||||
<span th:text="#{team.addUser}">Add User to Team</span>
|
||||
</h5>
|
||||
<button type="button" class="data-btn-close" data-bs-dismiss="modal" aria-label="Close">
|
||||
<span class="material-symbols-rounded">close</span>
|
||||
<span th:text="#{cancel}">Cancel</span>
|
||||
</button>
|
||||
<button type="submit" id="addUserSubmitBtn" class="data-btn data-btn-primary">
|
||||
<span class="material-symbols-rounded">check</span>
|
||||
<span th:text="#{team.addUser}">Add User</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="data-modal-body">
|
||||
<input type="hidden" name="teamId" th:value="${team.id}" />
|
||||
|
||||
<div class="data-form-group">
|
||||
<label for="userId" class="data-form-label" th:text="#{team.selectUser}">Select User</label>
|
||||
<select name="userId" id="userId" class="data-form-control" required onchange="checkUserTeam(this.value)">
|
||||
<option value="" disabled selected th:text="#{selectFillter}">-- Select User --</option>
|
||||
<option th:each="user : ${availableUsers}"
|
||||
th:value="${user.id}"
|
||||
th:text="${user.username}"
|
||||
th:data-team="${user.team != null ? user.team.name : ''}"
|
||||
th:data-team-id="${user.team != null ? user.team.id : ''}">
|
||||
Username
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<!-- Warning message for users being moved between teams -->
|
||||
<div id="teamChangeWarning" class="alert alert-warning mt-3" style="display: none;">
|
||||
<span class="material-symbols-rounded">warning</span>
|
||||
<span id="warningMessage">Warning: This will move the user from their current team to this team.</span>
|
||||
</div>
|
||||
|
||||
<div class="data-form-actions">
|
||||
<button type="button" class="data-btn data-btn-secondary" data-bs-dismiss="modal">
|
||||
<span class="material-symbols-rounded">close</span>
|
||||
<span th:text="#{cancel}">Cancel</span>
|
||||
</button>
|
||||
<button type="submit" id="addUserSubmitBtn" class="data-btn data-btn-primary">
|
||||
<span class="material-symbols-rounded">check</span>
|
||||
<span th:text="#{team.addUser}">Add User</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<th:block th:insert="~{fragments/footer.html :: footer}"></th:block>
|
||||
</div>
|
||||
|
||||
<th:block th:insert="~{fragments/footer.html :: footer}"></th:block>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -1,20 +1,15 @@
|
||||
<!DOCTYPE html>
|
||||
<html th:lang="${#locale.language}" th:dir="#{language.direction}" th:data-language="${#locale.toString()}"
|
||||
xmlns:th="https://www.thymeleaf.org">
|
||||
|
||||
<html th:lang="${#locale.language}" th:dir="#{language.direction}" th:data-language="${#locale.toString()}" xmlns:th="https://www.thymeleaf.org">
|
||||
<head>
|
||||
<th:block
|
||||
th:insert="~{fragments/common :: head(title=#{adminUserSettings.manageTeams}, header=#{adminUserSettings.manageTeams})}">
|
||||
</th:block>
|
||||
<th:block th:insert="~{fragments/common :: head(title=#{adminUserSettings.manageTeams}, header=#{adminUserSettings.manageTeams})}"></th:block>
|
||||
<link rel="stylesheet" th:href="@{/css/modern-tables.css}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<th:block th:insert="~{fragments/common :: game}"></th:block>
|
||||
<div id="page-container">
|
||||
<div id="content-wrap">
|
||||
<th:block th:insert="~{fragments/navbar.html :: navbar}"></th:block>
|
||||
|
||||
|
||||
<div class="data-container">
|
||||
<div class="data-panel">
|
||||
<div class="data-header">
|
||||
@ -25,7 +20,7 @@
|
||||
<span th:text="#{adminUserSettings.manageTeams}">Team Management</span>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="data-body">
|
||||
<!-- Back Button -->
|
||||
<div class="data-actions data-actions-start">
|
||||
@ -34,18 +29,19 @@
|
||||
<span th:text="#{back.toSettings}">Back to Settings</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Create New Team Button -->
|
||||
<div class="data-actions">
|
||||
<a href="#" th:data-bs-toggle="${@runningProOrHigher} ? 'modal' : null"
|
||||
th:data-bs-target="${@runningProOrHigher} ? '#addTeamModal' : null"
|
||||
th:class="${@runningProOrHigher} ? 'data-btn data-btn-primary' : 'data-btn data-btn-danger'"
|
||||
th:title="${@runningProOrHigher} ? #{adminUserSettings.createTeam} : #{enterpriseEdition.proTeamFeatureDisabled}">
|
||||
<a href="#"
|
||||
th:data-bs-toggle="${@runningProOrHigher} ? 'modal' : null"
|
||||
th:data-bs-target="${@runningProOrHigher} ? '#addTeamModal' : null"
|
||||
th:class="${@runningProOrHigher} ? 'data-btn data-btn-primary' : 'data-btn data-btn-danger'"
|
||||
th:title="${@runningProOrHigher} ? #{adminUserSettings.createTeam} : #{enterpriseEdition.proTeamFeatureDisabled}">
|
||||
<span class="material-symbols-rounded">group_add</span>
|
||||
<span th:text="#{adminUserSettings.createTeam}">Create New Team</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Team Table -->
|
||||
<div class="table-responsive">
|
||||
<table class="data-table">
|
||||
@ -53,8 +49,7 @@
|
||||
<tr>
|
||||
<th scope="col" th:text="#{adminUserSettings.teamName}">Team Name</th>
|
||||
<th scope="col" th:text="#{adminUserSettings.totalMembers}">Total Members</th>
|
||||
<th scope="col" th:title="${@runningProOrHigher} ? #{adminUserSettings.lastRequest} : #{proFeatures}"
|
||||
class="text-overflow" th:text="#{adminUserSettings.lastRequest}">Last Request</th>
|
||||
<th scope="col" th:title="${@runningProOrHigher} ? #{adminUserSettings.lastRequest} : 'Pro feature'" class="text-overflow" th:text="#{adminUserSettings.lastRequest}">Last Request</th>
|
||||
<th scope="col" th:text="#{adminUserSettings.actions}">Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -63,20 +58,18 @@
|
||||
<tr th:each="teamDto : ${teamsWithCounts}">
|
||||
<td th:text="${teamDto.name}"></td>
|
||||
<td th:text="${teamDto.userCount}"></td>
|
||||
<td
|
||||
th:text="${@runningProOrHigher} ? (${teamLastRequest[teamDto.id] != null ? #dates.format(teamLastRequest[teamDto.id], 'yyyy-MM-dd HH:mm:ss') : 'N/A'}) : #{adminUserSettings.teamHidden}">
|
||||
</td>
|
||||
<td th:text="${@runningProOrHigher} ? (${teamLastRequest[teamDto.id] != null ? #dates.format(teamLastRequest[teamDto.id], 'yyyy-MM-dd HH:mm:ss') : 'N/A'}) : 'hidden'"></td>
|
||||
<td>
|
||||
<div class="data-action-cell">
|
||||
<a th:href="@{'/teams/' + ${teamDto.id}}" class="data-btn data-btn-secondary data-btn-sm"
|
||||
th:title="#{adminUserSettings.viewTeam}">
|
||||
<a th:href="@{'/teams/' + ${teamDto.id}}" class="data-btn data-btn-secondary data-btn-sm" th:title="#{adminUserSettings.viewTeam}">
|
||||
<span class="material-symbols-rounded">search</span> <span th:text="#{view}">View</span>
|
||||
</a>
|
||||
<form th:action="@{'/api/v1/team/delete'}" method="post" style="display:inline-block"
|
||||
onsubmit="return confirmDeleteTeam()">
|
||||
onsubmit="return confirmDeleteTeam()">
|
||||
<input type="hidden" name="teamId" th:value="${teamDto.id}" />
|
||||
<button type="submit" class="data-btn data-btn-danger data-btn-sm"
|
||||
th:disabled="${!@runningProOrHigher}" th:classappend="${!@runningProOrHigher} ? 'disabled' : ''"
|
||||
<button type="submit" class="data-btn data-btn-danger data-btn-sm"
|
||||
th:disabled="${!@runningProOrHigher}"
|
||||
th:classappend="${!@runningProOrHigher} ? 'disabled' : ''"
|
||||
th:title="${@runningProOrHigher} ? #{adminUserSettings.deleteTeam} : #{enterpriseEdition.proTeamFeatureDisabled}">
|
||||
<span class="material-symbols-rounded">delete</span> <span th:text="#{delete}">Delete</span>
|
||||
</button>
|
||||
@ -87,7 +80,7 @@
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Delete Confirmation Script -->
|
||||
<script th:inline="javascript">
|
||||
const confirmDeleteText = /*[[#{adminUserSettings.confirmDeleteTeam}]]*/ 'Are you sure you want to delete this team?';
|
||||
@ -98,7 +91,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Add Team Modal -->
|
||||
<div class="modal fade" id="addTeamModal" tabindex="-1" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
@ -137,5 +130,4 @@
|
||||
<th:block th:insert="~{fragments/footer.html :: footer}"></th:block>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
@ -79,7 +79,7 @@ class UserServiceTest {
|
||||
// Given
|
||||
String username = "testuser";
|
||||
AuthenticationType authType = AuthenticationType.WEB;
|
||||
|
||||
|
||||
when(teamRepository.findByName("Default")).thenReturn(Optional.of(mockTeam));
|
||||
when(userRepository.save(any(User.class))).thenReturn(mockUser);
|
||||
doNothing().when(databaseService).exportDatabase();
|
||||
@ -99,7 +99,7 @@ class UserServiceTest {
|
||||
String password = "password123";
|
||||
Long teamId = 1L;
|
||||
String encodedPassword = "encodedPassword123";
|
||||
|
||||
|
||||
when(passwordEncoder.encode(password)).thenReturn(encodedPassword);
|
||||
when(teamRepository.findById(teamId)).thenReturn(Optional.of(mockTeam));
|
||||
when(userRepository.save(any(User.class))).thenReturn(mockUser);
|
||||
@ -124,7 +124,7 @@ class UserServiceTest {
|
||||
String role = Role.ADMIN.getRoleId();
|
||||
boolean firstLogin = true;
|
||||
String encodedPassword = "encodedPassword123";
|
||||
|
||||
|
||||
when(passwordEncoder.encode(password)).thenReturn(encodedPassword);
|
||||
when(userRepository.save(any(User.class))).thenReturn(mockUser);
|
||||
doNothing().when(databaseService).exportDatabase();
|
||||
@ -150,7 +150,7 @@ class UserServiceTest {
|
||||
IllegalArgumentException.class,
|
||||
() -> userService.saveUser(invalidUsername, authType)
|
||||
);
|
||||
|
||||
|
||||
verify(userRepository, never()).save(any(User.class));
|
||||
verify(databaseService, never()).exportDatabase();
|
||||
}
|
||||
@ -160,7 +160,7 @@ class UserServiceTest {
|
||||
// Given
|
||||
String username = "testuser";
|
||||
Long teamId = 1L;
|
||||
|
||||
|
||||
when(teamRepository.findById(teamId)).thenReturn(Optional.of(mockTeam));
|
||||
when(userRepository.save(any(User.class))).thenReturn(mockUser);
|
||||
doNothing().when(databaseService).exportDatabase();
|
||||
@ -181,7 +181,7 @@ class UserServiceTest {
|
||||
String username = "testuser";
|
||||
String emptyPassword = "";
|
||||
Long teamId = 1L;
|
||||
|
||||
|
||||
when(teamRepository.findById(teamId)).thenReturn(Optional.of(mockTeam));
|
||||
when(userRepository.save(any(User.class))).thenReturn(mockUser);
|
||||
doNothing().when(databaseService).exportDatabase();
|
||||
@ -201,7 +201,7 @@ class UserServiceTest {
|
||||
// Given
|
||||
String emailUsername = "test@example.com";
|
||||
AuthenticationType authType = AuthenticationType.SSO;
|
||||
|
||||
|
||||
when(teamRepository.findByName("Default")).thenReturn(Optional.of(mockTeam));
|
||||
when(userRepository.save(any(User.class))).thenReturn(mockUser);
|
||||
doNothing().when(databaseService).exportDatabase();
|
||||
@ -225,7 +225,7 @@ class UserServiceTest {
|
||||
IllegalArgumentException.class,
|
||||
() -> userService.saveUser(reservedUsername, authType)
|
||||
);
|
||||
|
||||
|
||||
verify(userRepository, never()).save(any(User.class));
|
||||
verify(databaseService, never()).exportDatabase();
|
||||
}
|
||||
@ -241,7 +241,7 @@ class UserServiceTest {
|
||||
IllegalArgumentException.class,
|
||||
() -> userService.saveUser(anonymousUsername, authType)
|
||||
);
|
||||
|
||||
|
||||
verify(userRepository, never()).save(any(User.class));
|
||||
verify(databaseService, never()).exportDatabase();
|
||||
}
|
||||
@ -253,7 +253,7 @@ class UserServiceTest {
|
||||
String password = "password123";
|
||||
Long teamId = 1L;
|
||||
String encodedPassword = "encodedPassword123";
|
||||
|
||||
|
||||
when(passwordEncoder.encode(password)).thenReturn(encodedPassword);
|
||||
when(teamRepository.findById(teamId)).thenReturn(Optional.of(mockTeam));
|
||||
when(userRepository.save(any(User.class))).thenReturn(mockUser);
|
||||
@ -261,7 +261,7 @@ class UserServiceTest {
|
||||
|
||||
// When & Then
|
||||
assertThrows(SQLException.class, () -> userService.saveUser(username, password, teamId));
|
||||
|
||||
|
||||
// Verify user was still saved before the exception
|
||||
verify(userRepository).save(any(User.class));
|
||||
verify(databaseService).exportDatabase();
|
||||
@ -276,7 +276,7 @@ class UserServiceTest {
|
||||
boolean firstLogin = true;
|
||||
boolean enabled = false;
|
||||
String encodedPassword = "encodedPassword123";
|
||||
|
||||
|
||||
when(passwordEncoder.encode(password)).thenReturn(encodedPassword);
|
||||
when(teamRepository.findById(teamId)).thenReturn(Optional.of(mockTeam));
|
||||
when(userRepository.save(any(User.class))).thenReturn(mockUser);
|
||||
@ -299,7 +299,7 @@ class UserServiceTest {
|
||||
Long teamId = 1L;
|
||||
String customRole = Role.LIMITED_API_USER.getRoleId();
|
||||
String encodedPassword = "encodedPassword123";
|
||||
|
||||
|
||||
when(passwordEncoder.encode(password)).thenReturn(encodedPassword);
|
||||
when(teamRepository.findById(teamId)).thenReturn(Optional.of(mockTeam));
|
||||
when(userRepository.save(any(User.class))).thenReturn(mockUser);
|
||||
|
@ -258,6 +258,7 @@ ignore = [
|
||||
|
||||
[es_ES]
|
||||
ignore = [
|
||||
'adminUserSettings.roles',
|
||||
'error',
|
||||
'lang.asm',
|
||||
'lang.ceb',
|
||||
@ -420,6 +421,21 @@ ignore = [
|
||||
|
||||
[hu_HU]
|
||||
ignore = [
|
||||
'lang.bre',
|
||||
'lang.ceb',
|
||||
'lang.chr',
|
||||
'lang.div',
|
||||
'lang.dzo',
|
||||
'lang.fao',
|
||||
'lang.iku',
|
||||
'lang.kan',
|
||||
'lang.lao',
|
||||
'lang.mar',
|
||||
'lang.mri',
|
||||
'lang.ori',
|
||||
'lang.que',
|
||||
'lang.tel',
|
||||
'lang.tgl',
|
||||
'language.direction',
|
||||
]
|
||||
|
||||
@ -984,6 +1000,9 @@ ignore = [
|
||||
|
||||
[zh_CN]
|
||||
ignore = [
|
||||
'lang.dzo',
|
||||
'lang.iku',
|
||||
'lang.que',
|
||||
'language.direction',
|
||||
]
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=لون
|
||||
sponsor=راعٍ
|
||||
info=معلومات
|
||||
pro=محترف
|
||||
proFeatures=Pro Features
|
||||
page=صفحة
|
||||
pages=صفحات
|
||||
loading=جارٍ التحميل...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=حذف المستخدم
|
||||
adminUserSettings.confirmDeleteUser=هل يجب حذف المستخدم؟
|
||||
adminUserSettings.confirmChangeUserStatus=هل يجب تعطيل/تمكين المستخدم؟
|
||||
adminUserSettings.usernameInfo=يمكن أن يحتوي اسم المستخدم فقط على أحرف وأرقام والرموز الخاصة التالية @._+- أو يجب أن يكون عنوان بريد إلكتروني صالح.
|
||||
adminUserSettings.roles=الأدوار
|
||||
adminUserSettings.role=الدور
|
||||
adminUserSettings.actions=الإجراءات
|
||||
adminUserSettings.apiUser=مستخدم API محدود
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Rəng
|
||||
sponsor=Sponsor
|
||||
info=Məlumat
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Səhifə
|
||||
pages=Səhifələr
|
||||
loading=Yüklənir...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=İstifadəçi Sil
|
||||
adminUserSettings.confirmDeleteUser=İstifadəçi silinməlidirmi?
|
||||
adminUserSettings.confirmChangeUserStatus=İstifadəçi aktivləşdirilməli/deaktivləşdirilməlidirmi?
|
||||
adminUserSettings.usernameInfo=İstifadəçi adı sadəcə hərflərdən, rəqəmlərdən və @._+- xüsusi simvollarından ibarət ola bilər və ya düzgün email ünvanı olmalıdır.
|
||||
adminUserSettings.roles=Rollar
|
||||
adminUserSettings.role=Rol
|
||||
adminUserSettings.actions=Fəaliyyətlər
|
||||
adminUserSettings.apiUser=Məhdudlaşdırılmış API İstifadəçisi
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Цвят
|
||||
sponsor=Спонсор
|
||||
info=Информация
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Страница
|
||||
pages=Страници
|
||||
loading=Зареждане на...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Изтриване на потребител
|
||||
adminUserSettings.confirmDeleteUser=Трябва ли потребителят да бъде изтрит?
|
||||
adminUserSettings.confirmChangeUserStatus=Трябва ли потребителят да бъде деактивиран/активиран?
|
||||
adminUserSettings.usernameInfo=Потребителското име може да съдържа само букви, цифри и следните специални символи @._+- или трябва да е валиден имейл адрес.
|
||||
adminUserSettings.roles=Роли
|
||||
adminUserSettings.role=Роля
|
||||
adminUserSettings.actions=Действия
|
||||
adminUserSettings.apiUser=Ограничен API потребител
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Colour
|
||||
sponsor=Sponsor
|
||||
info=Info
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Page
|
||||
pages=Pages
|
||||
loading=Loading...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Delete User
|
||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
||||
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||
adminUserSettings.roles=Roles
|
||||
adminUserSettings.role=Role
|
||||
adminUserSettings.actions=Actions
|
||||
adminUserSettings.apiUser=Limited API User
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Color
|
||||
sponsor=Patrocinador
|
||||
info=Informació
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Pàgina
|
||||
pages=Pàgines
|
||||
loading=Carregant...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Elimina Usuari
|
||||
adminUserSettings.confirmDeleteUser=Vols eliminar aquest usuari?
|
||||
adminUserSettings.confirmChangeUserStatus=Vols deshabilitar/habilitar aquest usuari?
|
||||
adminUserSettings.usernameInfo=El nom d'usuari només pot contenir lletres, números i els següents caràcters especials: @._+- o ha de ser una adreça de correu electrònic vàlida.
|
||||
adminUserSettings.roles=Rols
|
||||
adminUserSettings.role=Rol
|
||||
adminUserSettings.actions=Accions
|
||||
adminUserSettings.apiUser=Usuari amb API limitada
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Barva
|
||||
sponsor=Sponzor
|
||||
info=Informace
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Stránka
|
||||
pages=Stránky
|
||||
loading=Načítání...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Smazat uživatele
|
||||
adminUserSettings.confirmDeleteUser=Má být uživatel smazán?
|
||||
adminUserSettings.confirmChangeUserStatus=Má být uživatel deaktivován/aktivován?
|
||||
adminUserSettings.usernameInfo=Uživatelské jméno může obsahovat pouze písmena, číslice a následující speciální znaky @._+- nebo musí být platná e-mailová adresa.
|
||||
adminUserSettings.roles=Role
|
||||
adminUserSettings.role=Role
|
||||
adminUserSettings.actions=Akce
|
||||
adminUserSettings.apiUser=Omezený API uživatel
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Farve
|
||||
sponsor=Sponsorer
|
||||
info=Info
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Sidenummer
|
||||
pages=Sideantal
|
||||
loading=Laster...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Slet Bruger
|
||||
adminUserSettings.confirmDeleteUser=Skal brugeren slettes?
|
||||
adminUserSettings.confirmChangeUserStatus=Skal brugeren deaktiveres/aktiveres?
|
||||
adminUserSettings.usernameInfo=Brugernavn må kun indeholde bogstaver, tal og følgende specialtegn @._+- eller skal være en gyldig e-mailadresse.
|
||||
adminUserSettings.roles=Roller
|
||||
adminUserSettings.role=Rolle
|
||||
adminUserSettings.actions=Handlinger
|
||||
adminUserSettings.apiUser=Begrænset API-bruger
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Farbe
|
||||
sponsor=Sponsor
|
||||
info=Informationen
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Seite
|
||||
pages=Seiten
|
||||
loading=Laden...
|
||||
@ -220,12 +219,12 @@ addToDoc=In Dokument hinzufügen
|
||||
reset=Zurücksetzen
|
||||
apply=Anwenden
|
||||
noFileSelected=Keine Datei ausgewählt. Bitte laden Sie eine hoch.
|
||||
view=Anzeigen
|
||||
cancel=Abbrechen
|
||||
view=View
|
||||
cancel=Cancel
|
||||
|
||||
back.toSettings=Zurück zu Einstellungen
|
||||
back.toHome=Zurück zur Startseite
|
||||
back.toAdmin=Zurück zu Administrator
|
||||
back.toSettings=Back to Settings
|
||||
back.toHome=Back to Home
|
||||
back.toAdmin=Back to Admin
|
||||
|
||||
legal.privacy=Datenschutz
|
||||
legal.terms=AGB
|
||||
@ -266,7 +265,7 @@ enterpriseEdition.button=Auf Pro-Version umsteigen
|
||||
enterpriseEdition.warning=Diese Funktion ist nur für Pro-Nutzer verfügbar.
|
||||
enterpriseEdition.yamlAdvert=Stirling-PDF Pro unterstützt YAML Konfigurationsdateien, SSO und weitere Funktionen.
|
||||
enterpriseEdition.ssoAdvert=Suchen Sie weitere Funktionen in der Benutzerverwaltung? Steigen Sie auf die Pro-Version um
|
||||
enterpriseEdition.proTeamFeatureDisabled=Teammanagementfunktionen erfordern eine Pro-Lizenz oder höher
|
||||
enterpriseEdition.proTeamFeatureDisabled=Team management features require a Pro licence or higher
|
||||
|
||||
|
||||
#################
|
||||
@ -347,8 +346,8 @@ account.property=Eigenschaft
|
||||
account.webBrowserSettings=Webbrowser-Einstellung
|
||||
account.syncToBrowser=Synchronisiere Konto -> Browser
|
||||
account.syncToAccount=Synchronisiere Konto <- Browser
|
||||
account.adminTitle=Administrator-Tools
|
||||
account.adminNotif=Sie haben Administratorrechte - Zugriff auf Systemeinstellungen und Benutzerverwaltung.
|
||||
account.adminTitle=Administrator Tools
|
||||
account.adminNotif=You have admin privileges. Access system settings and user management.
|
||||
|
||||
|
||||
adminUserSettings.title=Benutzerkontrolle
|
||||
@ -360,8 +359,9 @@ adminUserSettings.deleteUser=Benutzer löschen
|
||||
adminUserSettings.confirmDeleteUser=Soll der Benutzer gelöscht werden?
|
||||
adminUserSettings.confirmChangeUserStatus=Soll der Benutzer deaktiviert/aktiviert werden?
|
||||
adminUserSettings.usernameInfo=Der Benutzername darf nur Buchstaben, Zahlen und die folgenden Sonderzeichen @._+- enthalten oder muss eine gültige E-Mail-Adresse sein.
|
||||
adminUserSettings.roles=Rollen
|
||||
adminUserSettings.role=Rolle
|
||||
adminUserSettings.actions=Aktionen
|
||||
adminUserSettings.actions=Aktions
|
||||
adminUserSettings.apiUser=Eingeschränkter API-Benutzer
|
||||
adminUserSettings.extraApiUser=Zusätzlicher eingeschränkter API-Benutzer
|
||||
adminUserSettings.webOnlyUser=Nur Web-Benutzer
|
||||
@ -379,48 +379,37 @@ adminUserSettings.disabledUsers=Deaktivierte Benutzer:
|
||||
adminUserSettings.totalUsers=Gesamtzahl der Benutzer:
|
||||
adminUserSettings.lastRequest=Letzte Anfrage
|
||||
adminUserSettings.usage=Statistiken
|
||||
adminUserSettings.teams=Teams anzeigen/bearbeiten
|
||||
adminUserSettings.teams=View/Edit Teams
|
||||
adminUserSettings.team=Team
|
||||
adminUserSettings.manageTeams=Teamsverwaltung
|
||||
adminUserSettings.createTeam=Team erstellen
|
||||
adminUserSettings.viewTeam=Team anzeigen
|
||||
adminUserSettings.deleteTeam=Team löschen
|
||||
adminUserSettings.teamName=Teamname
|
||||
adminUserSettings.teamExists=Team existiert bereits
|
||||
adminUserSettings.teamCreated=Team erfolgreich erstellt
|
||||
adminUserSettings.teamChanged=Das Team des Benutzers wurde aktualisiert
|
||||
adminUserSettings.teamHidden=Ausgeblendet
|
||||
adminUserSettings.totalMembers=Mitgliederanzahl
|
||||
adminUserSettings.confirmDeleteTeam=Sind Sie sicher, dass Sie dieses Team löschen möchten?
|
||||
adminUserSettings.manageTeams=Manage Teams
|
||||
adminUserSettings.createTeam=Create Team
|
||||
adminUserSettings.viewTeam=View Team
|
||||
adminUserSettings.deleteTeam=Delete Team
|
||||
adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
teamCreated=Team erfolgreich erstellt
|
||||
teamExists=Ein Team mit diesem Namen gibt es bereits
|
||||
teamNameExists=Ein weiteres Team mit diesem Namen existiert bereits
|
||||
teamNotFound=Team nicht gefunden
|
||||
teamDeleted=Team gelöscht
|
||||
teamHasUsers=Ein Team mit zugewiesenen Benutzern kann nicht gelöscht werden
|
||||
teamRenamed=Team erfolgreich umbenannt
|
||||
teamCreated=Team created successfully
|
||||
teamExists=A team with that name already exists
|
||||
teamNameExists=Another team with that name already exists
|
||||
teamNotFound=Team not found
|
||||
teamDeleted=Team deleted
|
||||
teamHasUsers=Cannot delete a team with users assigned
|
||||
teamRenamed=Team renamed successfully
|
||||
|
||||
# Team user management
|
||||
team.addUser=Benutzer zum Team hinzufügen
|
||||
team.selectUser=Benutzer auswählen
|
||||
team.warning.moveUser=WARNUNG: Dadurch wird der Benutzer aus Team "{0}" in das Team "{1}" verschoben. Sind Sie sicher?
|
||||
team.confirm.moveUser=Sind Sie sicher, dass Sie diesen Benutzer aus dem Team "{0}" in das Team "{1}" verschieben möchten?
|
||||
team.userAdded=Benutzer erfolgreich zum Team hinzugefügt
|
||||
team.back=Zurück zur Teamverwaltung
|
||||
team.internal=Internes Team
|
||||
team.internalTeamNotAccessible=Das interne Team ist ein Systemteam und kann nicht zugegriffen werden
|
||||
team.cannotMoveInternalUsers=Benutzer im internen Team können nicht in andere Teams verschoben werden
|
||||
team.hidden=Ausgeblendet
|
||||
team.name=Teamname
|
||||
team.totalMembers=Mitgliederanzahl
|
||||
team.members=Mitglieder
|
||||
team.username=Benutzername
|
||||
team.role=Rolle
|
||||
team.status=Status
|
||||
team.enabled=Aktiviert
|
||||
team.disabled=Deaktiviert
|
||||
team.noMembers=Dieses Team hat noch keine Mitglieder.
|
||||
team.addUser=Add User to Team
|
||||
team.selectUser=Select User
|
||||
team.warning.moveUser=Warning: This will move the user from "{0}" team to "{1}" team. Are you sure?
|
||||
team.confirm.moveUser=Are you sure you want to move this user from "{0}" team to "{1}" team?
|
||||
team.userAdded=User successfully added to team
|
||||
team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
|
||||
|
||||
|
||||
@ -667,7 +656,7 @@ home.sanitizePdf.desc=Entfernen von Skripten und anderen Elementen aus PDF-Datei
|
||||
sanitizePdf.tags=sauber,sicher,sicher,bedrohungen entfernen
|
||||
|
||||
home.URLToPDF.title=URL/Website zu PDF
|
||||
home.URLToPDF.desc=Konvertiert jede http(s) URL zu PDF
|
||||
home.URLToPDF.desc=Konvertiert jede http(s)URL zu PDF
|
||||
URLToPDF.tags=web capture,seite speichern,web to doc,archiv
|
||||
|
||||
home.HTMLToPDF.title=HTML zu PDF
|
||||
@ -1555,8 +1544,8 @@ survey.meeting.button=Besprechung buchen
|
||||
|
||||
#error
|
||||
error.sorry=Entschuldigung für das Problem!
|
||||
error.needHelp=Brauchen Sie Hilfe / Ein Problem gefunden?
|
||||
error.contactTip=Wenn Sie weiterhin Probleme haben, zögern Sie nicht, uns um Hilfe zu bitten. Sie können ein Ticket auf unserer GitHub-Seite einreichen oder uns über Discord kontaktieren:
|
||||
error.needHelp=Brauchst du Hilfe / Ein Problem gefunden?
|
||||
error.contactTip=Wenn du weiterhin Probleme hast, zögere nicht, uns um Hilfe zu bitten. Du kannst ein Ticket auf unserer GitHub-Seite einreichen oder uns über Discord kontaktieren:
|
||||
error.404.head=404 - Seite nicht gefunden | Ups, wir sind im Code gestolpert!
|
||||
error.404.1=Wir können die gesuchte Seite nicht finden.
|
||||
error.404.2=Etwas ist schiefgelaufen
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Χρώμα
|
||||
sponsor=Χορηγός
|
||||
info=Πληροφορίες
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Σελίδα
|
||||
pages=Σελίδες
|
||||
loading=Φόρτωση...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Διαγραφή χρήστη
|
||||
adminUserSettings.confirmDeleteUser=Θέλετε να διαγραφεί ο χρήστης;
|
||||
adminUserSettings.confirmChangeUserStatus=Θέλετε να απενεργοποιηθεί/ενεργοποιηθεί ο χρήστης;
|
||||
adminUserSettings.usernameInfo=Το όνομα χρήστη μπορεί να περιέχει μόνο γράμματα, αριθμούς και τους ειδικούς χαρακτήρες @._+- ή πρέπει να είναι έγκυρη διεύθυνση email.
|
||||
adminUserSettings.roles=Ρόλοι
|
||||
adminUserSettings.role=Ρόλος
|
||||
adminUserSettings.actions=Ενέργειες
|
||||
adminUserSettings.apiUser=Περιορισμένος χρήστης API
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Colour
|
||||
sponsor=Sponsor
|
||||
info=Info
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Page
|
||||
pages=Pages
|
||||
loading=Loading...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Delete User
|
||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
||||
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||
adminUserSettings.roles=Roles
|
||||
adminUserSettings.role=Role
|
||||
adminUserSettings.actions=Actions
|
||||
adminUserSettings.apiUser=Limited API User
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Color
|
||||
sponsor=Sponsor
|
||||
info=Info
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Page
|
||||
pages=Pages
|
||||
loading=Loading...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Delete User
|
||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
||||
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||
adminUserSettings.roles=Roles
|
||||
adminUserSettings.role=Role
|
||||
adminUserSettings.actions=Actions
|
||||
adminUserSettings.apiUser=Limited API User
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Color
|
||||
sponsor=Patrocinador
|
||||
info=Información
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Página
|
||||
pages=Páginas
|
||||
loading=Cargando...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Eliminar Usuario
|
||||
adminUserSettings.confirmDeleteUser=¿Se debe eliminar al usuario?
|
||||
adminUserSettings.confirmChangeUserStatus=¿Se debe habilitar/deshabilitar el usuario?
|
||||
adminUserSettings.usernameInfo=El nombre de usuario solo puede contener letras, números y los siguientes caracteres especiales @._+- o debe ser una dirección de correo electrónico válida.
|
||||
adminUserSettings.roles=Roles
|
||||
adminUserSettings.role=Rol
|
||||
adminUserSettings.actions=Acciones
|
||||
adminUserSettings.apiUser=Usuario limitado de API
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Color
|
||||
sponsor=Sponsor
|
||||
info=Info
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Page
|
||||
pages=Pages
|
||||
loading=Loading...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Delete User
|
||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
||||
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||
adminUserSettings.roles=Rolak
|
||||
adminUserSettings.role=Rol
|
||||
adminUserSettings.actions=Ekintzak
|
||||
adminUserSettings.apiUser=APIren erabiltzaile mugatua
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=رنگ
|
||||
sponsor=حمایت مالی
|
||||
info=اطلاعات
|
||||
pro=نسخه حرفهای
|
||||
proFeatures=Pro Features
|
||||
page=صفحه
|
||||
pages=صفحات
|
||||
loading=در حال بارگذاری...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=حذف کاربر
|
||||
adminUserSettings.confirmDeleteUser=آیا باید کاربر حذف شود؟
|
||||
adminUserSettings.confirmChangeUserStatus=آیا باید وضعیت کاربر غیرفعال/فعال شود؟
|
||||
adminUserSettings.usernameInfo=نام کاربری فقط میتواند شامل حروف، اعداد و کاراکترهای خاص @._+- باشد یا باید یک آدرس ایمیل معتبر باشد.
|
||||
adminUserSettings.roles=نقشها
|
||||
adminUserSettings.role=نقش
|
||||
adminUserSettings.actions=اقدامات
|
||||
adminUserSettings.apiUser=کاربر محدود API
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Couleur
|
||||
sponsor=Sponsoriser
|
||||
info=Informations
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Page
|
||||
pages=Pages
|
||||
loading=Chargement...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Supprimer l'utilisateur
|
||||
adminUserSettings.confirmDeleteUser=Voulez vous vraiment supprimer l'utilisateur ?
|
||||
adminUserSettings.confirmChangeUserStatus=Voulez vous vraiment déactiver/réactiver l'utilisateur ?
|
||||
adminUserSettings.usernameInfo=Le nom d'utilisateur ne peut contenir que des lettres, des chiffres et les caractères spéciaux suivants @._+- ou doit être une adresse e-mail valide.
|
||||
adminUserSettings.roles=Rôles
|
||||
adminUserSettings.role=Rôle
|
||||
adminUserSettings.actions=Actions
|
||||
adminUserSettings.apiUser=Utilisateur API limité
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Dath
|
||||
sponsor=Urraitheoir
|
||||
info=Eolas
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Leathanach
|
||||
pages=Leathanaigh
|
||||
loading=Á lódáil...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Scrios Úsáideoir
|
||||
adminUserSettings.confirmDeleteUser=Ar cheart an t-úsáideoir a scriosadh?
|
||||
adminUserSettings.confirmChangeUserStatus=Ar cheart an t-úsáideoir a dhíchumasú/a chumasú?
|
||||
adminUserSettings.usernameInfo=Ní féidir ach litreacha, uimhreacha agus na carachtair speisialta seo a leanas @._+- a bheith san ainm úsáideora nó ní mór gur seoladh ríomhphoist bailí é.
|
||||
adminUserSettings.roles=Róil
|
||||
adminUserSettings.role=Ról
|
||||
adminUserSettings.actions=Gníomhartha
|
||||
adminUserSettings.apiUser=Úsáideoir API Teoranta
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=रंग
|
||||
sponsor=प्रायोजक
|
||||
info=जानकारी
|
||||
pro=प्रो
|
||||
proFeatures=Pro Features
|
||||
page=पृष्ठ
|
||||
pages=पृष्ठ
|
||||
loading=लोड हो रहा है...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=उपयोगकर्ता हटाएं
|
||||
adminUserSettings.confirmDeleteUser=क्या उपयोगकर्ता को हटा दिया जाए?
|
||||
adminUserSettings.confirmChangeUserStatus=क्या उपयोगकर्ता को अक्षम/सक्षम किया जाए?
|
||||
adminUserSettings.usernameInfo=उपयोगकर्ता नाम में केवल अक्षर, संख्याएं और निम्नलिखित विशेष वर्ण @._+- हो सकते हैं या एक वैध ईमेल पता होना चाहिए।
|
||||
adminUserSettings.roles=भूमिकाएं
|
||||
adminUserSettings.role=भूमिका
|
||||
adminUserSettings.actions=कार्रवाइयां
|
||||
adminUserSettings.apiUser=सीमित API उपयोगकर्ता
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Boja
|
||||
sponsor=Sponzor
|
||||
info=Informacije
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Stranica
|
||||
pages=Stranice
|
||||
loading=Učitavanje...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Obriši korisnika
|
||||
adminUserSettings.confirmDeleteUser=Treba li obračunati ovaj korisnika?
|
||||
adminUserSettings.confirmChangeUserStatus=Treba li isključiti/uključiti ovog korisnika?
|
||||
adminUserSettings.usernameInfo=Korisničko ime može sadržavati samo slova, brojke i sljedeće posebne znakove @._+- ili mora biti važeća adresa e-pošte.
|
||||
adminUserSettings.roles=Uloge
|
||||
adminUserSettings.role=Uloga
|
||||
adminUserSettings.actions=Akcije
|
||||
adminUserSettings.apiUser=Korisnik s ograničenim API pristupom
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Szín
|
||||
sponsor=Támogató
|
||||
info=Információ
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Oldal
|
||||
pages=Oldal
|
||||
loading=Betöltés...
|
||||
@ -347,8 +346,8 @@ account.property=Tulajdonság
|
||||
account.webBrowserSettings=Böngészőbeállítások
|
||||
account.syncToBrowser=Szinkronizálás: Fiók -> Böngésző
|
||||
account.syncToAccount=Szinkronizálás: Böngésző -> Fiók
|
||||
account.adminTitle=Rendszergazdai beállítások
|
||||
account.adminNotif=Rendszergazdai jogosultságokkal rendelkezik. Hozzáférhet a rendszerbeállításokhoz és a felhasználókezeléshez.
|
||||
account.adminTitle=Administrator Tools
|
||||
account.adminNotif=You have admin privileges. Access system settings and user management.
|
||||
|
||||
|
||||
adminUserSettings.title=Felhasználókezelés
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Felhasználó törlése
|
||||
adminUserSettings.confirmDeleteUser=Biztosan törli a felhasználót?
|
||||
adminUserSettings.confirmChangeUserStatus=Biztosan módosítja a felhasználó állapotát?
|
||||
adminUserSettings.usernameInfo=A felhasználónév csak betűket, számokat és a következő speciális karaktereket tartalmazhatja: @._+- vagy érvényes e-mail címnek kell lennie.
|
||||
adminUserSettings.roles=Szerepkörök
|
||||
adminUserSettings.role=Szerepkör
|
||||
adminUserSettings.actions=Műveletek
|
||||
adminUserSettings.apiUser=Korlátozott API felhasználó
|
||||
@ -379,19 +379,18 @@ adminUserSettings.disabledUsers=Letiltott felhasználók:
|
||||
adminUserSettings.totalUsers=Összes felhasználó:
|
||||
adminUserSettings.lastRequest=Utolsó kérés
|
||||
adminUserSettings.usage=Használat megtekintése
|
||||
adminUserSettings.teams=Csapatok megtekintése/szerkesztése
|
||||
adminUserSettings.team=Csapat
|
||||
adminUserSettings.manageTeams=Csapatok kezelése
|
||||
adminUserSettings.createTeam=Csapat létrehozása
|
||||
adminUserSettings.viewTeam=Csapat megtekintése
|
||||
adminUserSettings.deleteTeam=Csapat törlése
|
||||
adminUserSettings.teamName=Csapat neve
|
||||
adminUserSettings.teamExists=A csapat már létezik
|
||||
adminUserSettings.teamCreated=Csapat sikeresen létrehozva
|
||||
adminUserSettings.teamChanged=A felhasználó csapata frissítve lett
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Összes tag
|
||||
adminUserSettings.confirmDeleteTeam=Biztosan törli ezt a csapatot?
|
||||
adminUserSettings.teams=View/Edit Teams
|
||||
adminUserSettings.team=Team
|
||||
adminUserSettings.manageTeams=Manage Teams
|
||||
adminUserSettings.createTeam=Create Team
|
||||
adminUserSettings.viewTeam=View Team
|
||||
adminUserSettings.deleteTeam=Delete Team
|
||||
adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
teamCreated=Team created successfully
|
||||
teamExists=A team with that name already exists
|
||||
@ -402,25 +401,15 @@ teamHasUsers=Cannot delete a team with users assigned
|
||||
teamRenamed=Team renamed successfully
|
||||
|
||||
# Team user management
|
||||
team.addUser=Felhasználó hozzáadása a csapathoz
|
||||
team.selectUser=Felhasználó kiválasztása
|
||||
team.warning.moveUser=Figyelem: Ez a felhasználót a(z) "{0}" csapatból a(z) "{1}" csapatba helyezi át. Biztos benne?
|
||||
team.confirm.moveUser=Biztosan át akarja helyezni ezt a felhasználót a(z) "{0}" csapatból a(z) "{1}" csapatba?
|
||||
team.userAdded=Felhasználó sikeresen hozzáadva a csapathoz
|
||||
team.back=Vissza a csapatokhoz
|
||||
team.internal=Belső csapat
|
||||
team.internalTeamNotAccessible=A belső csapat egy rendszer csapat, és nem érhető el
|
||||
team.cannotMoveInternalUsers=A belső csapatban lévő felhasználók nem mozgathatók más csapatokba.
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
team.addUser=Add User to Team
|
||||
team.selectUser=Select User
|
||||
team.warning.moveUser=Warning: This will move the user from "{0}" team to "{1}" team. Are you sure?
|
||||
team.confirm.moveUser=Are you sure you want to move this user from "{0}" team to "{1}" team?
|
||||
team.userAdded=User successfully added to team
|
||||
team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
|
||||
|
||||
|
||||
@ -1699,17 +1688,19 @@ fakeScan.resolution=Felbontás (DPI)
|
||||
|
||||
|
||||
# Table of Contents Feature
|
||||
home.editTableOfContents.title=Szerkesztés vagy hozzáadás a PDF tartalomjegyzékéhez
|
||||
home.editTableOfContents.desc=PDF dokumentumokban könyvjelzők és tartalomjegyzék hozzáadása vagy szerkesztése
|
||||
home.editTableOfContents.title=Edit Table of Contents
|
||||
home.editTableOfContents.desc=Add or edit bookmarks and table of contents in PDF documents
|
||||
|
||||
editTableOfContents.tags=bookmarks,toc,navigation,index,table of contents,chapters,sections,outline
|
||||
editTableOfContents.title=Edit Table of Contents
|
||||
editTableOfContents.header=Add or Edit PDF Table of Contents
|
||||
editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to append to existing)
|
||||
editTableOfContents.editorTitle=Bookmark Editor
|
||||
editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks.
|
||||
editTableOfContents.addBookmark=Add New Bookmark
|
||||
editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document.
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
editTableOfContents.tags=könyvjelzők,tartalomjegyzék,navigáció,index,fejezetek,szakaszok,vázlat
|
||||
editTableOfContents.title=Tartalomjegyzék szerkesztése
|
||||
editTableOfContents.header=PDF tartalomjegyzék hozzáadása vagy szerkesztése
|
||||
editTableOfContents.replaceExisting=Meglévő könyvjelzők cseréje (törölje a pipát a meglévőkhöz való hozzáfűzéshez)
|
||||
editTableOfContents.editorTitle=Könyvjelző szerkesztő
|
||||
editTableOfContents.editorDesc=Könyvjelzők hozzáadása és rendezése lent. Kattintson a + gombra gyermek könyvjelzők hozzáadásához.
|
||||
editTableOfContents.addBookmark=Új könyvjelző hozzáadása
|
||||
editTableOfContents.desc.1=Ez az eszköz lehetővé teszi a tartalomjegyzék (könyvjelzők) hozzáadását vagy szerkesztését egy PDF dokumentumban.
|
||||
editTableOfContents.desc.2=Hierarchikus struktúrákat hozhat létre, ha gyermek könyvjelzőket ad a szülő könyvjelzőkhöz.
|
||||
editTableOfContents.desc.3=Minden könyvjelzőhöz szükséges egy cím és egy céloldalszám.
|
||||
editTableOfContents.submit=Alkalmazza a tartalomjegyzéket
|
||||
|
@ -212,7 +212,6 @@ color=Warna
|
||||
sponsor=Pembantu
|
||||
info=Informasi
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Halaman
|
||||
pages=Halaman-halaman
|
||||
loading=Mengambil data...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Hapus Pengguna
|
||||
adminUserSettings.confirmDeleteUser=Haruskah pengguna dihapus?
|
||||
adminUserSettings.confirmChangeUserStatus=Haruskah pengguna dinonaktifkan/diaktifkan?
|
||||
adminUserSettings.usernameInfo=Nama pengguna hanya boleh mengandung huruf, angka, dan karakter khusus berikut @._+- atau harus berupa alamat email yang valid.
|
||||
adminUserSettings.roles=Peran
|
||||
adminUserSettings.role=Peran
|
||||
adminUserSettings.actions=Tindakan
|
||||
adminUserSettings.apiUser=Pengguna API Terbatas
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Colore
|
||||
sponsor=Sponsor
|
||||
info=Info
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Pagina
|
||||
pages=Pagine
|
||||
loading=Caricamento...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Elimina utente
|
||||
adminUserSettings.confirmDeleteUser=L'utente deve essere eliminato?
|
||||
adminUserSettings.confirmChangeUserStatus=L'utente dovrebbe essere disabilitato/abilitato?
|
||||
adminUserSettings.usernameInfo=Il nome utente può contenere solo lettere, numeri e i seguenti caratteri speciali @._+- oppure deve essere un indirizzo email valido.
|
||||
adminUserSettings.roles=Ruoli
|
||||
adminUserSettings.role=Ruolo
|
||||
adminUserSettings.actions=Azioni
|
||||
adminUserSettings.apiUser=Utente API limitato
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=色
|
||||
sponsor=スポンサー
|
||||
info=情報
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=ページ
|
||||
pages=ページ
|
||||
loading=読込中...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=ユーザの削除
|
||||
adminUserSettings.confirmDeleteUser=ユーザを本当に削除しますか?
|
||||
adminUserSettings.confirmChangeUserStatus=ユーザーを無効/有効にする必要がありますか?
|
||||
adminUserSettings.usernameInfo=ユーザー名には、文字、数字、および次の特殊文字 @._+- のみを含めることができます。または、有効な電子メール アドレスである必要があります。
|
||||
adminUserSettings.roles=役割
|
||||
adminUserSettings.role=役割
|
||||
adminUserSettings.actions=アクション
|
||||
adminUserSettings.apiUser=限定されたAPIユーザー
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=색상
|
||||
sponsor=후원
|
||||
info=정보
|
||||
pro=프로
|
||||
proFeatures=Pro Features
|
||||
page=페이지
|
||||
pages=페이지
|
||||
loading=로딩 중...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=사용자 삭제
|
||||
adminUserSettings.confirmDeleteUser=사용자를 삭제하시겠습니까?
|
||||
adminUserSettings.confirmChangeUserStatus=사용자를 비활성화/활성화하시겠습니까?
|
||||
adminUserSettings.usernameInfo=사용자 이름은 문자, 숫자 및 @._+- 특수문자만 포함하거나 유효한 이메일 주소여야 합니다.
|
||||
adminUserSettings.roles=역할
|
||||
adminUserSettings.role=역할
|
||||
adminUserSettings.actions=작업
|
||||
adminUserSettings.apiUser=제한된 API 사용자
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
1706
stirling-pdf/src/main/resources/messages_ml_ML.properties
Normal file
1706
stirling-pdf/src/main/resources/messages_ml_ML.properties
Normal file
File diff suppressed because it is too large
Load Diff
@ -212,7 +212,6 @@ color=Kleur
|
||||
sponsor=Sponsor
|
||||
info=Informatie
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Pagina
|
||||
pages=Pagen
|
||||
loading=Laden...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Verwijder gebruiker
|
||||
adminUserSettings.confirmDeleteUser=Moet deze gebruiker verwijderd worden?
|
||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
||||
adminUserSettings.usernameInfo=Gebruikersnaam kan alleen letters, nummers en de volgende speciale tekens @._+- bevatten of moet een geldig emailadres zijn.
|
||||
adminUserSettings.roles=Rollen
|
||||
adminUserSettings.role=Rol
|
||||
adminUserSettings.actions=Acties
|
||||
adminUserSettings.apiUser=Beperkte API gebruiker
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Farge
|
||||
sponsor=Sponsor
|
||||
info=Info
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Side
|
||||
pages=Sider
|
||||
loading=Laster...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Slett Bruker
|
||||
adminUserSettings.confirmDeleteUser=Skal brukeren slettes?
|
||||
adminUserSettings.confirmChangeUserStatus=Skal brukeren deaktiveres/aktiveres?
|
||||
adminUserSettings.usernameInfo=Brukernavn kan bare inneholde bokstaver, tall og følgende spesialtegn @._+- eller må være en gyldig e-postadresse.
|
||||
adminUserSettings.roles=Roller
|
||||
adminUserSettings.role=Rolle
|
||||
adminUserSettings.actions=Handlinger
|
||||
adminUserSettings.apiUser=Begrenset API Bruker
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=kolor
|
||||
sponsor=sponsor
|
||||
info=informacje
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Strona
|
||||
pages=Strony
|
||||
loading=Ładowanie...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Usuń użytkownika
|
||||
adminUserSettings.confirmDeleteUser=Czy na pewno usunąć użytkownika?
|
||||
adminUserSettings.confirmChangeUserStatus=Czy użytkownik powinien zostać wyłączony/włączony?
|
||||
adminUserSettings.usernameInfo=Niewłaściwa nazwa użytkownika - musi zawierać litery, cyfry i @._+- LUB być adresem email.
|
||||
adminUserSettings.roles=Role
|
||||
adminUserSettings.role=Rola
|
||||
adminUserSettings.actions=Akcje
|
||||
adminUserSettings.apiUser=Ograniczony Użytkownik API
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Cor
|
||||
sponsor=Patrocinador
|
||||
info=Informações
|
||||
pro=Profissional
|
||||
proFeatures=Pro Features
|
||||
page=Página
|
||||
pages=Páginas
|
||||
loading=Carregando...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Apagar usuário
|
||||
adminUserSettings.confirmDeleteUser=O usuário deve ser apagado?
|
||||
adminUserSettings.confirmChangeUserStatus=O usuário deve ser desabilitado/habilitado?
|
||||
adminUserSettings.usernameInfo=Nome de usuário só pode incluir letras, números e os seguintes caracteres especiais @._+- ou deve ser um e-mail válido.
|
||||
adminUserSettings.roles=Funções
|
||||
adminUserSettings.role=Função
|
||||
adminUserSettings.actions=Ações
|
||||
adminUserSettings.apiUser=Usuário de API limitado
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Cor
|
||||
sponsor=Patrocinar
|
||||
info=Informação
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Página
|
||||
pages=Páginas
|
||||
loading=A carregar...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Eliminar Utilizador
|
||||
adminUserSettings.confirmDeleteUser=Deve o utilizador ser eliminado?
|
||||
adminUserSettings.confirmChangeUserStatus=Deve o utilizador ser desativado/ativado?
|
||||
adminUserSettings.usernameInfo=O nome de utilizador só pode conter letras, números e os seguintes caracteres especiais @._+- ou deve ser um endereço de email válido.
|
||||
adminUserSettings.roles=Funções
|
||||
adminUserSettings.role=Função
|
||||
adminUserSettings.actions=Ações
|
||||
adminUserSettings.apiUser=Utilizador API Limitado
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Culoare
|
||||
sponsor=Sponsor
|
||||
info=Informații
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Page
|
||||
pages=Pages
|
||||
loading=Loading...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Șterge Utilizator
|
||||
adminUserSettings.confirmDeleteUser=Ar trebui șters utilizatorul?
|
||||
adminUserSettings.confirmChangeUserStatus=Ar trebui dezactivat/activat utilizatorul?
|
||||
adminUserSettings.usernameInfo=Numele de utilizator poate conține doar litere, numere și următoarele caractere speciale @._+- sau trebuie să fie o adresă de email validă.
|
||||
adminUserSettings.roles=Roluri
|
||||
adminUserSettings.role=Rol
|
||||
adminUserSettings.actions=Acțiuni
|
||||
adminUserSettings.apiUser=Utilizator API Limitat
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Цвет
|
||||
sponsor=Спонсор
|
||||
info=Информация
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Страница
|
||||
pages=Страницы
|
||||
loading=Загрузка...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Удалить пользователя
|
||||
adminUserSettings.confirmDeleteUser=Удалить пользователя?
|
||||
adminUserSettings.confirmChangeUserStatus=Отключить/включить пользователя?
|
||||
adminUserSettings.usernameInfo=Имя пользователя может содержать только буквы, цифры и следующие специальные символы @._+- или должно быть действительным адресом электронной почты.
|
||||
adminUserSettings.roles=Роли
|
||||
adminUserSettings.role=Роль
|
||||
adminUserSettings.actions=Действия
|
||||
adminUserSettings.apiUser=Ограниченный пользователь API
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Farba
|
||||
sponsor=Sponzorovať
|
||||
info=Info
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Page
|
||||
pages=Pages
|
||||
loading=Loading...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Delete User
|
||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
||||
adminUserSettings.usernameInfo=Používateľské meno musí obsahovať iba písmená a čísla, žiadne medzery alebo špeciálne znaky.
|
||||
adminUserSettings.roles=Role
|
||||
adminUserSettings.role=Rola
|
||||
adminUserSettings.actions=Akcie
|
||||
adminUserSettings.apiUser=Obmedzený API používateľ
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Barva
|
||||
sponsor=Sponzor
|
||||
info=Podatki
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Stran
|
||||
pages=Strani
|
||||
loading=Nalaganje...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Izbriši uporabnika
|
||||
adminUserSettings.confirmDeleteUser=Ali je treba uporabnika izbrisati?
|
||||
adminUserSettings.confirmChangeUserStatus=Ali naj bo uporabnik onemogočen/omogočen?
|
||||
adminUserSettings.usernameInfo=Uporabniško ime lahko vsebuje samo črke, številke in naslednje posebne znake @._+- ali mora biti veljaven e-poštni naslov.
|
||||
adminUserSettings.roles=Vloge
|
||||
adminUserSettings.role=Vloga
|
||||
adminUserSettings.actions=Dejanja
|
||||
adminUserSettings.apiUser=Omejen uporabnik API-ja
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Color
|
||||
sponsor=Sponsor
|
||||
info=Info
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Page
|
||||
pages=Pages
|
||||
loading=Loading...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Delete User
|
||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
||||
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||
adminUserSettings.roles=Uloge
|
||||
adminUserSettings.role=Uloga
|
||||
adminUserSettings.actions=Akcije
|
||||
adminUserSettings.apiUser=Korisnik s ograničenim API pristupom
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Färg
|
||||
sponsor=Sponsör
|
||||
info=Info
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Sidan
|
||||
pages=Sidor
|
||||
loading=Laddar...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Ta bort användare
|
||||
adminUserSettings.confirmDeleteUser=Ska användaren tas bort?
|
||||
adminUserSettings.confirmChangeUserStatus=Ska användaren inaktiveras/aktiveras?
|
||||
adminUserSettings.usernameInfo=Användarnamn kan endast innehålla bokstäver, siffror och följande specialtecken @._+- eller måste vara en giltig e-postadress.
|
||||
adminUserSettings.roles=Roller
|
||||
adminUserSettings.role=Roll
|
||||
adminUserSettings.actions=Åtgärder
|
||||
adminUserSettings.apiUser=Begränsad API-användare
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=สี
|
||||
sponsor=ผู้สนับสนุน
|
||||
info=ข้อมูล
|
||||
pro=โปร
|
||||
proFeatures=Pro Features
|
||||
page=หน้า
|
||||
pages=หน้า
|
||||
loading=กำลังโหลด...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=ลบผู้ใช้
|
||||
adminUserSettings.confirmDeleteUser=ควรลบผู้ใช้นี้หรือไม่?
|
||||
adminUserSettings.confirmChangeUserStatus=ผู้ใช้นี้ควรถูกปิด/เปิดใช้งานหรือไม่?
|
||||
adminUserSettings.usernameInfo=ชื่อผู้ใช้สามารถประกอบด้วยตัวอักษร ตัวเลข และอักขระพิเศษต่อไปนี้ @._+- หรือจะต้องเป็นที่อยู่อีเมลที่ถูกต้อง
|
||||
adminUserSettings.roles=บทบาท
|
||||
adminUserSettings.role=บทบาท
|
||||
adminUserSettings.actions=การดำเนินการ
|
||||
adminUserSettings.apiUser=ผู้ใช้ API จำกัด
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Renk
|
||||
sponsor=Bağış
|
||||
info=Bilgi
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Sayfa
|
||||
pages=Sayfalar
|
||||
loading=Yükleniyor...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Kullanıcı Sil
|
||||
adminUserSettings.confirmDeleteUser=Kullanıcı silinsin mi?
|
||||
adminUserSettings.confirmChangeUserStatus=Kullanıcı devre dışı bırakılmalı/aktifleştirilmeli mi ?
|
||||
adminUserSettings.usernameInfo=Kullanıcı adı yalnızca harf, rakam ve aşağıdaki özel karakterleri @._+- içerebilir veya geçerli bir e-posta adresi olmalıdır.
|
||||
adminUserSettings.roles=Roller
|
||||
adminUserSettings.role=Rol
|
||||
adminUserSettings.actions=Eylemler
|
||||
adminUserSettings.apiUser=Sınırlı API Kullanıcısı
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Колір
|
||||
sponsor=Спонсор
|
||||
info=Інформація
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Сторінка
|
||||
pages=Сторінки
|
||||
loading=Завантаження...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Видалити користувача
|
||||
adminUserSettings.confirmDeleteUser=Видалити цього користувача?
|
||||
adminUserSettings.confirmChangeUserStatus=Чи потрібно вимкнути/ввімкнути користувача?
|
||||
adminUserSettings.usernameInfo=Ім’я користувача може містити лише літери, цифри та наступні спеціальні символи @._+- або має бути дійсною електронною адресою.
|
||||
adminUserSettings.roles=Ролі
|
||||
adminUserSettings.role=Роль
|
||||
adminUserSettings.actions=Дії
|
||||
adminUserSettings.apiUser=Обмежений користувач API
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=Màu sắc
|
||||
sponsor=Nhà tài trợ
|
||||
info=Thông tin
|
||||
pro=Pro
|
||||
proFeatures=Pro Features
|
||||
page=Page
|
||||
pages=Pages
|
||||
loading=Loading...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=Xóa người dùng
|
||||
adminUserSettings.confirmDeleteUser=Bạn có muốn xóa người dùng không?
|
||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
||||
adminUserSettings.usernameInfo=Tên người dùng chỉ có thể chứa chữ cái, số và các ký tự đặc biệt sau @._+- hoặc phải là một địa chỉ email hợp lệ.
|
||||
adminUserSettings.roles=Vai trò
|
||||
adminUserSettings.role=Vai trò
|
||||
adminUserSettings.actions=Hành động
|
||||
adminUserSettings.apiUser=Người dùng API giới hạn
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -212,7 +212,6 @@ color=颜色
|
||||
sponsor=赞助
|
||||
info=信息
|
||||
pro=专业版
|
||||
proFeatures=Pro Features
|
||||
page=页面
|
||||
pages=页码
|
||||
loading=加载中...
|
||||
@ -266,7 +265,7 @@ enterpriseEdition.button=升级到 Pro 版本
|
||||
enterpriseEdition.warning=此功能仅适用于 Pro 版本
|
||||
enterpriseEdition.yamlAdvert=Stirling PDF Pro支持YAML配置文件和其他SSO功能。
|
||||
enterpriseEdition.ssoAdvert=寻找更多的用户管理功能?查看Stirling PDF Pro
|
||||
enterpriseEdition.proTeamFeatureDisabled=团队管理功能需要 Pro 许可证或更高版本
|
||||
enterpriseEdition.proTeamFeatureDisabled=Team management features require a Pro licence or higher
|
||||
|
||||
|
||||
#################
|
||||
@ -347,8 +346,8 @@ account.property=属性
|
||||
account.webBrowserSettings=Web 浏览器设置
|
||||
account.syncToBrowser=同步账户 -> 浏览器
|
||||
account.syncToAccount=同步账户 <- 浏览器
|
||||
account.adminTitle=管理员工具
|
||||
account.adminNotif=您具有管理员权限,可访问系统设置和用户管理。
|
||||
account.adminTitle=Administrator Tools
|
||||
account.adminNotif=You have admin privileges. Access system settings and user management.
|
||||
|
||||
|
||||
adminUserSettings.title=用户控制设置
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=删除用户
|
||||
adminUserSettings.confirmDeleteUser=确认删除该用户?
|
||||
adminUserSettings.confirmChangeUserStatus=是否应禁用/启用该用户?
|
||||
adminUserSettings.usernameInfo=用户名只能包含字母、数字和以下特殊字符@._+-,或者必须是有效的电子邮件地址。
|
||||
adminUserSettings.roles=角色
|
||||
adminUserSettings.role=角色
|
||||
adminUserSettings.actions=操作
|
||||
adminUserSettings.apiUser=受限制的 API 用户
|
||||
@ -378,20 +378,19 @@ adminUserSettings.activeUsers=激活用户:
|
||||
adminUserSettings.disabledUsers=禁用用户:
|
||||
adminUserSettings.totalUsers=总用户:
|
||||
adminUserSettings.lastRequest=最后登录
|
||||
adminUserSettings.usage=查看使用情况
|
||||
adminUserSettings.teams=查看/编辑团队
|
||||
adminUserSettings.team=团队
|
||||
adminUserSettings.manageTeams=管理团队
|
||||
adminUserSettings.createTeam=创建团队
|
||||
adminUserSettings.viewTeam=查看团队
|
||||
adminUserSettings.deleteTeam=删除团队
|
||||
adminUserSettings.teamName=团队名称
|
||||
adminUserSettings.teamExists=该团队已存在
|
||||
adminUserSettings.teamCreated=团队成功创建
|
||||
adminUserSettings.teamChanged=用户所属团队已更新
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=成员总数
|
||||
adminUserSettings.confirmDeleteTeam=您确定要删除此团队吗?
|
||||
adminUserSettings.usage=View Usage
|
||||
adminUserSettings.teams=View/Edit Teams
|
||||
adminUserSettings.team=Team
|
||||
adminUserSettings.manageTeams=Manage Teams
|
||||
adminUserSettings.createTeam=Create Team
|
||||
adminUserSettings.viewTeam=View Team
|
||||
adminUserSettings.deleteTeam=Delete Team
|
||||
adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
teamCreated=Team created successfully
|
||||
teamExists=A team with that name already exists
|
||||
@ -402,25 +401,15 @@ teamHasUsers=Cannot delete a team with users assigned
|
||||
teamRenamed=Team renamed successfully
|
||||
|
||||
# Team user management
|
||||
team.addUser=添加用户到团队
|
||||
team.selectUser=选择用户
|
||||
team.warning.moveUser=警告:这将把用户从"{0}"团队移至"{1}"团队。是否确定?
|
||||
team.confirm.moveUser=您确定要将该用户从"{0}"团队移至"{1}"团队吗?
|
||||
team.userAdded=用户已成功添加至团队
|
||||
team.back=返回团队列表
|
||||
team.internal=内部团队
|
||||
team.internalTeamNotAccessible=内部团队为系统预设,无法访问
|
||||
team.cannotMoveInternalUsers=内部团队中的用户无法转移至其他团队
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
team.addUser=Add User to Team
|
||||
team.selectUser=Select User
|
||||
team.warning.moveUser=Warning: This will move the user from "{0}" team to "{1}" team. Are you sure?
|
||||
team.confirm.moveUser=Are you sure you want to move this user from "{0}" team to "{1}" team?
|
||||
team.userAdded=User successfully added to team
|
||||
team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
|
||||
|
||||
|
||||
@ -1211,7 +1200,7 @@ merge.header=合并多个 PDF(2个以上)。
|
||||
merge.sortByName=按名称排序
|
||||
merge.sortByDate=按日期排序
|
||||
merge.removeCertSign=删除合并文件的数字签名吗?
|
||||
merge.generateToc=在合并文件中生成目录吗?
|
||||
merge.generateToc=Generate table of contents in the merged file?
|
||||
merge.submit=合并
|
||||
|
||||
|
||||
@ -1421,9 +1410,9 @@ changeMetadata.selectText.5=添加自定义元数据条目
|
||||
changeMetadata.submit=更改
|
||||
|
||||
#unlockPDFForms
|
||||
unlockPDFForms.title=移除表单字段只读属性
|
||||
unlockPDFForms.header=解锁 PDF 表单
|
||||
unlockPDFForms.submit=移除
|
||||
unlockPDFForms.title=Remove Read-Only from Form Fields
|
||||
unlockPDFForms.header=Unlock PDF Forms
|
||||
unlockPDFForms.submit=Remove
|
||||
|
||||
#pdfToPDFA
|
||||
pdfToPDFA.title=PDF 转 PDF/A
|
||||
@ -1699,17 +1688,19 @@ fakeScan.resolution=分辨率(DPI)
|
||||
|
||||
|
||||
# Table of Contents Feature
|
||||
home.editTableOfContents.title=编辑目录
|
||||
home.editTableOfContents.desc=为 PDF 文档添加或编辑目录和书签
|
||||
home.editTableOfContents.title=Edit Table of Contents
|
||||
home.editTableOfContents.desc=Add or edit bookmarks and table of contents in PDF documents
|
||||
|
||||
editTableOfContents.tags=bookmarks,toc,navigation,index,table of contents,chapters,sections,outline
|
||||
editTableOfContents.title=Edit Table of Contents
|
||||
editTableOfContents.header=Add or Edit PDF Table of Contents
|
||||
editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to append to existing)
|
||||
editTableOfContents.editorTitle=Bookmark Editor
|
||||
editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks.
|
||||
editTableOfContents.addBookmark=Add New Bookmark
|
||||
editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document.
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
editTableOfContents.tags=书签,目录,导航,索引,章节,小节,结构,大纲
|
||||
editTableOfContents.title=编辑目录
|
||||
editTableOfContents.header=添加或编辑 PDF 目录
|
||||
editTableOfContents.replaceExisting=替换现有书签(取消勾选则追加至原书签)
|
||||
editTableOfContents.editorTitle=书签编辑器
|
||||
editTableOfContents.editorDesc=在下方添加并排列书签,点击 + 可添加子书签
|
||||
editTableOfContents.addBookmark=添加书签
|
||||
editTableOfContents.desc.1=此工具可用于在 PDF 文档中添加或编辑目录(书签)
|
||||
editTableOfContents.desc.2=您可以通过为父书签添加子书签来构建层级结构
|
||||
editTableOfContents.desc.3=每个书签需填写标题和目标页码
|
||||
editTableOfContents.submit=应用目录
|
||||
|
@ -212,7 +212,6 @@ color=顏色
|
||||
sponsor=贊助
|
||||
info=資訊
|
||||
pro=專業版
|
||||
proFeatures=Pro Features
|
||||
page=頁面
|
||||
pages=頁面
|
||||
loading=載入中...
|
||||
@ -360,6 +359,7 @@ adminUserSettings.deleteUser=刪除使用者
|
||||
adminUserSettings.confirmDeleteUser=確定要刪除此使用者?
|
||||
adminUserSettings.confirmChangeUserStatus=是否要停用/啟用此使用者?
|
||||
adminUserSettings.usernameInfo=使用者名稱只能包含字母、數字和以下特殊字元 @._+- 或必須是有效的電子郵件地址。
|
||||
adminUserSettings.roles=角色
|
||||
adminUserSettings.role=角色
|
||||
adminUserSettings.actions=操作
|
||||
adminUserSettings.apiUser=受限制的 API 使用者
|
||||
@ -389,7 +389,6 @@ adminUserSettings.teamName=Team Name
|
||||
adminUserSettings.teamExists=Team already exists
|
||||
adminUserSettings.teamCreated=Team created successfully
|
||||
adminUserSettings.teamChanged=User's team was updated
|
||||
adminUserSettings.teamHidden=Hidden
|
||||
adminUserSettings.totalMembers=Total Members
|
||||
adminUserSettings.confirmDeleteTeam=Are you sure you want to delete this team?
|
||||
|
||||
@ -411,16 +410,6 @@ team.back=Back to Teams
|
||||
team.internal=Internal Team
|
||||
team.internalTeamNotAccessible=The Internal team is a system team and cannot be accessed
|
||||
team.cannotMoveInternalUsers=Users in the Internal team cannot be moved to other teams
|
||||
team.hidden=Hidden
|
||||
team.name=Team Name
|
||||
team.totalMembers=Total Members
|
||||
team.members=Members
|
||||
team.username=Username
|
||||
team.role=Role
|
||||
team.status=Status
|
||||
team.enabled=Enabled
|
||||
team.disabled=Disabled
|
||||
team.noMembers=This team has no members yet.
|
||||
|
||||
|
||||
|
||||
@ -1713,3 +1702,5 @@ editTableOfContents.desc.1=This tool allows you to add or edit the table of cont
|
||||
editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks.
|
||||
editTableOfContents.desc.3=Each bookmark requires a title and target page number.
|
||||
editTableOfContents.submit=Apply Table of Contents
|
||||
|
||||
|
||||
|
@ -218,7 +218,7 @@ document.addEventListener('DOMContentLoaded', async function () {
|
||||
});
|
||||
}
|
||||
try {
|
||||
const response = await fetch('/files/popularity.txt');
|
||||
const response = await fetch('files/popularity.txt');
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! status: ${response.status}`);
|
||||
}
|
||||
|
@ -435,14 +435,14 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
if (confirm('Are you sure you want to remove this bookmark' +
|
||||
if (confirm('Are you sure you want to remove this bookmark' +
|
||||
(bookmark.children.length > 0 ? ' and all its children?' : '?'))) {
|
||||
removeBookmark(bookmark.id);
|
||||
}
|
||||
});
|
||||
|
||||
headerRight.appendChild(quickAddChildButton);
|
||||
headerRight.appendChild(quickAddSiblingButton);
|
||||
headerRight.appendChild(quickAddSiblingButton);
|
||||
headerRight.appendChild(quickRemoveButton);
|
||||
|
||||
// Assemble header
|
||||
@ -650,4 +650,4 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
@ -8,6 +8,13 @@
|
||||
color: var(--md-sys-color-tertiary);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.text-overflow {
|
||||
max-width: 100px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
@ -122,7 +129,7 @@
|
||||
<th scope="col">#</th>
|
||||
<th scope="col" th:title="#{username}" th:text="#{username}">Username</th>
|
||||
<th scope="col" th:title="#{adminUserSettings.team}" th:text="#{adminUserSettings.team}">Team</th>
|
||||
<th scope="col" th:title="#{adminUserSettings.role}" th:text="#{adminUserSettings.role}">Roles</th>
|
||||
<th scope="col" th:title="#{adminUserSettings.roles}" th:text="#{adminUserSettings.roles}">Roles</th>
|
||||
<th scope="col" th:title="#{adminUserSettings.authenticated}" class="text-overflow" th:text="#{adminUserSettings.authenticated}">Authenticated</th>
|
||||
<th scope="col" th:title="#{adminUserSettings.lastRequest}" class="text-overflow" th:text="#{adminUserSettings.lastRequest}">Last Request</th>
|
||||
<th scope="col" th:title="#{adminUserSettings.actions}" th:text="#{adminUserSettings.actions}">Actions</th>
|
||||
|
@ -33,7 +33,7 @@
|
||||
<div class="mb-3">
|
||||
<label th:text="#{addPassword.selectText.3}"></label> <select class="form-control" id="keyLength" name="keyLength">
|
||||
<option value="40">40</option>
|
||||
<option value="128" selected>128</option>
|
||||
<option value="128">128</option>
|
||||
<option value="256">256</option>
|
||||
</select>
|
||||
<small class="form-text text-muted" th:text="#{addPassword.selectText.4}"></small>
|
||||
|
@ -50,7 +50,7 @@ class MergeControllerTest {
|
||||
mockFile1 = new MockMultipartFile("file1", "document1.pdf", "application/pdf", "PDF content 1".getBytes());
|
||||
mockFile2 = new MockMultipartFile("file2", "document2.pdf", "application/pdf", "PDF content 2".getBytes());
|
||||
mockFile3 = new MockMultipartFile("file3", "chapter3.pdf", "application/pdf", "PDF content 3".getBytes());
|
||||
|
||||
|
||||
mockDocument = mock(PDDocument.class);
|
||||
mockMergedDocument = mock(PDDocument.class);
|
||||
mockCatalog = mock(PDDocumentCatalog.class);
|
||||
@ -63,23 +63,23 @@ class MergeControllerTest {
|
||||
void testAddTableOfContents_WithMultipleFiles_Success() throws Exception {
|
||||
// Given
|
||||
MultipartFile[] files = {mockFile1, mockFile2, mockFile3};
|
||||
|
||||
|
||||
// Mock the merged document setup
|
||||
when(mockMergedDocument.getDocumentCatalog()).thenReturn(mockCatalog);
|
||||
when(mockMergedDocument.getNumberOfPages()).thenReturn(6);
|
||||
when(mockMergedDocument.getPage(0)).thenReturn(mockPage1);
|
||||
when(mockMergedDocument.getPage(2)).thenReturn(mockPage2);
|
||||
when(mockMergedDocument.getPage(4)).thenReturn(mockPage1);
|
||||
|
||||
|
||||
// Mock individual document loading for page count
|
||||
PDDocument doc1 = mock(PDDocument.class);
|
||||
PDDocument doc2 = mock(PDDocument.class);
|
||||
PDDocument doc3 = mock(PDDocument.class);
|
||||
|
||||
|
||||
when(pdfDocumentFactory.load(mockFile1)).thenReturn(doc1);
|
||||
when(pdfDocumentFactory.load(mockFile2)).thenReturn(doc2);
|
||||
when(pdfDocumentFactory.load(mockFile3)).thenReturn(doc3);
|
||||
|
||||
|
||||
when(doc1.getNumberOfPages()).thenReturn(2);
|
||||
when(doc2.getNumberOfPages()).thenReturn(2);
|
||||
when(doc3.getNumberOfPages()).thenReturn(2);
|
||||
@ -92,15 +92,15 @@ class MergeControllerTest {
|
||||
// Then
|
||||
ArgumentCaptor<PDDocumentOutline> outlineCaptor = ArgumentCaptor.forClass(PDDocumentOutline.class);
|
||||
verify(mockCatalog).setDocumentOutline(outlineCaptor.capture());
|
||||
|
||||
|
||||
PDDocumentOutline capturedOutline = outlineCaptor.getValue();
|
||||
assertNotNull(capturedOutline);
|
||||
|
||||
|
||||
// Verify that documents were loaded for page count
|
||||
verify(pdfDocumentFactory).load(mockFile1);
|
||||
verify(pdfDocumentFactory).load(mockFile2);
|
||||
verify(pdfDocumentFactory).load(mockFile3);
|
||||
|
||||
|
||||
// Verify document closing
|
||||
verify(doc1).close();
|
||||
verify(doc2).close();
|
||||
@ -111,11 +111,11 @@ class MergeControllerTest {
|
||||
void testAddTableOfContents_WithSingleFile_Success() throws Exception {
|
||||
// Given
|
||||
MultipartFile[] files = {mockFile1};
|
||||
|
||||
|
||||
when(mockMergedDocument.getDocumentCatalog()).thenReturn(mockCatalog);
|
||||
when(mockMergedDocument.getNumberOfPages()).thenReturn(3);
|
||||
when(mockMergedDocument.getPage(0)).thenReturn(mockPage1);
|
||||
|
||||
|
||||
PDDocument doc1 = mock(PDDocument.class);
|
||||
when(pdfDocumentFactory.load(mockFile1)).thenReturn(doc1);
|
||||
when(doc1.getNumberOfPages()).thenReturn(3);
|
||||
@ -152,25 +152,25 @@ class MergeControllerTest {
|
||||
void testAddTableOfContents_WithIOException_HandlesGracefully() throws Exception {
|
||||
// Given
|
||||
MultipartFile[] files = {mockFile1, mockFile2};
|
||||
|
||||
|
||||
when(mockMergedDocument.getDocumentCatalog()).thenReturn(mockCatalog);
|
||||
when(mockMergedDocument.getNumberOfPages()).thenReturn(4);
|
||||
when(mockMergedDocument.getPage(anyInt())).thenReturn(mockPage1); // Use anyInt() to avoid stubbing conflicts
|
||||
|
||||
|
||||
// First document loads successfully
|
||||
PDDocument doc1 = mock(PDDocument.class);
|
||||
when(pdfDocumentFactory.load(mockFile1)).thenReturn(doc1);
|
||||
when(doc1.getNumberOfPages()).thenReturn(2);
|
||||
|
||||
|
||||
// Second document throws IOException
|
||||
when(pdfDocumentFactory.load(mockFile2)).thenThrow(new IOException("Failed to load document"));
|
||||
|
||||
// When
|
||||
Method addTableOfContentsMethod = MergeController.class.getDeclaredMethod("addTableOfContents", PDDocument.class, MultipartFile[].class);
|
||||
addTableOfContentsMethod.setAccessible(true);
|
||||
|
||||
|
||||
// Should not throw exception
|
||||
assertDoesNotThrow(() ->
|
||||
assertDoesNotThrow(() ->
|
||||
addTableOfContentsMethod.invoke(mergeController, mockMergedDocument, files)
|
||||
);
|
||||
|
||||
@ -186,11 +186,11 @@ class MergeControllerTest {
|
||||
// Given
|
||||
MockMultipartFile fileWithoutExtension = new MockMultipartFile("file", "document_no_ext", "application/pdf", "PDF content".getBytes());
|
||||
MultipartFile[] files = {fileWithoutExtension};
|
||||
|
||||
|
||||
when(mockMergedDocument.getDocumentCatalog()).thenReturn(mockCatalog);
|
||||
when(mockMergedDocument.getNumberOfPages()).thenReturn(1);
|
||||
when(mockMergedDocument.getPage(0)).thenReturn(mockPage1);
|
||||
|
||||
|
||||
PDDocument doc = mock(PDDocument.class);
|
||||
when(pdfDocumentFactory.load(fileWithoutExtension)).thenReturn(doc);
|
||||
when(doc.getNumberOfPages()).thenReturn(1);
|
||||
@ -209,10 +209,10 @@ class MergeControllerTest {
|
||||
void testAddTableOfContents_PageIndexExceedsDocumentPages_HandlesGracefully() throws Exception {
|
||||
// Given
|
||||
MultipartFile[] files = {mockFile1};
|
||||
|
||||
|
||||
when(mockMergedDocument.getDocumentCatalog()).thenReturn(mockCatalog);
|
||||
when(mockMergedDocument.getNumberOfPages()).thenReturn(0); // No pages in merged document
|
||||
|
||||
|
||||
PDDocument doc1 = mock(PDDocument.class);
|
||||
when(pdfDocumentFactory.load(mockFile1)).thenReturn(doc1);
|
||||
when(doc1.getNumberOfPages()).thenReturn(3);
|
||||
@ -220,9 +220,9 @@ class MergeControllerTest {
|
||||
// When
|
||||
Method addTableOfContentsMethod = MergeController.class.getDeclaredMethod("addTableOfContents", PDDocument.class, MultipartFile[].class);
|
||||
addTableOfContentsMethod.setAccessible(true);
|
||||
|
||||
|
||||
// Should not throw exception
|
||||
assertDoesNotThrow(() ->
|
||||
assertDoesNotThrow(() ->
|
||||
addTableOfContentsMethod.invoke(mergeController, mockMergedDocument, files)
|
||||
);
|
||||
|
||||
@ -238,12 +238,12 @@ class MergeControllerTest {
|
||||
PDDocument doc1 = mock(PDDocument.class);
|
||||
PDDocument doc2 = mock(PDDocument.class);
|
||||
List<PDDocument> documents = Arrays.asList(doc1, doc2);
|
||||
|
||||
|
||||
PDPageTree pages1 = mock(PDPageTree.class);
|
||||
PDPageTree pages2 = mock(PDPageTree.class);
|
||||
PDPage page1 = mock(PDPage.class);
|
||||
PDPage page2 = mock(PDPage.class);
|
||||
|
||||
|
||||
when(pdfDocumentFactory.createNewDocument()).thenReturn(mockMergedDocument);
|
||||
when(doc1.getPages()).thenReturn(pages1);
|
||||
when(doc2.getPages()).thenReturn(pages2);
|
||||
@ -264,7 +264,7 @@ class MergeControllerTest {
|
||||
void testMergeDocuments_EmptyList_ReturnsEmptyDocument() throws IOException {
|
||||
// Given
|
||||
List<PDDocument> documents = Arrays.asList();
|
||||
|
||||
|
||||
when(pdfDocumentFactory.createNewDocument()).thenReturn(mockMergedDocument);
|
||||
|
||||
// When
|
||||
@ -276,4 +276,4 @@ class MergeControllerTest {
|
||||
verify(mockMergedDocument, never()).addPage(any(PDPage.class));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user