);
- } else if (!this.disableAuth) {
- if (!this.state.authScheme.isAuthConfigured) return ;
- else {
- let admin_list = this.state.authScheme.admin_list.map(x => (x.email ? x.email.toLowerCase() : x.toLowerCase()));
- let access_list = this.state.authScheme.access_list
- ? this.state.authScheme.access_list.map(x => (x.email ? x.email.toLowerCase() : x.toLowerCase()))
- : [];
- const { email } = this.props.userInfo.loggedInAs;
+ } else {
+ Log.debug('Current auth scheme:', this.state.authScheme.type);
- if (
- (this.props.userInfo.logged &&
- (this.state.authScheme.type === 'ibmid' || this.state.authScheme.type === 'iam') &&
- !ActionsHelper.canViewOpTools(this.props.userInfo)) ||
- (this.props.userInfo.logged &&
- this.state.authScheme.type === 'appid' &&
- !(admin_list.includes(email.toLowerCase()) || access_list.includes(email.toLowerCase())))
- )
+ // if user is not logged in at all...
+ if (!this.props.userInfo || !this.props.userInfo.logged) {
+ // if using local username/password, send user to our login prompt
+ if (this.state.authScheme.type === 'couchdb') {
return (
- {
+ this.initializeAppData();
+ }}
/>
);
- }
- }
+ }
- Log.debug('Current auth scheme and user info:', this.state.authScheme.type, this.props.userInfo);
- if (this.state.authScheme.type === 'couchdb' && this.props.userInfo && !this.props.userInfo.logged) {
- return ;
- }
+ // if using sso, send user to sso's login prompt
+ else {
+ window.location.href = '/auth/login';
+ return (
+
+
{translate('redirecting_login')}
+
+ );
+ }
+ }
- if (this.state.authScheme.type === 'couchdb' && this.props.userInfo && this.props.userInfo.logged && this.props.userInfo.password_type === 'default') {
- return ;
- }
+ // if user is logged in
+ else {
+ // if user is logged in but has no access
+ if (!ActionsHelper.canViewOpTools(this.props.userInfo)) {
+ return (
+
+ );
+ }
- if (this.props.userInfo && !this.props.userInfo.logged && !this.disableAuth) {
- window.location.href = `${this.state.authScheme.host_url}/auth/login`;
- }
+ // if user is logged in but is using the default password, send user to change pass prompt
+ if (this.state.authScheme.type === 'couchdb' && this.props.userInfo && this.props.userInfo.logged && this.props.userInfo.password_type === 'default') {
+ return ;
+ }
- if ((this.props && this.props.userInfo && this.props.userInfo.logged) || this.disableAuth) {
- Log.info('Starting application!');
- this.setupRemoteLogging(); // setup the remote logging after the user has logged in to avoid hitting api lockout
- return ;
- } else {
- return (
-
-
{translate('redirecting_login')}
-
- );
+ // if user is logged in and can view the app, render the the app
+ Log.info('Starting application!');
+ this.setupRemoteLogging(); // setup the remote logging after the user has logged in to avoid hitting api lockout
+ return ;
+ }
}
}
}
@@ -407,7 +353,7 @@ class App extends Component {
const dataProps = {
updateState: PropTypes.func,
userInfo: PropTypes.object,
- translate: PropTypes.func, // Provided by withLocalize
+ t: PropTypes.func, // Provided by withTranslation()
};
App.propTypes = {
@@ -415,15 +361,15 @@ App.propTypes = {
};
export default connect(
- state => {
+ (state) => {
let newProps = Helper.mapStateToProps(state[SCOPE], dataProps);
newProps['userInfo'] = state['userInfo'] ? state['userInfo'] : null;
return newProps;
},
- dispatch => {
+ (dispatch) => {
return {
dispatch,
...bindActionCreators({ updateState }, dispatch),
};
}
-)(withLocalize(App));
+)(withTranslation()(App));
diff --git a/packages/apollo/src/App.test.js b/packages/apollo/src/App.test.js
index 656b5b49..bc70a171 100644
--- a/packages/apollo/src/App.test.js
+++ b/packages/apollo/src/App.test.js
@@ -14,11 +14,11 @@
* limitations under the License.
*/
import React from 'react';
-import ReactDOM from 'react-dom';
+import { createRoot } from 'react-dom/client';
import App from './App';
it('renders without crashing', () => {
- const div = document.createElement('div');
- ReactDOM.render(, div);
- ReactDOM.unmountComponentAtNode(div);
+ const root = createRoot(document.getElementById('root'));
+ root.render();
+ root.unmountComponentAtNode(document.getElementById('root'));
});
diff --git a/packages/apollo/src/app.scss b/packages/apollo/src/app.scss
index 77260872..76a1e238 100644
--- a/packages/apollo/src/app.scss
+++ b/packages/apollo/src/app.scss
@@ -1,136 +1,139 @@
-// Manifest file!
-@import './assets/sass/imports.scss';
+// // Manifest file!
+// @import './assets/sass/imports.scss';
-// Component imports
-@import './components/AddAnchorPeerModal/addAnchorPeerModal';
-@import './components/AddIdentityModal/addIdentityModal';
-@import './components/AddUserModal/addUserModal';
-@import './components/AuthDetails/authDetails';
-@import './components/AuthSetup/authSetup';
-@import './components/AuthSetupAddUsers/authSetupAddUsers';
-@import './components/AuthSetupAuthentication/authSetupAuthentication';
-@import './components/AuthSetupSuccess/authSetupSuccess';
-@import './components/BlockchainTooltip/blockchainTooltip';
-@import './components/Breadcrumb/breadcrumb';
-@import './components/CAAddUserModal/caAddUser';
-@import './components/CADetails/caDetails';
-@import './components/CAModal/caModal';
-@import './components/CertificateAuthority/certificateAuthority';
-@import './components/CertificateList/certificateList';
-@import './components/Chaincodes/chaincodes';
-@import './components/ChaincodeModal/chaincodeModal';
-@import './components/ChaincodesPage/chaincodesPage';
-@import './components/ChangePasswordModal/changePasswordModal';
-@import './components/ChannelACLs/channelAcls';
-@import './components/ChannelAnchorPeers/channelAnchorPeers';
-@import './components/ChannelBlock/channelBlock';
-@import './components/ChannelChaincode/channelChaincode';
-@import './components/ChannelConsenterModal/channelConsenterModal';
-@import './components/ChannelDetails/channelDetails';
-@import './components/ChannelMembers/channelMembers';
-@import './components/ChannelOrdererUrl/channelOrdererUrl';
-@import './components/Channels/channels';
-@import './components/ChannelModal/channelModal';
-@import './components/ChannelModal/Wizard/Prerequisites/prerequisites';
-@import './components/ChannelModal/Wizard/Review/review';
-@import './components/ChannelModal/Wizard/BlockCuttingParams/blockCuttingParams';
-@import './components/ComplexityScale/complexityScale';
-@import './components/ConfigOverride/configOverride';
-@import './components/DeleteCAUser/deleteCAUser';
-@import './components/ConnectionProfileModal/connectionProfileModal';
-@import './components/GettingStartedModal/gettingStartedModal';
-@import './components/GettingStartedModal/ecosystemDiagram';
-@import './components/Dropzone/dropzone';
-@import './components/EditAuthSettingsModal/editAuthSettingsModal';
-@import './components/EmailChips/emailChips';
-@import './components/ExportModal/exportModal';
-@import './components/FileUploader/fileUploader';
-@import './components/Form/form';
-@import './components/GenerateCertificate/generateCertificate';
-@import './components/GenerateMSPModal/generateMSPModal';
-@import './components/GenericChips/genericChips';
-@import './components/HiddenText/hiddenText';
-@import './components/HSMConfig/hsmConfig';
-@import './components/Identities/identities';
-@import './components/IdentityExpiration/identityExpiration';
-@import './components/IdentityModal/identityModal';
-@import './components/ImportantBox/importantBox';
-@import './components/ImportCAModal/importCAModal';
-@import './components/ImportModal/importModal';
-@import './components/ImportMspModal/importMspModal';
-@import './components/ImportOrdererModal/importOrdererModal';
-@import './components/ImportPeerModal/importPeerModal';
-@import './components//InstallChaincodeModal/installChaincodeModal';
-@import './components/InstallChaincodeModal/installChaincodeModal';
-@import './components/InstantiateChaincodeModal/instantiateChaincodeModal';
-@import './components/InstantiatedChaincodes/instantiatedChaincodes';
-@import './components/ItemContainer/itemContainer';
-@import './components/ItemContainerTile/itemContainerTile';
-@import './components/ItemContainerTile/ItemTileLabels/itemTileLabels';
-@import './components/ItemMenu/itemMenu';
-@import './components/JoinChannelModal/joinChannelModal';
-@import './components/JoinOSNChannelModal/joinOSNChannelModal';
-@import './components/JsonInput/jsonInput';
-@import './components/LeftNav/leftNav';
-@import './components/LeftNavItem/leftNavItem';
-@import './components/LoadingWithContent/loadingWithContent';
-@import './components/LogSettings/logSettings';
-@import './components/Login/login';
-@import './components/Main/main';
-@import './components/MigrationPage/migrationPage';
-@import './components/Members/members';
-@import './components/MSPDefinitionModal/mSPDefinitionModal';
-@import './components/MspDeleteModal/mspDeleteModal';
-@import './components/MspDetailsModal/mspDetailsModal';
-@import './components/Msps/msps';
-@import './components/Mustgather/mustgather';
-@import './components/NodeDetails/nodeDetails';
-@import './components/Nodes/nodes';
-@import './components/NotFound/notFound';
-@import './components/Notifications/notifications';
-@import './components/OrdererAdmins/ordererAdmins';
-@import './components/OrdererConsenterModal/ordererConsenterModal';
-@import './components/OrdererDetails/ordererDetails';
-@import './components/OrdererMembers/ordererMembers';
-@import './components/OrdererModal/ordererModal';
-@import './components/Orderers/orderers';
-@import './components/OrganizationDetails/organizationDetails';
-@import './components/PageContainer/pageContainer';
-@import './components/PageHeader/pageHeader';
-@import './components/PeerChaincode/peerChaincode';
-@import './components/PeerDetails/peerDetails';
-@import './components/PeerModal/peerModal';
-@import './components/Peers/peers';
-@import './components/ProposeChaincodeModal/proposeChaincodeModal';
-@import './components/ReallocateModal/reallocateModal';
-@import './components/ReleaseNotes/releaseNotes';
-@import './components/RequestAccess/requestAccess';
-@import './components/ResetPasswordModal/resetPasswordModal';
-@import './components/Settings/settings';
-@import './components/SidePanel/sidePanel';
-@import './components/SidePanelError/sidePanelError';
-@import './components/SidePanelInlineConfirmation/sidePanelInlineConfirmation';
-@import './components/SidePanelWarning/sidePanelWarning';
-@import './components/SignatureAuditLogModal/signatureAuditLogModal';
-@import './components/SignatureCollection/signatureCollection';
-@import './components/SignatureDetailModal/signatureDetailModal';
-@import './components/SignatureNotification/signatureNotification';
-@import './components/Stepper/stepper';
-@import './components/StickySection/stickySection';
-@import './components/SubNavItem/subNavItem';
-@import './components/Support/support';
-@import './components/Timeline/timeline';
-@import './components/TimelineCancelButton/timelineCancelButton';
-@import './components/TitleBar/titleBar';
-@import './components/TransactionModal/transactionModal';
-@import './components/TranslateLink/translateLink';
-@import './components/UpdateChannelMspModal/updateChannelMspModal';
-@import './components/UsageForm/usageForm';
-@import './components/UserDetailsModal/userDetailsModal';
-@import './components/UserInfo/userInfo';
-@import './components/UserProfile/userProfile';
-@import './components/VisibilityToggle/visibilityToggle';
-@import './components/WelcomeBanner/welcomeBanner';
-@import './components/WelcomeBanner/welcomeBannerTile';
-@import './components/WelcomeMessage/welcomeMessage';
-@import './components/Wizard/wizard';
+// // Component imports
+// @import './components/AddAnchorPeerModal/addAnchorPeerModal';
+// @import './components/AddIdentityModal/addIdentityModal';
+// @import './components/AddUserModal/addUserModal';
+// @import './components/AuthDetails/authDetails';
+// @import './components/AuthSetup/authSetup';
+// @import './components/AuthSetupAddUsers/authSetupAddUsers';
+// @import './components/AuthSetupAuthentication/authSetupAuthentication';
+// @import './components/AuthSetupSuccess/authSetupSuccess';
+// @import './components/BlockchainTooltip/blockchainTooltip';
+// @import './components/Breadcrumb/breadcrumb';
+// @import './components/CAAddUserModal/caAddUser';
+// @import './components/CADetails/caDetails';
+// @import './components/CAModal/caModal';
+// @import './components/CertificateAuthority/certificateAuthority';
+// @import './components/CertificateList/certificateList';
+// @import './components/Chaincodes/chaincodes';
+// @import './components/ChaincodeModal/chaincodeModal';
+// @import './components/ChaincodesPage/chaincodesPage';
+// @import './components/ChangePasswordModal/changePasswordModal';
+// @import './components/ChannelACLs/channelAcls';
+// @import './components/ChannelAnchorPeers/channelAnchorPeers';
+// @import './components/ChannelBlock/channelBlock';
+// @import './components/ChannelChaincode/channelChaincode';
+// @import './components/ChannelConsenterModal/channelConsenterModal';
+// @import './components/ChannelDetails/channelDetails';
+// @import './components/ChannelMembers/channelMembers';
+// @import './components/ChannelOrdererUrl/channelOrdererUrl';
+// @import './components/Channels/channels';
+// @import './components/ChannelModal/channelModal';
+// @import './components/ChannelModal/Wizard/Prerequisites/prerequisites';
+// @import './components/ChannelModal/Wizard/Review/review';
+// @import './components/ChannelModal/Wizard/BlockCuttingParams/blockCuttingParams';
+// @import './components/ComplexityScale/complexityScale';
+// @import './components/ConfigOverride/configOverride';
+// @import './components/DeleteCAUser/deleteCAUser';
+// @import './components/ConnectionProfileModal/connectionProfileModal';
+// @import './components/GettingStartedModal/gettingStartedModal';
+// @import './components/GettingStartedModal/ecosystemDiagram';
+// @import './components/Dropzone/dropzone';
+// @import './components/EditAuthSettingsModal/editAuthSettingsModal';
+// @import './components/EditAuthSchemePanel/editAuthSchemePanel';
+// @import './components/EmailChips/emailChips';
+// @import './components/ExportModal/exportModal';
+// @import './components/FileUploader/fileUploader';
+// @import './components/Form/form';
+// @import './components/GenerateCertificate/generateCertificate';
+// @import './components/GenerateMSPModal/generateMSPModal';
+// @import './components/GenericChips/genericChips';
+// @import './components/HiddenText/hiddenText';
+// @import './components/HSMConfig/hsmConfig';
+// @import './components/Identities/identities';
+// @import './components/IdentityExpiration/identityExpiration';
+// @import './components/IdentityModal/identityModal';
+// @import './components/ImportantBox/importantBox';
+// @import './components/ImportCAModal/importCAModal';
+// @import './components/ImportModal/importModal';
+// @import './components/ImportMspModal/importMspModal';
+// @import './components/ImportOrdererModal/importOrdererModal';
+// @import './components/ImportPeerModal/importPeerModal';
+// @import './components//InstallChaincodeModal/installChaincodeModal';
+// @import './components/InstallChaincodeModal/installChaincodeModal';
+// @import './components/InstantiateChaincodeModal/instantiateChaincodeModal';
+// @import './components/InstantiatedChaincodes/instantiatedChaincodes';
+// @import './components/ItemContainer/itemContainer';
+// @import './components/ItemContainerTile/itemContainerTile';
+// @import './components/ItemContainerTile/ItemTileLabels/itemTileLabels';
+// @import './components/ItemMenu/itemMenu';
+// @import './components/JoinChannelModal/joinChannelModal';
+// @import './components/JoinOSNChannelModal/joinOSNChannelModal';
+// @import './components/JsonInput/jsonInput';
+// @import './components/LeftNav/leftNav';
+// @import './components/LeftNavItem/leftNavItem';
+// @import './components/LoadingWithContent/loadingWithContent';
+// @import './components/LogSettings/logSettings';
+// @import './components/Login/login';
+// @import './components/Main/main';
+// @import './components/MigrationPage/migrationPage';
+// @import './components/AuditLogs/auditLogs';
+// @import './components/Access/access';
+// @import './components/MSPDefinitionModal/mSPDefinitionModal';
+// @import './components/MspDeleteModal/mspDeleteModal';
+// @import './components/MspDetailsModal/mspDetailsModal';
+// @import './components/Msps/msps';
+// @import './components/Mustgather/mustgather';
+// @import './components/NodeDetails/nodeDetails';
+// @import './components/Nodes/nodes';
+// @import './components/NotFound/notFound';
+// @import './components/Notifications/notifications';
+// @import './components/OrdererAdmins/ordererAdmins';
+// @import './components/OrdererConsenterModal/ordererConsenterModal';
+// @import './components/OrdererDetails/ordererDetails';
+// @import './components/OrdererMembers/ordererMembers';
+// @import './components/OrdererModal/ordererModal';
+// @import './components/Orderers/orderers';
+// @import './components/OrganizationDetails/organizationDetails';
+// @import './components/PageContainer/pageContainer';
+// @import './components/PageHeader/pageHeader';
+// @import './components/PeerChaincode/peerChaincode';
+// @import './components/PeerDetails/peerDetails';
+// @import './components/PeerModal/peerModal';
+// @import './components/Peers/peers';
+// @import './components/ProposeChaincodeModal/proposeChaincodeModal';
+// @import './components/ReallocateModal/reallocateModal';
+// @import './components/ReleaseNotes/releaseNotes';
+// @import './components/RequestAccess/requestAccess';
+// @import './components/ResetPasswordModal/resetPasswordModal';
+// @import './components/Settings/settings';
+// @import './components/SidePanel/sidePanel';
+// @import './components/SidePanelError/sidePanelError';
+// @import './components/SidePanelInlineConfirmation/sidePanelInlineConfirmation';
+// @import './components/SidePanelWarning/sidePanelWarning';
+// @import './components/SignatureAuditLogModal/signatureAuditLogModal';
+// @import './components/SignatureCollection/signatureCollection';
+// @import './components/SignatureDetailModal/signatureDetailModal';
+// @import './components/SignatureNotification/signatureNotification';
+// @import './components/Stepper/stepper';
+// @import './components/StickySection/stickySection';
+// @import './components/SubNavItem/subNavItem';
+// @import './components/Support/support';
+// @import './components/Timeline/timeline';
+// @import './components/TimelineCancelButton/timelineCancelButton';
+// @import './components/TitleBar/titleBar';
+// @import './components/TransactionModal/transactionModal';
+// @import './components/TranslateLink/translateLink';
+// @import './components/UpdateChannelMspModal/updateChannelMspModal';
+// @import './components/UsageForm/usageForm';
+// @import './components/UserDetailsModal/userDetailsModal';
+// @import './components/UserInfo/userInfo';
+// @import './components/UserProfile/userProfile';
+// @import './components/VisibilityToggle/visibilityToggle';
+// @import './components/WelcomeBanner/welcomeBanner';
+// @import './components/WelcomeBanner/welcomeBannerTile';
+// @import './components/WelcomeMessage/welcomeMessage';
+// @import './components/Wizard/wizard';
+// @import './components/DeleteAccessModal/deleteAccessModal';
diff --git a/packages/apollo/src/assets/i18n/en/messages.json b/packages/apollo/src/assets/i18n/en/messages.json
index 5ca89b3b..f7355b79 100644
--- a/packages/apollo/src/assets/i18n/en/messages.json
+++ b/packages/apollo/src/assets/i18n/en/messages.json
@@ -25,11 +25,12 @@
"ready": "Ready",
"containersready": "Containers ready",
"podscheduled": "Pod scheduled",
+ "readOnlyTxt": "read only",
"stopped": "Stopped",
"unknown": "Status unknown",
"status_undetected": "Status undetectable",
"items": "Items",
- "page_number": "Page number, of ${n} pages",
+ "page_number": "Page number, of {{n}} pages",
"prev_pg": "Previous page",
"next_pg": "Next page",
"channels": "Channels",
@@ -37,18 +38,18 @@
"version": "Version",
"install_chaincode": "Install smart contract",
"instantiate_not_allowed_20": "Instantiating a legacy smart contract is not allowed on a channel with application capability 2.x. Go to the \"Channels\" page to use the 2.0 Lifecycle",
- "peer_details_title": "${peerName}",
- "orderer_details_title": "${ordererName}",
- "ca_details_title": "${caName}",
+ "peer_details_title": "{{peerName}}",
+ "orderer_details_title": "{{ordererName}}",
+ "ca_details_title": "{{caName}}",
"storage": "Storage",
"last_transaction": "Last transaction",
"start_peer": "Start peer",
"stop_peer": "Stop peer",
- "used_of_total": "${used} of ${total}",
+ "used_of_total": "{{used}} of {{total}}",
"open_cc_profile": "Open connection profile",
"id": "ID",
"created": "Created",
- "created_on": "Created ${date}",
+ "created_on": "Created {{date}}",
"system_channel": "System Channel",
"unjoin_channel_title": "Unjoin orderer from channel",
"join_osn_title": "Join another orderer to channel",
@@ -100,8 +101,45 @@
"upload_ca_config": "Upload Certificate Authority Configuration",
"upload_ca_config_info": "only JSON files",
"welcome_to_optools": "Welcome to the Fabric Operations Console Setup",
- "client_id": "Client ID",
- "client_id_placeholder": "Enter Client ID here",
+ "authorization_url_label": "Authorization URL",
+ "authorization_url_placeholder": "Authorization URL here",
+ "authorization_url_tooltip": "The authorization url is where the console will redirect a user for login",
+ "token_url_label": "Token URL",
+ "token_url_placeholder": "Token URL here",
+ "token_url_tooltip": "The token url is used by the console to exchange authorization codes for authorization tokens",
+ "client_id_label": "Client ID",
+ "client_id_placeholder": "Enter client ID here",
+ "client_id_tooltip": "The client id helps authorize the console with the OAuth service",
+ "client_secret_label": "Client secret",
+ "client_secret_placeholder": "Enter client secret here",
+ "client_secret_tooltip": "The client secret helps authorize the console with the OAuth service",
+ "scope_label": "Scope",
+ "scope_placeholder": "Enter scope here",
+ "scope_tooltip": "The scope defines what is returned during the OAuth2.0 communication. It is highly recommended to use a value of 'openid email profile'.",
+ "grant_label": "Grant",
+ "grant_tooltip": "The only supported grant is \"authorization_code\".",
+ "response_type_label": "Response type",
+ "response_type_tooltip": "The only supported response type is \"code\".",
+ "msp_admin_type_tooltip": "These are identities in your wallet that are also admins on this channel",
+ "msp_admin_type_label": "Known channel admins",
+ "debug_label": "User login debug logs",
+ "debug_logs_tooltip": "Extra console server logs during user login can help debug OAuth2.0 setup issues, but for maximum user privacy this setting should be off once login problems are resolved.",
+ "default_password_placeholder": "Enter a password here",
+ "default_password_tooltip": "Share this password with each new user so that they can login to the console. They will be required to change it the first time they log in.",
+ "default_password_label": "Default password for new users",
+ "confirm_default_password_label": "Confirm default password for new users",
+ "allow_default_keep_label": "Allow users to keep the default password",
+ "allow_default_keep_tooltip": "Allowing users to keep using the default password is helpful when you are setting up and tearing down test environments. It is not recommended for any other purpose.",
+ "oauth_desc_txt": "The OAuth2.0 authentication method requires an external OAuth2 service. Users can be managed (such as adding & removing) by contacting your administrator of the OAuth2 service. User roles (permissions) can be managed by using the \"Access\" tab of your console and the \"Users\" table.",
+ "couchdb_desc_txt": "The CouchDB authentication method will securely store usernames and passwords in the console's CouchDB database. Users can be managed (such as adding & removing) by using the \"Access\" tab of your console and the \"Users\" table.",
+ "oauth_warning_txt": "This authentication method requires the following settings. These settings can normally be obtained from a dashboard specific to your OAuth2.0 service. For more help [[see the docs]](https://github.com/hyperledger-labs/fabric-operations-console/blob/main/packages/athena/docs/_oauth.md).",
+ "couchdb_warning_txt": "This authentication method requires the following settings.",
+ "callback_warning_title": "Register the callback URL",
+ "callback_warning_desc": "It is typical for OAuth services to require registration of callback URLs. If this applies to your service you will need to register the callback url below. Contact your OAuth administrator for assistance.\n\n Callback URL: {{CALLBACK}}",
+ "oauth_warning_title": "Supported services",
+ "oauth_warning_desc": "The console only supports OAuth2.0 using a grant of \"authorization_code\" and a response type of \"code\". OAuth services that do not allow this configuration will not work. Contact your OAuth administrator for assistance.",
+ "oauth_user_warning_title": "Check username!",
+ "oauth_user_warning_desc": "[Important] When you login with your OAuth2.0 service the console will use the email address that is associated with your oauth service login, as the username. Therefore make sure that this username (email) is already listed in the \"Users\" table AND that it has the \"Manager\" role.",
"oauth_server_url": "OAuth Server URL",
"oauth_server_url_placeholder": "Enter OAuth Server URL here",
"secret": "Secret",
@@ -112,6 +150,8 @@
"non_admin_user_list": "List of Non-Admin Users who can access the application",
"members": "Members",
"users": "Users",
+ "access": "Access",
+ "access_title": "Access",
"user_info": "User information",
"add_member": "Add member",
"add_user": "Add user",
@@ -141,11 +181,11 @@
"max_enrollments": "Maximum enrollments",
"max_enrollments_placeholder": "Optional",
"rest_api_error_not_completed_title": "Request could not be completed",
- "rest_api_error_not_completed_details": "The ${method} request to ${url} could not be completed. Try again.",
+ "rest_api_error_not_completed_details": "The {{method}} request to {{url}} could not be completed. Try again.",
"rest_api_error_invalid_response_title": "Request succeeded with invalid response",
- "rest_api_error_invalid_response_details": "The ${method} request to ${url} completed successfully, but the response from the server could not be understood.",
+ "rest_api_error_invalid_response_details": "The {{method}} request to {{url}} completed successfully, but the response from the server could not be understood.",
"rest_api_error_error_in_response_title": "Request failed",
- "rest_api_error_error_in_response_details": "The ${method} request to ${url} failed.",
+ "rest_api_error_error_in_response_details": "The {{method}} request to {{url}} failed.",
"client": "Client",
"peer": "Peer",
"no_json_file": "Don't have a JSON file?",
@@ -167,14 +207,14 @@
"ca_name_placeholder": "Enter the Certificate Authority name",
"peer_display_name_placeholder": "Enter the Peer name",
"ca_url_placeholder": "For ex, https://example.blockchain.ibm.com:7051/",
- "error_peer_not_found": "The peer '${peerId}' was not found.",
- "error_orderer_not_found": "The ordering service '${ordererId}' was not found.",
- "error_ca_not_found": "The Certificate Authority '${caId}' was not found.",
- "error_peer_channels": "Unable to retrieve channel information from ${peerName}.",
+ "error_peer_not_found": "The peer '{{peerId}}' was not found.",
+ "error_orderer_not_found": "The ordering service '{{ordererId}}' was not found.",
+ "error_ca_not_found": "The Certificate Authority '{{caId}}' was not found.",
+ "error_peer_channels": "Unable to retrieve channel information from {{peerName}}.",
"error_peer_channels_access": "Invalid certificate.",
"error_peers": "Unable to retrieve the list of peers.",
"error_chaincode": "Unable to retrieve the smart contracts.",
- "error_chaincode2": "The identity associated with selected certificate is not an admin cert on peer ${peerName}. Associate an identity with ${peerName} that has admin privileges",
+ "error_chaincode2": "The identity associated with selected certificate is not an admin cert on peer {{peerName}}. Associate an identity with {{peerName}} that has admin privileges",
"error_cas": "Unable to retrieve the list of Certificate Authorities.",
"error_orderers": "Unable to retrieve the list of ordering services.",
"error_ca_users": "Unable to retrieve the list of users.",
@@ -183,7 +223,7 @@
"empty_ca_message": "Get started by creating or importing a CA.",
"empty_orderer_message": "Get started by creating or importing an ordering service.",
"empty_peer_message": "Get started by creating or importing a peer.",
- "empty_peer_channels_message": "It looks like your peer has not joined any channels yet. Click Join channel to add your peer to an existing channel.",
+ "empty_peer_channels_message": "It looks like your peer has not joined any channels yet. \nClick Join channel to add your peer to an existing channel.",
"empty_msp_message": "No MSPs added.",
"join_requires_orderer": "An ordering service is required to join a channel.",
"join_requires_peer": "A peer is required to join a channel",
@@ -194,9 +234,9 @@
"channel_placeholder": "Enter the channel name",
"editing_auth_message": "Edit your Auth settings",
"copy_json_placeholder": "Paste the JSON information from your App ID service here.",
- "error_join_failed": "${peerName} could not join the channel.",
- "error_join_failed1": "${peerName} could not join the channel. The selected certificate is not a peer admin certificate.",
- "error_join_failed_no_response": "${peerName} did not respond to the join channel request.",
+ "error_join_failed": "{{peerName}} could not join the channel.",
+ "error_join_failed1": "{{peerName}} could not join the channel. The selected certificate is not a peer admin certificate.",
+ "error_join_failed_no_response": "{{peerName}} did not respond to the join channel request.",
"error_generate_cert": "The certificate could not be generated.",
"error_ca_add_user": "The user could not be added.",
"error_import_orderer": "The ordering service could not be imported.",
@@ -218,9 +258,10 @@
"error_channel_details_not_found": "Channel details not found",
"no_acl_for_channel": "No access control list found for this channel.",
"no_anchor_for_channel": "No anchor peers found for this channel.",
- "not_authorized": "You are not authorized to access this tooling.",
- "request_access": "Request Access",
- "request_access_details": "You do not have access. Please have the administrator add you.",
+ "request_access_header": "403 - Request access",
+ "request_access_button": "Request access",
+ "request_access_details": "You do not have access to this application.",
+ "request_pending_txt": "Your request is pending. Contact a console user with the \"Manager\" role to approve your request.",
"identities": "Identities",
"templates": "Templates",
"template_str": "Template",
@@ -237,7 +278,7 @@
"remove_certificate": "Remove certificate",
"remove_private_key": "Remove private key",
"error_remove_identity": "Unable to remove identity",
- "error_required_field": "Required field (${field}) missing.",
+ "error_required_field": "Required field ({{field}}) missing.",
"error_certificate": "Certificate format is not valid.",
"error_private_key": "Private key format is not valid.",
"error_email": "Email format is not valid.",
@@ -253,7 +294,7 @@
"system_channel_error": "Unable to get system channel. If you associated an identity without administrative privilege on the ordering service node, you will not be able to view or manage ordering service details",
"add_node_error": "Unable to add node to ordering service.",
"add_node_system_channel_access_denied": "Unable to update system channel. Ensure that the current MSP is added as an ordering service administrator on the ordering service and the correct certificates are used.",
- "channel_forbidden": "Unable to get channel information from ${nodeName}. The associated identity does not have administrative privilege. Ensure that the associated identity has administrative privilege.",
+ "channel_forbidden": "Unable to get channel information from {{nodeName}}. The associated identity does not have administrative privilege. Ensure that the associated identity has administrative privilege.",
"orderer_tls_error": "Unable to get TLS certificates from orderer",
"error_block_decode": "Unable to decode channel.",
"error_block_encode": "Unable to encode channel.",
@@ -265,7 +306,7 @@
"orderer_admin_identity": "Orderer administrator identity",
"peer_admin_identity": "Peer administrator identity",
"select_wallet_identity": "Please select an identity from your wallet",
- "step_n_of_x": "Step ${step} of ${total}",
+ "step_n_of_x": "Step {{step}} of {{total}}",
"select_peer_type": "Select to create or import a peer.",
"select_ca_type": "Select to create or import a Certificate Authority.",
"choose_peer_location": "Choose your peer location",
@@ -274,6 +315,9 @@
"aws": "Amazon Web Services",
"openshift": "Red Hat OpenShift",
"ibmcloud": "IBM Cloud",
+ "k8s": "IBM Cloud",
+ "saas": "IBM Cloud",
+ "ibm_saas": "IBM Cloud",
"kubernetes": "Kubernetes",
"azure": "Microsoft Azure",
"next": "Next",
@@ -287,6 +331,8 @@
"tooltip_peer_name": "Enter a peer name. This field is only used to identify the peer in this console.",
"tooltip_msp_id": "This is the organization MSP ID that was specified when the peer was deployed. Get this value from the peer administrator.",
"tooltip_proxy_url": "The gRPC web proxy URL for the peer.",
+ "only_manager_title": "You are the only Manager",
+ "only_manager_desc": "As You are the only Manager for this console, you are not allowed to modify your roles",
"edit_tooltip_peer_name": "Modify the name you want to use to refer to this peer in this console.",
"edit_tooltip_msp_id": "Modify the organization MSP ID. This value was specified when the peer was deployed.",
"edit_tooltip_proxy_url": "The gRPC web proxy URL for the peer.",
@@ -305,15 +351,13 @@
"enter_json": "Or paste in your JSON information",
"add_users": "Add Users",
"add_users_desc": "The administrator will be the first user and will have the roles of Manager, Writer and Reader. All new access requests are sent to the administrator.",
- "admin_users_placeholder": "Admin Users: Users who can access the application as admin. Enter emails separated by comma or space.",
- "general_users_placeholder": "General Users: Users who have general access to the application. Enter emails separated by commas or spaces.",
"admin_contact_email": "Contact email",
"admin_contact_email_placeholder": "Email that will contacted when users need to request access",
"success": "Success",
- "copy_text": "Copy \"${copyText}\"",
+ "copy_text": "Copy \"{{copyText}}\"",
"auth_setup_success_1": "Thank you for submitting your configuration form.",
"auth_setup_success_3": "Setup is complete, you may proceed to login to the application.",
- "auth_setup_success_4": "${adminContactEmail} user can add additional users. This user will be contacted if a new user would like to be added to the tooling.",
+ "auth_setup_success_4": "{{adminContactEmail}} user can add additional users. This user will be contacted if a new user would like to be added to the tooling.",
"proceed_to_login": "Proceed to Login",
"error_auth_setup": "An error occurred while setting up the authentication.",
"error_auth_config_json": "The JSON is not in proper format.",
@@ -328,22 +372,22 @@
"empty_installed_message": "No installed smart contracts",
"instantiated_chaincode": "Instantiated smart contracts",
"instantiated_chaincode_legacy": "Instantiated smart contracts - Fabric v1.4 (legacy)",
- "peer_created": "Peer created ${createdDate}",
+ "peer_created": "Peer created {{createdDate}}",
"contract_name": "Contract name",
- "error_getting_chaincodes": "An error occurred while getting smart contracts for ${peerName}.",
- "error_getting_v2_chaincodes": "An error occurred while getting v2 smart contracts for ${peerName}.",
- "error_getting_chaincodes1": "An error occurred while getting smart contracts. The certificate is not an admin cert on the peer for ${peerName}.",
+ "error_getting_chaincodes": "An error occurred while getting smart contracts for {{peerName}}.",
+ "error_getting_v2_chaincodes": "An error occurred while getting v2 smart contracts for {{peerName}}.",
+ "error_getting_chaincodes1": "An error occurred while getting smart contracts. The certificate is not an admin cert on the peer for {{peerName}}.",
"install_chaincode_desc": "Until a peer installs a smart contract, it will not be able to access or update data on the ledger. Note that to create data created using a smart contract, the peer must have that smart contract installed on it.",
"install": "Install",
- "step_x_of_x": "Step ${currentStep} of ${totalSteps}",
+ "step_x_of_x": "Step {{currentStep}} of {{totalSteps}}",
"find_more_here": "Find out more here",
"upload_package": "Upload package",
- "only_cds_packages": "Package file must be in .cds format. ${cc_limit} MB max file size. If you want to install a .tgz file for Fabric 2.x lifecycle, you can do so from either the peer or channel details page.",
- "only_cds_or_tgz_packages": "Package file must be in .cds, .tar.gz, or .tgz format. ${cc_limit} MB max file size",
+ "only_cds_packages": "Package file must be in .cds format. {{cc_limit}} MB max file size. If you want to install a .tgz file for Fabric v2.x lifecycle, you can do so from either the peer or channel details page.",
+ "only_cds_or_tgz_packages": "Package file must be in .cds, .tar.gz, or .tgz format. {{cc_limit}} MB max file size",
"only_json": "File must be in JSON format",
"error_install_peer": "An error occurred when installing smart contract on peer.",
"select_peers": "Select peers",
- "install_chaincode_successful": "${name} ${version} has been successfully installed.",
+ "install_chaincode_successful": "{{name}} {{version}} has been successfully installed.",
"block": "Block",
"blocks": "Blocks",
"node": "Node",
@@ -366,24 +410,25 @@
"import_orderer_associate": "Associate identity",
"import_ca_associate": "Associate identity",
"available_channels": "Available channels",
- "error_already_joined": "${peerName} is already part of the channel.",
+ "error_already_joined": "{{peerName}} is already part of the channel.",
"attributes": "Attributes",
"attributes_tooltip": "(Advanced option) Attributes can be used to create role-based access control over resources. For example, an attribute of NOTARY PUBLIC paired with a value of TRUE could be referenced in a policy or Access Control List mandating that only a user with the attribute NOTARY PUBLIC=TRUE can perform a particular task.",
"attribute_name_placeholder": "Enter attribute name",
"attribute_value_placeholder": "Enter attribute value",
"add": "Add",
- "authentication_services": "Authentication services",
- "app_id": "App ID",
- "ibm_cloud_service": "IBM Cloud Service",
- "configure": "Update configuration",
- "authenticated_users": "Authenticated users",
+ "authentication_services": "User authentication method",
+ "access_gear_title": "Change auth settings",
+ "auth_scheme_label": " Authentication method",
+ "user_table_header": "Users",
+ "apikey_table_header": "API keys",
+ "no_api_keys_msg": "There are no API keys yet",
"registered_users": "Registered users",
"email_address": "Email address",
- "user_id": "User ID",
"user_account": "User account",
"role": "Role",
"date_added": "Date added",
"add_new_users": "Add new users",
+ "edit_user_header": "Edit user role",
"save": "Save",
"save_changes": "Save changes",
"save_settings_success": "Changes are being saved",
@@ -391,7 +436,9 @@
"authentication_settings": "Authentication Settings",
"edit_authentication_settings_desc": "Use this panel to update the contact email address for requests to access this console.",
"couch_edit_authentication_settings_desc": "Use this panel to update the contact email address for requests to access this console or the default password that is assigned to all new users.",
+ "edit_auth_scheme_desc": "Select how the console should authenticate users (this controls how and which users can login to the console).",
"error_auth_settings_edit": "An error occurred while updating the authentication settings.",
+ "error_console_settings_edit": "An error occurred while updating the console settings.",
"add_new_users_desc": "General users have access to the tooling, while admin users have the ability to add and remove other admin and general users to the tooling.",
"user_type": "User type",
"user_type_tooltip": "Admin users have the ability to add users to this console. General users do not. Both have the same rights to operate the console.",
@@ -406,37 +453,42 @@
"join_osn_channel_title": "Join orderers to an active channel",
"join_osn_desc": "To join an orderer to a channel we will need to use another orderer that has already joined.",
"select_osn": "Select node from an available OS",
- "select_osn_desc": "
First select an orderer that is already joined to the channel. We will use this orderer to get the channel's config block.
Then select the channel for the new join.",
+ "select_osn_desc": "\n\nFirst select an orderer that is already joined to the channel. We will use this orderer to get the channel's config block. \n\nThen select the channel for the new join.",
"select_osn_placeholder": "Select an orderer",
"select_ch_placeholder": "Select a channel",
"general_join_fail_title": "Joining Orderer Failure",
- "general_join_failure": "One or more orderers failed to join the channel. Check that the orderers are running/online and that they have \"Chanel Participation\" features enabled.",
+ "general_join_failure": "One or more orderers failed to join the channel. Check that the orderers are running/online and that they have \"Channel Participation\" features enabled.",
"find_out_more": "Find out more here",
"select_peer_to_join": "Choose from available peers",
"select_orderer": "Select from available ordering services",
"select_channel": "Channel name",
"instantiate": "Instantiate",
"delete_users": "Delete users",
- "error_removing_users": "An error occurred while deleting user(s)",
+ "delete_confirmation": "Confirm delete",
+ "delete_user_desc": "Deleting users is a permanent action. Confirm that the usernames below should be deleted.",
+ "delete_key_desc": "Deleting API keys is a permanent action. Confirm that the keys below should be deleted.",
+ "delete_key_summary_desc": "Deleting {{count}} key(s)",
+ "delete_user_summary_desc": "Deleting {{count}} user(s)",
"admin_list": "Admin",
"access_list": "General",
- "atleast_one_admin_required": "At least one user having manager role is required.",
- "user_removed_successful": "User ${email} has been successfully removed.",
- "users_removed_successful": "Users ${email} have been successfully removed.",
- "user_add_successful": "User ${email} has been successfully added.",
- "users_add_successful": "Users ${email} have been successfully added.",
+ "user_removed_successful": "User {{email}} has been successfully removed.",
+ "users_removed_successful": "Users {{email}} have been successfully removed.",
+ "user_add_successful": "User {{email}} has been successfully added.",
+ "users_add_successful": "Users {{email}} have been successfully added.",
+ "apikey_removed_successful": "The selected API key has been successfully removed.",
+ "apikeys_removed_successful": "The selected API keys have been successfully removed.",
"of": "of",
- "of_n_items": "of ${n} Items",
+ "of_n_items": "of {{n}} Items",
"of_1_item": "of 1 Item",
- "breadcrumb_name": "${name}",
+ "breadcrumb_name": "{{name}}",
"installed_on": "Installed on",
- "instantiate_chaincode_successful": "${name} ${version} has been successfully instantiated on channel ${channel}.",
+ "instantiate_chaincode_successful": "{{name}} {{version}} has been successfully instantiated on channel {{channel}}.",
"instantiate_smc": "Instantiate smart contract",
"upgrade_smc": "Upgrade smart contract",
"upgrade": "Upgrade",
"instantiate_chaincode_desc": "After a smart contract is instantiated on a channel, peers on the channel that have the smart contract installed can access data associated with that smart contract. When a peer's organization is listed in the endorsement policy of the smart contract, the peer might be asked to approve proposals for updates to data associated with the smart contract.",
- "upgrade_chaincode_desc_1": "You are upgrading ${name} on channel ${channel}.",
- "upgrade_chaincode_desc_2": "Important: Before upgrading the smart contract on the channel, it is strongly recommended that you install the latest version of this smart contract on all peers on ${channel}. Otherwise they will not be able to access data associated with the smart contract.",
+ "upgrade_chaincode_desc_1": "You are upgrading {{name}} on channel {{channel}}.",
+ "upgrade_chaincode_desc_2": "Important: Before upgrading the smart contract on the channel, it is strongly recommended that you install the latest version of this smart contract on all peers on {{channel}}. Otherwise they will not be able to access data associated with the smart contract.",
"upgrade_chaincode_desc_3": " The upgrade cannot be undone after you click the Upgrade button.",
"setup_endorsement_policy": "Setup endorsement policy",
"setup_endorsement_policy_desc": "Select the member(s) that you want to endorse transactions.",
@@ -450,13 +502,14 @@
"enter_arguments_desc": "If you want to run a function in the smart contract to initialize it, enter the function name and an array of string arguments to pass to it.",
"selectedArguments": "Arguments",
"arguments_placeholder": "For example: a, 200, b, 250",
- "out_of_x": "out of ${totalCount} selected members need to endorse transactions",
+ "out_of_x": "out of {{totalCount}} selected members need to endorse transactions",
"selectedEndorsementCount": "",
"advanced_policy_reference": "[[Click here]](_ENDORSE_LINK) for more information about the endorsement policy format.",
"cert_renew": "[[Click here]](_CERT_RENEW_LINK) for more information about certificate renewal.",
- "_CERT_RENEW_LINK": "${DOC_PREFIX}?ibp-console-identities#ibp-console-identities-expiration",
+ "_CERT_RENEW_LINK": "{{DOC_PREFIX}}?topic=console-managing-certificates#cert-mgmt-enroll-tls-peer",
"contact_support_2": "Before contacting support, check out the latest [[Troubleshooting]](troubleshooting_link) information to see if a solution to your problem is already available.",
- "_ENDORSE_LINK": "${DOC_PREFIX}?topic=tutorials-deploying-smart-contracts",
+ "contact_support_3": "Before contacting support, check out our [[docs]](hlfoc_doc_link) to see if a solution to your problem is already available.",
+ "_ENDORSE_LINK": "{{DOC_PREFIX}}?topic=tutorials-deploying-smart-contracts",
"selectedChannel": "Channel",
"selectedOrderer": "Orderer cluster",
"one_member_endorses": "One member needs to endorse transactions.",
@@ -464,14 +517,14 @@
"error_occurred_during_upgrade": "An error occurred during upgrade.",
"transaction_overview": "Transaction overview",
"channel_details": "Channel details",
- "error_channel_not_found": "The channel '${channelId}' was not found.",
+ "error_channel_not_found": "The channel '{{channelId}}' was not found.",
"block_history": "Block history",
"transactions": "Transactions",
"block_hash": "Block hash",
- "block_title": "Block ${number}",
+ "block_title": "Block {{number}}",
"error_block": "An error occurred getting the block information.",
"transaction_id": "Transaction ID",
- "block_created": "Block created ${date}",
+ "block_created": "Block created {{date}}",
"empty_transactions": "There are no transactions for this block.",
"transaction": "Transaction",
"chaincode_id": "Smart contract ID",
@@ -482,7 +535,7 @@
"chaincode_empty_title": "Run a smart contract on this channel",
"chaincode_empty_desc": "This channel doesn't currently have any smart contract definitions. You can understand how to run a smart contract on this channel by reading the quick 5 minute \"How-to topic\" or get started by proposing a smart contract definition.",
"chaincode_how_to": "How-to topic",
- "chaincode_how_to_link": "${DOC_PREFIX}?topic=how-developing-smart-contracts-applications",
+ "chaincode_how_to_link": "{{DOC_PREFIX}}?topic=how-developing-smart-contracts-applications",
"chaincode_proposed": "Proposed",
"chaincode_ready": "Ready to commit",
"chaincode_committed": "Committed",
@@ -512,13 +565,13 @@
"pkg_version_tooltip": "Tip: Use n.n, (for example 1.0 or 1.1) when the version requires approval across organizations in the channel. Use n.n.n (for example 1.0.1 or 1.1.2) when the version does not require approval from other organizations and does not introduce any modifications the to read/write set that could cause transaction endorsement to fail.",
"propose_install_desc": "The selected package will be installed on one or more peers in your organization. Use this panel to install it on all your peers or select individual peers.",
"propose_install_important": "Your identity must have the admin role for the peer organization in order to install smart contract packages.",
- "propose_install_important_link": "${DOC_PREFIX}?topic=tutorials-deploying-smart-contracts",
+ "propose_install_important_link": "{{DOC_PREFIX}}?topic=tutorials-deploying-smart-contracts",
"propose_install_all_peers": "Install smart contract on all peers from your organization that have joined this channel?",
"install_on": "Install on",
"propose_policy": "Smart contract endorsement policy",
"propose_policy_desc": "Select which organizations can endorse a transaction for this smart contract and how many endorsements are required before it can be committed to the ledger.",
"propose_policy_important": "This policy controls who can commit a transaction to the ledger and is different than the lifecycle endorsement policy which specifies who can approve a smart contract definition and how many approvals are required.",
- "propose_policy_important_link": "${DOC_PREFIX}?topic=tutorials-deploying-smart-contracts",
+ "propose_policy_important_link": "{{DOC_PREFIX}}?topic=tutorials-deploying-smart-contracts",
"init_required": "Does smart contract require invoking 'Init'?",
"implicit": "Implicit",
"explicit": "Explicit",
@@ -527,39 +580,39 @@
"all_orgs_must_endorse": "All organizations must endorse",
"any_orgs_must_endorse": "Any organizations must endorse",
"num_orgs_must_endorse": "Number of organizations that must endorse",
- "org_must_endorse": "${org} must endorse",
- "n_orgs_of_must_endorse": "${n} of ${orgs_list} must endorse",
+ "org_must_endorse": "{{org}} must endorse",
+ "n_orgs_of_must_endorse": "{{n}} of {{orgs_list}} must endorse",
"select_organizations": "Select organizations",
"existing_pkgs_installed": "Existing packages installed on peers",
"choose_a_pkg": "Choose a package",
"manual_policy": "Manual endorsement policy",
"manual_policy_placeholder": "Enter policy JSON here",
"manual_policy_reference": "[[Click here]](_MANUAL_POLICY_LINK) for more information about the endorsement policy format.",
- "_MANUAL_ENDORSE_LINK": "${DOC_PREFIX}?topic=tutorials-deploying-smart-contracts",
+ "_MANUAL_ENDORSE_LINK": "{{DOC_PREFIX}}?topic=tutorials-deploying-smart-contracts",
"error_manual_policy_json": "The JSON is not in proper format.",
"propose_private_data": "Additional private data collection",
"propose_private_data_desc": "If your smart contract package includes private data collections, use this panel to upload the private data collection configuration file. Private data requires cross organizational gossip in order to work. Therefore you need to ensure each organization that uses this private data collection has at least one anchor peer configured in the channel.",
"private_data_json": "Collections configuration file",
"proposal_will_be_sent": "This proposal will be sent to:",
- "this_proposal": "This proposal will approve this definition for ${org}",
+ "this_proposal": "This proposal will approve this definition for ",
"lifecycle_endorsement_policy": "Lifecycle endorsement policy",
"policy_custom": "Custom policy",
"policy_majority": "Majority must approve",
"policy_all": "All must approve",
"policy_any": "Any must approve",
- "policy_n": "${n} must approve",
+ "policy_n": "{{n}} must approve",
"use_default_policy": "Use default endorsement policy",
"use_default_policy_majority": "Use default endorsement policy (majority of organizations need to approve)",
"use_default_policy_all": "Use default endorsement policy (all organizations need to approve)",
"use_default_policy_any": "Use default endorsement policy (any organization can approve)",
"chaincode_proposal": "Smart contract proposal",
- "chaincode_proposal_text": "Smart contract ${id} ${version} for channel ${channel} proposed by ${org}",
+ "chaincode_proposal_text": "Smart contract {{id}} {{version}} for channel {{channel}} proposed by {{org}}",
"view_chaincode_proposal": "View smart contract proposal",
- "propose_existing_important": "A smart contract proposal for ${chaincode_id} is currently pending for version ${chaincode_version}. If you continue with this proposal, it will replace the currently pending proposal.",
+ "propose_existing_important": "A smart contract proposal for {{chaincode_id}} is currently pending for version {{chaincode_version}}. If you continue with this proposal, it will replace the currently pending proposal.",
"chaincode_definition": "Smart contract definition",
"approve": "Approve",
"commit": "Commit",
- "proposed_with_policy": "Proposed (${n} must approve)",
+ "proposed_with_policy": "Proposed ({{n}} must approve)",
"approved": "Approved",
"pending_approval": "Pending approval",
"peers_installed_on": "Currently installed on peers",
@@ -601,7 +654,7 @@
"no_blocks": "There are no blocks for the channel.",
"error_sync_channel": "Certificate is not a admin cert on the channel for the MSP.",
"policy": "Policy",
- "endorsement_policy": "${count} out of ${total} members need to endorse transactions",
+ "endorsement_policy": "{{count}} out of {{total}} members need to endorse transactions",
"duplicate_user_not_allowed": "User already exists.",
"upgradable": "",
"upgrade_available": "Upgrade Available",
@@ -611,15 +664,14 @@
"parsedArguments": "Arguments to be passed",
"error_parsing_json": "Error parsing JSON",
"zip_or_json": "Choose a Zip or JSON file",
- "upgrade_chaincode_successful": "${name} has successfully been upgraded from ${old_version} to ${new_version} on ${channel}. You can now start transacting with it.",
+ "upgrade_chaincode_successful": "{{name}} has successfully been upgraded from {{old_version}} to {{new_version}} on {{channel}}. You can now start transacting with it.",
"add_peer_successful": "Peer added",
"add_peers_successful": "Peers added",
- "add_peer_successful_description": "Congratulations! You have successfully created '${peerName}' from ${peerCloud}. It will take a few minutes for the status to become green while it is deploying to your cluster in the background. Feel free to carry on with your other activities in the console while that happens.",
+ "add_peer_successful_description": "Congratulations! You have successfully created '{{peerName}}' from {{peerCloud}}. It will take a few minutes for the status to become green while it is deploying to your cluster in the background. Feel free to carry on with your other activities in the console while that happens.",
"add_peers_successful_description": "Congratulations! You have successfully created peers. It will take a few minutes for the status to become green while they are deploying to your cluster in the background. Feel free to carry on with your other activities in the console while that happens.",
"instantiated_chaincode_empty": "No instantiated smart contracts found for this channel.",
"select_orderer_title": "Select ordering service",
"json_configuration_tooltip": "Ensure the JSON content has the required fields: clientId, oauthServerUrl, secret and tenantId. Otherwise use the link below to manually specify these values.",
- "admin_contact_email_tooltip": "It is recommended to use a functional email address as the contact address so that access to the network does not depend on a single individual's availability. All new login requests are sent to this address.",
"invalid_email": "Email is invalid.",
"certificate_keypair": "Certificate key pair",
"update": "Update",
@@ -629,8 +681,9 @@
"error_update_identity": "An error occurred during the identity update.",
"connected_to": "Connected to",
"remove_identity": "Remove identity",
- "remove_identity_desc": "This action cannot be undone. This will permanently remove ${name} from the Fabric Operations Console.",
+ "remove_identity_desc": "This action cannot be undone. This will permanently remove {{name}} from the Fabric Operations Console.",
"remove_identity_confirm": "Please type the name of the identity to confirm:",
+ "remove_identity_storage_disabled_tooltip": "The current identity storage provider does not support removing identities.",
"confirm_identity_name": "Identity name",
"confirm_peer_name": "Peer Name",
"confirm_msp_name": "MSP Name",
@@ -656,42 +709,40 @@
"orderer_type": "Orderer Type",
"system_channel_maintenance_warning": "When system channel is in maintenance mode you will not be able to create new channels",
"orderer_node_settings": "Ordering node settings",
- "remove_orderer_channel_desc": "This action will remove ${name} from the selected ordering nodes.",
+ "remove_orderer_channel_desc": "This action will remove {{name}} from the selected ordering nodes.",
"remove_orderer_channel_confirm": "Please type the name of the channel to confirm:",
- "remove_orderer_desc": "This action will remove ${name} from the Fabric Operations Console. Its containers will remain intact.",
- "delete_orderer_desc": "This action will permanently delete ${name} in your Kubernetes cluster and cannot be undone. Consider this action carefully. If this ordering service contains channels that peers are transacting on, all subsequent transactions will fail.",
+ "remove_orderer_desc": "This action will remove {{name}} from the Fabric Operations Console. Its containers will remain intact.",
+ "delete_orderer_desc": "This action will permanently delete {{name}} in your Kubernetes cluster and cannot be undone. Consider this action carefully. If this ordering service contains channels that peers are transacting on, all subsequent transactions will fail.",
"remove_orderer_confirm": "Please type the name of the ordering service to confirm:",
"error_update_orderer": "An error occurred during the ordering service update.",
"error_update_peer": "An error occurred during the peer update.",
"error_update_ca": "An error occurred during the Certificate Authority update.",
"peer_settings": "Peer settings",
- "remove_peer_desc": "This action cannot be undone. This will permanently remove ${name} from the Fabric Operations Console. If the peer was created using this console, it will be deleted in the IBM Kubernetes service as well. If it was created elsewhere and imported into this console, it will only be removed from the UI. Its containers will remain intact.",
- "delete_peer_desc": "This action will permanently delete ${name} in your Kubernetes cluster and cannot be undone. Consider this action carefully.",
- "remove_msp_desc": "This action cannot be undone. This will permanently remove ${name} from the Fabric Operations Console.",
- "remove_adminmsp_from_orderer_desc": "This action will remove ${name} from the ordering service but not from the console. This organization MSP will no longer be able to manage this ordering service. You can add it back at a later time if needed.",
- "remove_msp_from_consortium_desc": "This action will remove ${name} from the consortium but not from the console. Organizations must be part of a consortium before they can be added to a channel.",
+ "remove_peer_desc": "This action cannot be undone. This will permanently remove {{name}} from the Fabric Operations Console. If the peer was created using this console, it will be deleted in the IBM Kubernetes service as well. If it was created elsewhere and imported into this console, it will only be removed from the UI. Its containers will remain intact.",
+ "delete_peer_desc": "This action will permanently delete {{name}} in your Kubernetes cluster and cannot be undone. Consider this action carefully.",
+ "remove_msp_desc": "This action cannot be undone. This will permanently remove {{name}} from the Fabric Operations Console.",
+ "remove_adminmsp_from_orderer_desc": "This action will remove {{name}} from the ordering service but not from the console. This organization MSP will no longer be able to manage this ordering service. You can add it back at a later time if needed.",
+ "remove_msp_from_consortium_desc": "This action will remove {{name}} from the consortium but not from the console. Organizations must be part of a consortium before they can be added to a channel.",
"remove_peer_confirm": "Please type the name of the peer to confirm:",
"remove_msp_confirm": "Please type the name of the organization MSP to confirm.",
"associate": "Associate",
"ca_details": "Certificate Authority settings",
- "remove_ca_desc": "This action cannot be undone. This will permanently remove ${name} from the Fabric Operations Console. If the CA was created using this console, it will be deleted in the IBM Kubernetes service as well. If it was created elsewhere and imported into this console, it will only be removed from the UI. Its containers will remain intact.",
- "delete_ca_desc": "This action will permanently delete ${name} in your Kubernetes cluster and cannot be undone. Consider this action carefully.",
+ "remove_ca_desc": "This action cannot be undone. This will permanently remove {{name}} from the Fabric Operations Console. If the CA was created using this console, it will be deleted in the IBM Kubernetes service as well. If it was created elsewhere and imported into this console, it will only be removed from the UI. Its containers will remain intact.",
+ "delete_ca_desc": "This action will permanently delete {{name}} in your Kubernetes cluster and cannot be undone. Consider this action carefully.",
"remove_ca_confirm": "Please type the name of the Certificate Authority to confirm:",
- "remove_consenter_system_channel_desc": "This action will remove the consenter ${name} from the ordering service system channel.",
- "remove_consenter_application_channel_desc": "This action will remove the consenter ${name} from channel ${channelId}.",
+ "remove_consenter_system_channel_desc": "This action will remove the consenter {{name}} from the ordering service system channel.",
+ "remove_consenter_application_channel_desc": "This action will remove the consenter {{name}} from channel {{channelId}}.",
"remove_consenter_confirm_channel": "Please type the name of the consenter to confirm:",
"remove_consenter_confirm": "Please type the URL of the consenter to confirm:",
"confirm_consenter_url": "Consenter URL",
"confirm_consenter_url_placeholder": "Enter the URL of the consenter to be removed",
- "smart_contract_subtext": "For a tool to develop and build smart contracts see the [[IBM Blockchain VSCode extension]](_LINK1)",
- "_LINK1": "https://marketplace.visualstudio.com/items?itemName=IBMBlockchain.ibm-blockchain-platform",
"add_ca_successful": "Certificate Authority added",
"add_cas_successful": "Certificate Authorities added",
- "add_ca_successful_description": "Congratulations! You have successfully created '${caName}'. It will take a few minutes for the status to become green while it is deploying to your cluster in the background. Feel free to carry on with your other activities in the console while that happens.",
+ "add_ca_successful_description": "Congratulations! You have successfully created '{{caName}}'. It will take a few minutes for the status to become green while it is deploying to your cluster in the background. Feel free to carry on with your other activities in the console while that happens.",
"add_cas_successful_description": "Congratulations! You have successfully created Certificate Authorities. It will take a few minutes for the status to become green while they are deploying to your cluster in the background. Feel free to carry on with your other activities in the console while that happens.",
"add_orderer_successful": "Ordering service added",
"add_orderers_successful": "Ordering service added",
- "add_orderer_successful_description": "Congratulations! You have successfully created '${ordererName}'. It will take a few minutes for the status to become green while it is deploying to your cluster in the background. Feel free to carry on with your other activities in the console while that happens.",
+ "add_orderer_successful_description": "Congratulations! You have successfully created '{{ordererName}}'. It will take a few minutes for the status to become green while it is deploying to your cluster in the background. Feel free to carry on with your other activities in the console while that happens.",
"add_orderers_successful_description": "Congratulations! You have successfully created ordering services. It will take a few minutes for the status to become green while they are deploying to your cluster in the background. Feel free to carry on with your other activities in the console while that happens.",
"empty": "",
"connect_with_sdk": "Connect with SDK",
@@ -702,17 +753,19 @@
"register": "Register",
"add_attribute": "Add attribute",
"connection_profile": "Connection profile",
+ "_CREATE_APP_INVOKE_LINK": "{{DOC_PREFIX}}?topic=tutorials-developing-applications#ibm-hlfsupport-console-app-profile",
+ "connection_profile_subtext": "This connection profile is used by your client application to connect to your network. It contains all the endpoint information of your peers, Certificate Authority, and organization MSP ID. Read more [[here]](_CREATE_APP_INVOKE_LINK).",
"create_connection_profile": "Create connection profile",
"connection_profile_include_ca": "Include CA for user registration and enrollment?",
- "connection_profile_include_ca_2": "Include ${ca} for user registration and enrollment?",
+ "connection_profile_include_ca_2": "Include {{ca}} for user registration and enrollment?",
"connection_profile_include_ca_tooltip": "Select Yes if you plan to use the client application to register or enroll users against the CA associated with this MSP. Select No when the application already has the necessary certificates to transact with the network.",
"connection_profile_peers": "Select peers to include",
"no_peers_available": "There are currently no peers available.",
"connection_profile_channels": "Channels this connection profile will access",
"connection_profile_channel_warning": "The channel information for one or more of the selected peers could not be retrieved and is not included in the displayed list.",
"connection_profile_ca_warning": "The Certificate Authority associated with the organization was not found in the console and will not be included in the connection profile.",
- "connection_profile_ca_link": "${DOC_PREFIX}?topic=console-managing-organizations",
- "see_more": "+ see ${count} more",
+ "connection_profile_ca_link": "{{DOC_PREFIX}}?topic=console-managing-organizations",
+ "see_more": "+ see {{count}} more",
"see_less": "- see less",
"download_connection_profile": "Download connection profile",
"channel_name": "Channel name",
@@ -728,9 +781,10 @@
"welcome_description": "To get up and running easily, click Start Here and follow one of our helpful checklists. ",
"welcome_description2": "For a more in-depth tutorial, check out our [[documentation]](_LINK2).",
"open_channel_config": "Open Channel Config",
- "_LINK2": "${DOC_PREFIX}?topic=started-build-network",
+ "_LINK2": "{{DOC_PREFIX}}?topic=started-build-network",
+ "build_network_hlfoc": "{{DOC_PREFIX}}/deployment_guide_overview.html",
"_GABLOG": "http://ibm.biz/BdzqHc",
- "_404DOCLINK": "${DOC_PREFIX}",
+ "_404DOCLINK": "{{DOC_PREFIX}}",
"documentation": "Documentation",
"learn_more_docs": "Learn more in our documentation",
"do_not_show_again": "Do not show again",
@@ -761,23 +815,23 @@
"orderer_needed_simple": "Missing a MSP with orderers",
"duplicate_msp": "Duplicate MSP",
"duplicate_msp_error": "Channel cannot have two organizations with same MSP ID.",
- "approval_error_no_channel": "There are no peer joined to \"${channelName}\". Ensure that at least one peer is joined the channel from this organization.",
+ "approval_error_no_channel": "There are no peer joined to \"{{channelName}}\". Ensure that at least one peer is joined the channel from this organization.",
"validation_channel_name_invalid": "The channel name can contain only lowercase characters, numbers, or dashes, and should start with a letter.",
"channel_name_required": "Channel name is required.",
"reader": "Reader",
"writer": "Writer",
"operator": "Operator",
"error_create_channel": "An error occurred when creating channel.",
- "channel_creation_request_submitted": "You have successfully initiated a request to create ${channelName}. Join a peer to this channel by clicking the pending channel tile below.",
- "channel_creation_request_submitted_to_orderer": "You have successfully initiated a request to create ${channelName}. This request requires the signature of an ordering service MSP. After the request has been signed and submitted, you will see a pending channel tile. Clicking on this tile will allow you to join a peer to the channel.",
- "channel_join_request_submitted": "You have successfully joined ${channelName}.",
+ "channel_creation_request_submitted": "You have successfully initiated a request to create {{channelName}}. Join a peer to this channel by clicking the pending channel tile below.",
+ "channel_creation_request_submitted_to_orderer": "You have successfully initiated a request to create {{channelName}}. This request requires the signature of an ordering service MSP. After the request has been signed and submitted, you will see a pending channel tile. Clicking on this tile will allow you to join a peer to the channel.",
+ "channel_join_request_submitted": "You have successfully joined {{channelName}}.",
"channel_error_exists": "Channel name already exists on ordering service.",
"channel_error_nomember": "One of the selected MSP IDs is not in the consortium.",
"set_identity": "Set identity",
"use_enroll_id": "Enroll ID",
"set": "Set",
"versions": "Versions",
- "version_info": "${product} - ${version}",
+ "version_info": "{{product}} - {{version}}",
"apollo": "User Interface",
"athena": "Backend API",
"stitch": "gRPC API",
@@ -803,7 +857,8 @@
"tls_identity_not_found": "TLS Identity not found",
"peer_tls_identity_not_found": "An identity that is enrolled with the TLS Certificate Authority that was used to create the peer is required to view or modify the log settings.",
"orderer_tls_identity_not_found": "An identity that is enrolled with the TLS Certificate Authority that was used to create the ordering node is required to view or modify the log settings.",
- "orderer_tls_admin_identity_not_found": "This ordering cluster is not using a system channel, thus a TLS identity is needed to manage it. This is the same identity that was used to create the ordering node and was enrolled against the TLS Certificate Authority. Once this identity is in the console's wallet you will be able to view, delete and join channels.
You can use the console to enroll this identity by navigating to the CA tile and clicking the \"Enroll identity\" action on the row for the orderer's identity. Make sure to select the *TLS* CA in the drop down when enrolling.",
+ "orderer_tls_admin_identity_not_found": "This ordering cluster is not using a system channel, thus a TLS identity is needed to manage it. This is the same identity that was used to create the ordering node and was enrolled against the TLS Certificate Authority. Once this identity is in the console's wallet you will be able to view, delete and join channels.\n\nYou can use the console to enroll this identity by navigating to the CA tile and clicking the \"Enroll identity\" action on the row for the orderer's identity. Make sure to select the *TLS* CA in the drop down when enrolling.",
+ "orderer_tls_admin_identity_not_found2": "This ordering cluster has \"channel participation\" features available, but the wallet does not have a TLS identity to leverage this feature. Add this identity to your wallet by enrolling the same identity that was used to create the ordering node with the *TLS* Certificate Authority. Once this identity is in the console's wallet you will be able to remove the system channel and manage channels with Fabric's preferred interface (\"channel participation\"). (.\n\nYou can use the console to enroll this identity by navigating to the CA tile and clicking the \"Enroll identity\" action on the row for the orderer's identity. Make sure to select the *TLS* CA in the drop down when enrolling.",
"error_get_log_settings": "Unable to retrieve log settings",
"peer_error_get_log_settings": "An error occurred while retrieving the current log settings. Ensure that the peer is running and that the peer operations url is correct. ",
"orderer_error_get_log_settings": "An error occurred while retrieving the current log settings. Ensure that the ordering node is running and that the ordering node operations url is correct. ",
@@ -812,7 +867,7 @@
"logger_overrides_tooltip": "Override the log level for a specific logger by providing the logger name and desired log level.",
"logger_placeholder": "Enter logger here",
"logger_name": "Logger name",
- "log_level_override": "${logger} log level",
+ "log_level_override": "{{logger}} log level",
"fatal": "Fatal",
"panic": "Panic",
"default": "Default",
@@ -820,13 +875,13 @@
"log_spec_placeholder": "Enter log specification string here",
"log_spec_tooltip": "Enter the Fabric logging specification string",
"log_settings_desc": "Use this panel to set the log level for all loggers on this node or to override the log level for specific loggers. See [[Configuring node logging]](log_settings_topic_link) for more information.",
+ "log_settings_topic_link": "{{DOC_PREFIX}}?topic=console-administering-your#ibm-hlfsupport-console-manage-logger",
"log_settings_desc_openshift": "Use this panel to set the log level for all loggers on this node or to override the log level for specific loggers. See [[Configuring node logging]](log_settings_topic_link_openshift) for more information.",
- "product_running_on": "Running on ${platform}",
+ "log_settings_topic_link_openshift": "{{DOC_PREFIX}}?topic=console-administering-your#ibm-hlfsupport-console-manage-logger",
+ "product_running_on": "Running on {{platform}}",
"create_ca_ibmcloud": "Create an IBM Cloud Certificate Authority",
"create_ca": "Create a Certificate Authority",
"import_ca": "Import an existing Certificate Authority",
- "saas": "IBM Cloud",
- "ibm_saas": "IBM Cloud",
"signing": "Certificate signing request host names",
"signing_placeholder": "Enter host names",
"enter_certificate": "Enter CA admin credentials",
@@ -842,7 +897,7 @@
"role_type": "Role Type",
"role_type_placeholder": "Enter role type",
"role_type_value_placeholder": "ex: peer, client",
- "summary_role_type": "${name} = ${value}",
+ "summary_role_type": "{{name}} = {{value}}",
"error_create_ca": "Unable to create Certificate Authority",
"add_msp": "Add MSP",
"enter_msp_name": "Enter MSP name",
@@ -886,13 +941,13 @@
"generating_cert": "Generating certificate",
"error_required_fields": "Required fields are missing.",
"error_occurred_during_msp_generation": "An error occurred while generating MSP.",
- "msp_generated_successfully": "${msp_id} has been successfully generated.",
+ "msp_generated_successfully": "{{msp_id}} has been successfully generated.",
"error_getting_root_cert": "An error occurred while getting CA root certs.",
"error_identity_exists": "Identity with same name already exists.",
"selectedOrg": "MSPs",
"selected_msps": "Selected MSPs",
- "channel_title": "${channelName}",
- "channel_update_request_submitted": "You have successfully initiated a request to update channel ${channelName}.",
+ "channel_title": "{{channelName}}",
+ "channel_update_request_submitted": "You have successfully initiated a request to update channel {{channelName}}.",
"update_channel": "Update channel",
"error_update_channel": "An error occurred when updating channel.",
"no_changes": "Channel not updated: no change detected.",
@@ -901,8 +956,8 @@
"error_msps": "Unable to read MSP information.",
"error_add_msps": "Unable to add MSP.",
"error_add_msps_already_exists": "Unable to add MSP. The requested MSP ID already exists.",
- "error_delete_msps": "Unable delete MSP '${msp_id}'.",
- "error_delete_msps_policy": "Unable delete MSP '${msp_id}'. Required signatures not met.",
+ "error_delete_msps": "Unable delete MSP '{{msp_id}}'.",
+ "error_delete_msps_policy": "Unable delete MSP '{{msp_id}}'. Required signatures not met.",
"empty_msps_message": "No MSPs have been added yet.",
"msp_heading": "Organizations",
"export_msp": "Export MSP",
@@ -910,7 +965,7 @@
"orderer_members": "Consortium members",
"add_organization": "Add organization",
"add_orderer_administrator": "When an ordering node is created, you specify the ordering service administrator MSP certificate. Use this panel to allow additional organizations to administer the node.",
- "add_orderer_organization": "Use this panel to add an organization to the consortium by selecting its MSP definition.
Select an existing organization MSP ID from this console or upload a new one using the organization MSP JSON file provided to you.",
+ "add_orderer_organization": "Use this panel to add an organization to the consortium by selecting its MSP definition. \n \n Select an existing organization MSP ID from this console or upload a new one using the organization MSP JSON file provided to you.",
"add_orderer_admin": "Add ordering service administrator",
"use_existing_msp": "Existing MSP ID",
"select_existing_msp": "Select an existing MSP",
@@ -982,8 +1037,8 @@
"channels_desc_orderer": "These are the channels where at least one orderer has joined or a pending genesis block has been created.",
"join_channel_step1_desc": "Until a peer joins a channel the organization the peer belongs to cannot participate or learn about transactions on the channel. This channel must exist before you join peers to it. If you have not created a channel yet, you should do so now.",
"join_channel_step2_desc": "Specify the name of the channel you want to join a peer to. You must either know the name of the channel or get it out of band (for example, from one of the organizations joined to the channel).",
- "join_channel_step3_desc": "Now that you have specified the ordering service and the name of the channel you're ready to select the peers you want to join to the ${channelName} channel.",
- "join_channel_step3_direct_desc": "Select the peers you want to join to the ${channelName} channel.",
+ "join_channel_step3_desc": "Now that you have specified the ordering service and the name of the channel you're ready to select the peers you want to join to the {{channelName}} channel.",
+ "join_channel_step3_direct_desc": "Select the peers you want to join to the {{channelName}} channel.",
"select_orderer_desc": "All channels have an ordering service. To join a channel, you must select the ordering service associated with that channel.",
"select_orderer_tooltip": "If you can't see the ordering service the channel is associated with you will need to get the JSON file representing the ordering service from the ordering service admin and navigate to the Nodes panel to import it into this console.",
"select_peer_tooltip": "Joining more than one peer to a channel ensures that peers are highly available.",
@@ -996,6 +1051,7 @@
"add_identity_cert_tooltip": "Upload a PEM file that contains the signing certificate of the identity in base64 or PEM format. This certificate is also referred to as your enrollment certificate or public key.",
"add_identity_private_key_tooltip": "Upload a file that contains the private key of this identity (in base64 or PEM format).",
"edit_identity_name_tooltip": "Modify the name of the identity. This field is only used to identify the identity in this console.",
+ "edit_identity_name_disabled_tooltip": "Then name of the identity cannot be modified.",
"edit_identity_cert_tooltip": "Upload a file that contains a new signing certificate of this identity (in base64 or PEM) format. This certificate is also referred to as your enrollment certificate or public key.",
"edit_identity_private_key_tooltip": "Upload a file that contains a new private key of this identity (in base64 or PEM format).",
"template_name_tooltip": "The template name is a description.",
@@ -1037,10 +1093,10 @@
"from_tls_ca": "TLS CA",
"update_msp_definition_desc": "Upload the JSON file that contains the updated MSP information.",
"available_msps": "Available organizations",
- "msp_deleted": "MSP ${msp_name} has been deleted successfully.",
- "msp_updated": "MSP ${msp_name} has been updated successfully.",
- "msp_imported": "MSP ${msp_name} has been imported successfully.",
- "msp_created": "MSP ${msp_name} has been created successfully.",
+ "msp_deleted": "MSP {{msp_name}} has been deleted successfully.",
+ "msp_updated": "MSP {{msp_name}} has been updated successfully.",
+ "msp_imported": "MSP {{msp_name}} has been imported successfully.",
+ "msp_created": "MSP {{msp_name}} has been created successfully.",
"error_create_orderer": "Unable to create ordering service",
"choose_orderer_location": "Choose your ordering service location",
"select_orderer_type": "Select to create or import an ordering service.",
@@ -1075,8 +1131,8 @@
"3buildDesc": "Open the ordering service you created in the previous step so that you can add the peer organization you created in Step 1 to the list of organizations that can transact.",
"4buildDesc": "Channels are required for organizations to transact on the blockchain.",
"5buildDesc": "Before your peer can transact, it must join the channel.",
- "1buildSteps": "– Create a CA – Use the CA to register peer and peer admin identities – Create the peer's organization – Create a peer",
- "2buildSteps": "– Create a CA – Use the CA to register ordering service, ordering service admin identities – Create the ordering service organization – Create an ordering service",
+ "1buildSteps": "– Create a CA\n– Use the CA to register peer and peer admin identities \n– Create the peer's organization \n– Create a peer",
+ "2buildSteps": "– Create a CA\n– Use the CA to register ordering service, ordering service admin identities\n– Create the ordering service organization\n– Create an ordering service",
"1buildLink": "{{test__ca--add--tile}}",
"2buildLink": "{{test__ca--add--tile}}",
"3buildLink": "((orderers-container))",
@@ -1087,14 +1143,18 @@
"3buildButton": "Show ordering service",
"4buildButton": "Create channel",
"5buildButton": "Join channel",
- "1joinDocs": "${DOC_PREFIX}?topic=started-join-network",
- "develop_vs_code_link": "${DOC_PREFIX}?topic=how-developing-smart-contracts-applications",
- "2deployDocs": "${DOC_PREFIX}?topic=tutorials-deploying-smart-contracts",
- "3deployDocs": "${DOC_PREFIX}?topic=tutorials-deploying-smart-contracts",
- "4deployDocs": "${DOC_PREFIX}?topic=tutorials-deploying-smart-contracts",
- "apiDocs": "${BMIX_URL}/apidocs/blockchain",
- "mainDocs": "${DOC_PREFIX}?topic=tutorials-getting-started",
- "mainDocs_sw": "${DOC_PREFIX}?topic=tutorials-getting-started",
+ "1joinDocs": "{{DOC_PREFIX}}?topic=started-join-network",
+ "join_network_hlfoc": "{{DOC_PREFIX}}/channel_update_tutorial.html",
+ "develop_vs_code_link": "{{DOC_PREFIX}}?topic=how-developing-smart-contracts-applications",
+ "develop_vs_code_link2": "{{DOC_PREFIX}}/chaincode4ade.html",
+ "deploy_sm_hlfoc": "{{DOC_PREFIX}}/deploy_chaincode.html",
+ "2deployDocs": "{{DOC_PREFIX}}?topic=tutorials-deploying-smart-contracts",
+ "3deployDocs": "{{DOC_PREFIX}}?topic=tutorials-deploying-smart-contracts",
+ "4deployDocs": "{{DOC_PREFIX}}?topic=tutorials-deploying-smart-contracts",
+ "api_docs_link": "https://developer.ibm.com/apis/catalog/fabricopsconsole--fabric-operations-console-apis/Introduction",
+ "api_doc_hlfoc": "https://developer.ibm.com/apis/catalog/fabricopsconsole--fabric-operations-console-apis/Getting+Started",
+ "mainDocs": "{{DOC_PREFIX}}?topic=tutorials-getting-started",
+ "mainDocs2": "{{DOC_PREFIX}}",
"tlsca_name_placeholder": "Enter the TLS Certificate Authority name",
"selectedFunction": "Function name",
"enter_function_placeholder": "Enter the function name. For example: init",
@@ -1104,7 +1164,7 @@
"add_user_enroll_secret_tooltip": "Create a secret for the new identity. Save this value.",
"add_user_max_enrollment_tooltip": "The number of times you can generate keys for this identity. If left blank, it defaults to unlimited enrollments (-1).",
"ca_details_tooltip": "Associate an identity by clicking the settings button in order to operate your CA. Once you associate an identity, click enroll to generate keys for that identity.",
- "ca_actions_tooltip": "Click Associate identity to sign in with identity you want to enroll and use to register new users.
Click Export to download the CA details in a JSON File.
Click Remove to delete this CA.",
+ "ca_actions_tooltip": "Click Associate identity to sign in with identity you want to enroll and use to register new users.\n\nClick Export to download the CA details in a JSON File. \n\n Click Remove to delete this CA.",
"msp_heading_tooltip": "Organizations are defined by a Membership Services Provider (MSP). An MSP definition is created by the CA of a particular organization and includes at least one administrator certificate from that organization.",
"ca_new_identity_upload_json": "Use the add file button if the identity was exported from another Wallet.",
"import_ca_name_tooltip": "Enter a CA name. This field is only used to identify the CA in this console.",
@@ -1120,7 +1180,7 @@
"selectedACLRole": "Role",
"policy_definition": "Policy definition",
"acl_invalid": "Invalid ACL",
- "acl_invalid_desc": "ACL Policy definition ${invalidDef} is invalid and should be removed as member ${deletedOrg} is no longer member of this channel.",
+ "acl_invalid_desc": "ACL Policy definition {{invalidDef}} is invalid and should be removed as member {{deletedOrg}} is no longer member of this channel.",
"validation_mspid_invalid": "The MSP ID can contain only alphanumerics characters, or dashes, and should be shorter than 64 characters.",
"mspid_required": "MSP ID is required.",
"error_tls_ca_users": "Unable to retrieve the list of TLS users.",
@@ -1156,8 +1216,15 @@
"reenroll": "Re-enroll identity",
"import_orderer_desc_1": "An ordering service collects transactions, orders the transactions, and bundles them into blocks. All channels have an ordering service associated with them, and an ordering service must be deployed if you are founding a consortium.",
"import_orderer_desc_2": "Before creating an ordering service, you must first create a Certificate Authority (CA) and use that CA to create identities for the ordering service organization admin and for the ordering nodes themselves. Then you must create an organization definition for your ordering service organization that uses the ordering service organization admin identity.",
- "IMPORT_ORDERER_DESC_LINK": "${DOC_PREFIX}?topic=console-importing-nodes-msps-identities",
- "ibm_id": "IBM ID",
+ "IMPORT_ORDERER_DESC_LINK": "{{DOC_PREFIX}}?topic=console-importing-nodes-msps-identities",
+ "ibm_id": "IBMid",
+ "oauth": "OAuth2.0",
+ "ibm_cloud_desc": "Authentication is handled by IBMid",
+ "ibm_cloud_perm_desc": "Authorization is handled by IBM's IAM",
+ "oauth_desc": "Authentication is handled by an external service",
+ "oauth_perm_desc": "Authorization is handled by the console",
+ "local_desc": "Authentication is handled by the console",
+ "local_perm_desc": "Authorization is handled by the console",
"empty_msps_title": "No organizations available",
"empty_acl_title": "No Access Control List",
"empty_anchor_title": "No anchor peers",
@@ -1173,15 +1240,15 @@
"empty_identities_title": "No identities available",
"empty_identities_text": "Get started by creating a Certificate Authority and an organization MSP definition. You can then view your organization admin identity here and use it to interact with your network. You can also import identities if you have changed browsers.",
"empty_installed_title": "No installed smart contracts",
- "empty_installed_text": "Get started by installing your smart contract on peers in your console. Click Install smart contract to browse to your smart contract package and install it on your peer.",
+ "empty_installed_text": "Get started by installing your smart contract on peers in your console.\nClick Install smart contract to browse to your smart contract package and install it on your peer.",
"empty_instantiated_title": "No instantiated smart contracts",
- "empty_instantiated_text": "Get started by instantiating your smart contract on a channel in your console. Before a smart contract can be instantiated, it must be installed on a peer and the peer must have joined a channel.",
- "empty_peer_chaincode_message": "It looks like you have not installed any smart contracts on this peer yet. Click the Smart contracts tab and install a smart contract on your peer.",
+ "empty_instantiated_text": "Get started by instantiating your smart contract on a channel in your console.\nBefore a smart contract can be instantiated, it must be installed on a peer and the peer must have joined a channel.",
+ "empty_peer_chaincode_message": "It looks like you have not installed any smart contracts on this peer yet.\nClick the Smart contracts tab and install a smart contract on your peer.",
"empty_peer_chaincode_title": "No installed smart contracts",
"empty_tls_users_title": "Unable to retrieve the list of TLS users",
- "empty_tls_users_text": "You have entered an incorrect enroll ID or secret, or you do not have proper access to this list of users. Click the settings icon for this CA to properly set the identity.",
+ "empty_tls_users_text": "You have entered an incorrect enroll ID or secret, or you do not have proper access to this list of users.\nClick the settings icon for this CA to properly set the identity.",
"empty_ca_users_title": "Unable to retrieve the list of CA users",
- "empty_ca_users_text": "You have entered an incorrect enroll ID or secret, or you do not have proper access to this list of users. Click the settings icon for this CA to properly set the identity.",
+ "empty_ca_users_text": "You have entered an incorrect enroll ID or secret, or you do not have proper access to this list of users.\nClick the settings icon for this CA to properly set the identity.",
"error_identities_required": "The JSON should have the identities property.",
"error_policy_required": "The JSON should have the policy property.",
"select_msp": "Select an MSP",
@@ -1196,7 +1263,7 @@
"root_ca_subtext": "Your CA provides keys to your nodes and applications. Use this CA to register the node, admin and application identities that are required to deploy, operate, and interact with your network.",
"enrolling_users": "Enrolling Users",
"node_ou": "Node OU",
- "node_ou_param": "Node OU: ${state}",
+ "node_ou_param": "Node OU: {{state}}",
"add_anchor_peer": "Add anchor peer",
"add_anchor_peer_desc": "Select at least one peer from each organization to enable peers from different organizations to communicate automatically with each other.",
"selectedPeers": "Choose from available peers",
@@ -1215,9 +1282,9 @@
"ca_not_available_text": "It can take several minutes for a CA to start. If you encounter issues, check your CA logs and verify you have enough CPU, memory and storage available to the cluster.",
"peer_not_available_title": "Unable to connect to peer",
"peer_not_available_text": "It can take several minutes for a peer to start. If you encounter issues, check your peer logs and verify you have enough CPU, memory and storage available to the cluster.",
- "peer_not_available_logs": "Click [[here]](${_PEER_LOGS_LINK}) for more information about accessing the peer logs.",
- "_PEER_LOGS_LINK": "${DOC_PREFIX}?ibp-console-manage-console#ibp-console-manage-console-node-logs",
- "_PEER_LOGS_LINK_SW": "${DOC_PREFIX}?console-icp-manage#console-icp-manage-node-logs",
+ "peer_not_available_logs": "Click [[here]]({{_PEER_LOGS_LINK}}) for more information about accessing the peer logs.",
+ "_PEER_LOGS_LINK": "{{DOC_PREFIX}}?ibp-console-manage-console#ibp-console-manage-console-node-logs",
+ "_PEER_LOGS_LINK_SW": "{{DOC_PREFIX}}?console-icp-manage#console-icp-manage-node-logs",
"orderer_not_available_title": "Unable to connect to ordering service",
"orderer_not_available_text": "It can take several minutes for an ordering service to start. If you encounter issues, check your ordering node logs and verify you have enough CPU, memory and storage available to the cluster.",
"no_more_peers": "There are currently no more peers available to configure as anchor peers.",
@@ -1226,8 +1293,8 @@
"error_delete_ca": "Unable to delete the Certificate Authority.",
"error_delete_orderer": "Unable to delete the ordering service",
"input_error_invalid_char": "The value contains one or more invalid characters",
- "error_invalid_json_char": "A field (${field}) contains one or more invalid characters.",
- "error_invalid_field_value": "A field (${field}) contains an invalid value.",
+ "error_invalid_json_char": "A field ({{field}}) contains one or more invalid characters.",
+ "error_invalid_field_value": "A field ({{field}}) contains an invalid value.",
"generate_cert_title": "Use this option to generate a public and private key for a user that has already been registered with the CA. This is the second step in the process of creating a new identity that saves the identity to the Wallet and exports the identity to the file system.",
"register_user_title": "Select \"Register user\", to register a new user with your CA, the first step in creating a new identity. During registration, an enroll ID and secret are created that can later be used by a node or an organization admin to generate a public and private key to enroll the identity. This identity must be given a type that corresponds to the role the user will play on a network. If an identity will be an admin, register it with the type of admin. If an identity will be enrolled as a peer, use the peer type.",
"reenroll_cert_title": "Use this option to re-enroll the admin identity that is currently the associated identity for this CA if the certificate is about to expire or has been compromised.",
@@ -1241,13 +1308,13 @@
"input_error_non_whitespace": "The value may not contain a whitespace character.",
"input_error_non_numeric": "The value is not valid.",
"input_error_non-url-encode": "The value may not contain special characters other than $-_.+!*'(),;@&",
- "json_no_special_first_char": "The value of '${field}' may not start with a special character.",
- "json_max_length_30": "The value of '${field}' may not be more than 30 characters in length.",
- "json_max_length_64": "The value of '${field}' may not be more than 64 characters in length.",
- "json_no_leading_whitespace": "The value of '${field}' may not start with a whitespace character.",
- "json_no_trailing_whitespace": "The value of '${field}' may not end with a whitespace character.",
- "json_non_whitespace": "The value of '${field}' must contain a non-whitespace character.",
- "json_non_numeric": "The value of '${field}' is not valid.",
+ "json_no_special_first_char": "The value of '{{field}}' may not start with a special character.",
+ "json_max_length_30": "The value of '{{field}}' may not be more than 30 characters in length.",
+ "json_max_length_64": "The value of '{{field}}' may not be more than 64 characters in length.",
+ "json_no_leading_whitespace": "The value of '{{field}}' may not start with a whitespace character.",
+ "json_no_trailing_whitespace": "The value of '{{field}}' may not end with a whitespace character.",
+ "json_non_whitespace": "The value of '{{field}}' must contain a non-whitespace character.",
+ "json_non_numeric": "The value of '{{field}}' is not valid.",
"error_join_channel_not_found": "The channel was not found.",
"update_orderer": "Update ordering service",
"update_orderer_node": "Update ordering node",
@@ -1267,10 +1334,10 @@
"ca_admin_enroll_secret": "CA administrator enroll secret",
"ca_admin_enroll_secret_placeholder": "Enter enroll secret",
"associated_identity": "Associated identity",
- "console_identities_docs": "${DOC_PREFIX}?topic=console-creating-managing-identities",
- "smart_contracts_docs": "${DOC_PREFIX}?topic=contracts-deploy-smart-fabric-v2x",
- "upgrade_smart_contract_docs": "${DOC_PREFIX}?topic=applications-writing-powerful-smart-contracts",
- "instantiate_smart_contract_docs": "${DOC_PREFIX}?topic=applications-writing-powerful-smart-contracts",
+ "console_identities_docs": "{{DOC_PREFIX}}?topic=console-creating-managing-identities",
+ "smart_contracts_docs": "{{DOC_PREFIX}}?topic=contracts-deploy-smart-fabric-v2x",
+ "upgrade_smart_contract_docs": "{{DOC_PREFIX}}?topic=applications-writing-powerful-smart-contracts",
+ "instantiate_smart_contract_docs": "{{DOC_PREFIX}}?topic=applications-writing-powerful-smart-contracts",
"orderer_admins_tooltip": "The list of the MSP IDs of the organizations that are authorized to update the configuration of this ordering node.",
"orderer_members_tooltip": "The list of MSP IDs that can be added to the channels that are managed by this ordering node.",
"buildNetwork": "Build a network",
@@ -1290,8 +1357,8 @@
"json_upload_tooltip": "Updating an MSP allows a channel member to change their name of the MSP, root certificate (from the root CA), and the certificate representing the organization's admin",
"update_channel_msp_desc": "The definition of an organization, as expressed through the MSP, can be updated by uploading a new definition.",
"no_msp_changes": "An MSP definition can only be updated if there are changes to the definition.",
- "msp_def_updated": "The MSP definition for ${msp_name} has been updated successfully.",
- "orderer_msp_def_update_proposed": "The proposal for updating MSP definition for ${msp_name} has been submitted successfully.",
+ "msp_def_updated": "The MSP definition for {{msp_name}} has been updated successfully.",
+ "orderer_msp_def_update_proposed": "The proposal for updating MSP definition for {{msp_name}} has been submitted successfully.",
"invalid_json": "The uploaded MSP definition is not valid.",
"select_new_def": "Select new definition",
"select_new_def_desc": "Select an existing organization MSP ID from this console or upload a new one by updating the JSON of an MSP file you've exported.",
@@ -1312,21 +1379,21 @@
"advanced_config": "Advanced channel configuration",
"absolute_max_bytes": "Absolute max bytes",
"absolute_max_bytes_placeholder": "e.g., 10485760",
- "absolute_max_bytes_tooltip": "The maximum size of any block. This value must be less than ${absolute_max_bytes_max}.",
- "absolute_max_bytes_validation_error": "The Absolute max bytes must be less than ${absolute_max_bytes_max}",
+ "absolute_max_bytes_tooltip": "The maximum size of any block. This value must be less than {{absolute_max_bytes_max}}.",
+ "absolute_max_bytes_validation_error": "The Absolute max bytes must be less than {{absolute_max_bytes_max}}",
"block_params_warning": "When you modify these parameters, you do not affect the behavior of existing channels on the ordering service; rather, any changes you make to the configuration of the ordering service apply only to new channels you create that use this ordering service.",
"max_message_count": "Max message count",
"max_message_count_placeholder": "e.g., 500",
- "max_message_count_tooltip": "The maximum number of transactions that can exist in a block before a new block is cut. This must be numeric value between ${max_message_count_min} and ${max_message_count_max}.",
- "max_message_count_validation_error": "The Maximum message count must be numeric value between ${max_message_count_min} and ${max_message_count_max}",
+ "max_message_count_tooltip": "The maximum number of transactions that can exist in a block before a new block is cut. This must be numeric value between {{max_message_count_min}} and {{max_message_count_max}}.",
+ "max_message_count_validation_error": "The Maximum message count must be numeric value between {{max_message_count_min}} and {{max_message_count_max}}",
"preferred_max_bytes": "Preferred max bytes",
"preferred_max_bytes_placeholder": "e.g.,2097152",
"preferred_max_bytes_tooltip": "The preferred block size. If it is possible to construct a block under this size, then a block will be cut, and transactions larger than this size will appear in their own block. Generally, this value should be equivalent to the maximum message count * expected transaction size.",
- "preferred_max_bytes_validation_error": "The preferred max bytes must be between ${preferred_max_bytes_min} and ${preferred_max_bytes_max}",
+ "preferred_max_bytes_validation_error": "The preferred max bytes must be between {{preferred_max_bytes_min}} and {{preferred_max_bytes_max}}",
"timeout": "Timeout",
"timeout_placeholder": "e.g., 2s",
- "timeout_tooltip": "Decreasing this value will improve latency, but decreasing it too much may decrease throughput by not allowing the block to fill to its maximum capacity. The value of the timeout must be between ${timeout_min} to ${timeout_max}.",
- "timeout_validation_error": "The timeout must be between ${timeout_min} to ${timeout_max}.",
+ "timeout_tooltip": "Decreasing this value will improve latency, but decreasing it too much may decrease throughput by not allowing the block to fill to its maximum capacity. The value of the timeout must be between {{timeout_min}} to {{timeout_max}}.",
+ "timeout_validation_error": "The timeout must be between {{timeout_min}} to {{timeout_max}}.",
"update_config": "Update channel configuration",
"error_updating_block_params": "An error occurred when updating the block parameters",
"third_party_ca": "Use your own CA certificate and private key",
@@ -1343,7 +1410,7 @@
"third_party_orderer_tls_cert_tooltip": "Upload a a file that contains the public signing certificate created by your external TLS CA that will be used by this ordering service. The certificate can be in PEM format or base64 encoded.",
"third_party_tls_root_tooltip": "(Optional) Upload a file that contains the root certificate of your external TLS CA. You must provide either a TLS CA certificate or a TLS intermediate CA certificate. The certificate can be in PEM format or base64 encoded.",
"third_party_tls_intermediate_tooltip": "(Optional) If you are using an intermediate TLS CA, upload a file that contains the intermediate TLS certificate from your intermediate TLS CA. You must provide either a TLS CA certificate or an intermediate TLS CA certificate. The certificate can be in PEM format or base64 encoded.",
- "third_party_ca_docs": "${DOC_PREFIX}?topic=ha-building-high-availability-certificate-authority-ca",
+ "third_party_ca_docs": "{{DOC_PREFIX}}?topic=ha-building-high-availability-certificate-authority-ca",
"tls_root_or_intermediate_required": "Either the TSL root certificate or TSL intermediate certificate must be provided.",
"peer_identity": "Associated identity for peer",
"peer_organization": "Peer organization",
@@ -1358,7 +1425,7 @@
"tls_intermediate_certificate": "TLS intermediate certificate",
"pending_channel_message": "Pending Channel - join a peer",
"pending_channel_message_orderer": "Pending Channel - join an orderer",
- "archived_channel_message_orderer": "Joined Channel - ${DATE}",
+ "archived_channel_message_orderer": "Joined Channel - {{date}}",
"browse_channels_tab": "Browse Orderer Channels",
"export": "Export",
"third_party_ca_peer_header": "Use this panel to upload files that contain the certificates for your peer that were obtained from the CA that is not managed by this console. Then select the organization that this peer belongs to from the list of MSPs.",
@@ -1368,7 +1435,7 @@
"identity_orderer_error": "An identity has not been associated with this ordering service",
"third_party_ca_peer_warning": "Before proceeding, you must define an organization for this peer by building an MSP definition file that includes certificates from the external CA and then import that file into the Organizations tab.",
"third_party_ca_orderer_warning": "Before proceeding, you must define an organization for this ordering service by building an MSP definition file that includes certificates from the external CA and then import that file into the Organizations tab.",
- "_THIRD_PARTY_CA_LINK": "${DOC_PREFIX}?topic=ha-building-high-availability-certificate-authority-ca",
+ "_THIRD_PARTY_CA_LINK": "{{DOC_PREFIX}}?topic=ha-building-high-availability-certificate-authority-ca",
"product_label_notes": "Fabric Operations Console release notes",
"released": "Released: ",
"patch_available": "Upgrade available",
@@ -1376,25 +1443,27 @@
"patch_fabric_version": "Upgrade Fabric version",
"choose_a_fabric_version": "Select a Fabric version",
"one_node_down": "One of the orderer nodes is down. Ensure that all nodes are running before proceeding with upgrade. Otherwise you might lose quorum.",
- "down_node": "${node} is down. Ensure that the node is running before proceeding with upgrade. Otherwise you might lose quorum.",
- "down_nodes": "${node} are down. Ensure that all nodes are running before proceeding with upgrade. Otherwise you might lose quorum.",
+ "down_node": "{{node}} is down. Ensure that the node is running before proceeding with upgrade. Otherwise you might lose quorum.",
+ "down_nodes": "{{node}} are down. Ensure that all nodes are running before proceeding with upgrade. Otherwise you might lose quorum.",
"fabric_version_ca_tooltip": "It is recommended to deploy a node using the highest available Fabric version. This will ensure that you have access to the latest Fabric fixes and features.",
"fabric_version_orderer_tooltip": "It is recommended to deploy a node using the highest available Fabric version. This will ensure that you have access to the latest Fabric fixes and features.",
"fabric_version_peer_tooltip": "It is recommended to deploy a node using the highest available Fabric version. This will ensure that you have access to the latest Fabric fixes and features. Nodes at different Fabric versions are compatible with each other.",
- "upgrade_node_desc": "This action will upgrade ${name} to the selected Fabric version. You cannot roll back the upgrade after it has been applied.",
+ "upgrade_node_desc": "This action will upgrade {{name}} to the selected Fabric version. You cannot roll back the upgrade after it has been applied.",
"fabric_node_to_be_updated": "Fabric node to be updated",
"new_version": "Upgrade to",
"view_release_notes": "View Release notes",
- "release_notes_docs": "${DOC_PREFIX}?topic=253-whats-new",
+ "release_notes_docs": "{{DOC_PREFIX}}?topic=253-whats-new",
"node_unavailable_during_upgrade_title": "Node unavailable during upgrade",
"node_unavailable_during_upgrade_desc": "The node is not able to process transactions during the upgrade. To avoid disruptions to your network, it is recommended to have another node available to respond to transactions or requests.",
"peer_v1_v2_upgrade_title": "Peer state database warning",
"peer_v1_v2_upgrade": "This action requires the peer to rebuild the state database for each channel it has joined. This can take a significant amount of time to complete depending on the block height of each channel.",
"peer_v1_v2_upgrade_long": "This action requires the peer to rebuild the state database for each channel it has joined. This can take a significant amount of time to complete depending on the block height of each channel.",
- "confirm_patch_desc": "This action cannot be undone. This will permanently upgrade ${name} to version ${version}. This will stop any transactions during the upgrade, which can take up to a minute to complete.",
+ "confirm_patch_desc": "This action cannot be undone. This will permanently upgrade {{name}} to version {{version}}. This will stop any transactions during the upgrade, which can take up to a minute to complete.",
"peer_breaking_upgrade_title": "Breaking upgrade",
- "peer_breaking_upgrade2.2": "This introduces breaking changes to Node.js chaincode. Update any node chaincode before upgrading your peer to v2.4.",
- "peer_breaking_upgrade": "This introduces breaking changes to Node.js chaincode. First upgrade to v2.2. Then update any node chaincode before upgrading your peer to v2.4.",
+ "peer_breaking_title": "Version Warning",
+ "peer_breaking_upgrade": "The selected peer version is not always compatible with Node.js v8 chaincode (which was often used by Fabric v1.4). You should first upgrade to a peer that is compatible (such as v2.2.10). After updating your peer, update any node chaincode to be compatible with Node.js v16. Then you may upgrade your peer to the selected version.",
+ "peer_breaking_upgrade_2": "The selected peer version is not compatible with Node.js v8 chaincode. You should first update all node chaincode to be compatible with Node.js v16. Then you may upgrade your peer to the selected version.",
+ "peer_breaking": "The selected peer version is not always compatible with Node.js v8 chaincode (which was often used by Fabric v1.4). It's recommended to use a version that is compatible (such as v2.2.10). This warning can be ignored if all node chaincode is compatible with Node.js v16.",
"breaking_link_text": "Fabric documentation details",
"ignore_breaking_txt": "I understand this is a potentially breaking change. Upgrade anyway.",
"confirm_upgrade_node_name": "Node to be upgraded",
@@ -1402,11 +1471,12 @@
"identity_and_access_management": "Identity and Access Management (IAM)",
"administrator_contact": "Contact email",
"administrator_contact_desc": "This panel displays the email address of the console administrator. All new login requests are sent to this id.",
- "access_iam_title": "Access controlled by Identity and Access Management (IAM)",
+ "access_iam_title": "Access controlled by \nIdentity and Access Management (IAM)",
"access_iam_desc": "Use IAM within IBM Cloud to grant new users access to this Fabric Operations Console.",
- "iam_invite_users": "${BMIX_HOST}/iam#/users",
+ "iam_invite_users": "{{BMIX_HOST}}/iam#/users",
"iam_assign_access": "Assign access in IAM",
- "update_configuration": "Update configuration",
+ "update_configuration": "Update authentication settings",
+ "password_invalid": "Password is not valid.",
"admin_details": "Administrator details",
"empty_transactions_title": "No transactions yet.",
"error_getting_templates": "An error occurred while getting templates.",
@@ -1415,27 +1485,33 @@
"empty_templates_title": "No templates available",
"empty_templates_text": "Empty templates text goes here.",
"enroll_ids": "Enroll identities",
- "template_started": "Template '${name}' submitted.",
- "template_failed": "Template '${name}' failed.",
- "template_complete": "Template '${name}' complete.",
+ "template_started": "Template '{{name}}' submitted.",
+ "template_failed": "Template '{{name}}' failed.",
+ "template_complete": "Template '{{name}}' complete.",
"import_complete": "Identities imported.",
"import_failed": "Identities not imported.",
"manager": "Manager",
- "specify_email_address": "Enter at least one user email address",
+ "specify_email_address": "Enter at least one username",
"specify_user_ids": "User IDs",
"specify_roles": "Roles",
- "manager_role_desc": "Users with the manager role have all reader and writer permissions and can also add and remove users access to the console as well as configure the logging levels.",
- "writer_role_desc": "Users with the writer role have all the reader permissions and you can also deploy, delete, import, and export components. You can also register new users on a CA.",
- "reader_role_desc": "Users with the reader role can view the console UI and logs and can export components from the console.",
- "user_email_address_tooltip": "You may enter several email addresses here",
+ "manager_role_desc": "The manager role has all the reader and writer permissions. They can also add/remove user access to the console, and edit other console settings.",
+ "writer_role_desc": "The writer role has all the reader permissions. They can also deploy, delete, import, export, and configure components (CA's, peers, and orderers). They can also create, delete and enroll identities on CAs.",
+ "reader_role_desc": "The reader role can view the console UI, view the channel and ledger information, and can export components (CA's, peers, and orderers).",
+ "user_email_address_tooltip": "You may enter several usernames separated with a comma",
"user_ids_tooltip": "Enter any string.",
- "user_role_tooltip": "All of the email addresses entered above will have the role chosen here. If you wish to give different users different roles, you will have to invite each batch of users separately.",
- "userEmail": "Email address",
+ "user_role_tooltip": "All of the usernames entered above will have the role chosen here. If you wish to give different users different roles, you will have to invite each batch of users separately.",
+ "edit_user_role_tooltip": "Pick the roles this user should have.",
+ "apikey_role_tooltip": "Pick the roles this key should have.",
+ "userEmail": "Username",
"userEmail_placeholder": "",
- "update_role": "Update role",
- "user_update_successful": "Role for ${email} updated successfully.",
+ "pending_user_icon_txt": "New",
+ "current_user_icon_txt": "You",
+ "pending_user_title": "Users with the *New* label cannot view the console yet, but they were able to login with your external OAuth2 service. You may delete their request (trash bin icon), or assign them a role to grant them access.",
+ "update_role": "Edit roles of user",
+ "user_update_successful": "Role for {{email}} updated successfully.",
"error_user_role_edit": "An error occurred while updating the user role.",
"error_add_users": "An error occurred while adding new users.",
+ "error_add_apikey": "An error occurred while adding the new api key.",
"certificate_Authority_node_title": "Certificate Authority (CA)",
"ca_identity_tls": "Associated identity for TLS CA",
"ca_identity_root": "Associated identity for root CA",
@@ -1452,6 +1528,8 @@
"status_pending": "Status pending",
"no_identity_associated": "No identity associated",
"details": "Details",
+ "comp_settings_desc": "View component settings",
+ "comp_export_desc": "Export the component",
"resource_allocation": "Resource allocation",
"allocation": "Allocation",
"reallocate": "Reallocate",
@@ -1493,12 +1571,12 @@
"orderer_storage_warning": "Storage can only be set during the creation of an ordering service. Please plan around this when sizing below.",
"peer_storage_warning": "Storage can only be set during the creation of a peer. Please plan around this when sizing below.",
"usage": "Usage",
- "usage_info": "Info and usage ${patch}",
+ "usage_info": "Info and usage {{patch}}",
"not_available_for_free_cluster": "Usage information is not available for free clusters.",
"resource_allocation_desc": "Please refer to your cluster configuration when setting these values because this console does not manage them for you.",
"import_resource_desc": "If you are uncertain what values to set, these default values are acceptable for a standard cluster. Storage on these containers cannot be adjusted after creation using this console. The CPU and memory can be adjusted at any time as long as resources exist in your cluster.",
"import_resource_desc_2": "For more information about these default values, how to resize your nodes, and details about storage check out our [[documentation]](_RESOURCES_LINK).",
- "_RESOURCES_LINK": "${DOC_PREFIX}?ibp-console-adv-deployment#ibp-console-adv-deployment-allocate-resources",
+ "_RESOURCES_LINK": "{{DOC_PREFIX}}?ibp-console-adv-deployment#ibp-console-adv-deployment-allocate-resources",
"cpu_in_cpus": "CPU (in CPUs)",
"memory_in_mb": "Memory (in megabytes)",
"storage_in_gb": "Storage (in gigabytes)",
@@ -1511,7 +1589,7 @@
"usage_not_available": "Resource allocation is not available for free clusters.",
"error_update_node": "Unable to reallocate resources.",
"estimated_vpc": "Estimated resource use",
- "vpc": "${vpc} CPU (VPC)",
+ "vpc": "{{vpc}} CPU (VPC)",
"add_peer_cost": "Add peer",
"add_ca_cost": "Add Certificate Authority",
"add_orderer_cost": "Add ordering service",
@@ -1524,8 +1602,8 @@
"install_patch": "Install update",
"view_docs": "View docs",
"no_txs": "No transactions",
- "cluster_failure_message": "There is something wrong with your cluster, \"${name}\".",
- "error_node_resource": "\"${name}\" seems to be low on resources. Please check your cluster and add more resources if necessary.",
+ "cluster_failure_message": "There is something wrong with your cluster, \"{{name}}\".",
+ "error_node_resource": "\"{{name}}\" seems to be low on resources. Please check your cluster and add more resources if necessary.",
"use_root_affil": "Use root affiliation",
"welcome_to_ibp": "Welcome to the Fabric Operations Console",
"lets_get_started": "Let's get started",
@@ -1539,36 +1617,36 @@
"notifications_filter": "Notifications filter",
"today": "Today",
"yesterday": "Yesterday",
- "signature_request_submitted_by": "Signature request submitted by ${org}",
- "signature_request_received_by": "Signature request receive by ${org}",
- "signatures_received": "${signed}/${required} signatures received",
- "orderer_signatures_received": "${signed}/${required} ordering service signatures received",
+ "signature_request_submitted_by": "Signature request from {{org}}",
+ "signature_request_received_by": "Signature request receive by {{org}}",
+ "signatures_received": "{{signed}}/{{required}} signatures received",
+ "orderer_signatures_received": "{{signed}}/{{required}} ordering service signatures received",
"audit_log": "Approval audit trail",
"audit_log_desc": "Actions taken by organizations on this approval request can be tracked here.",
"event": "Event",
"date_time": "Date/Time",
- "proposed_channel_update": "Proposed channel configuration update on ${channel}",
+ "proposed_channel_update": "Proposed channel configuration update on {{channel}}",
"view_channel_update": "View channel configuration updates",
"view_channel": "View channel information",
"signature_request_failed": "Signature request failed to send",
"signature_request_failed_list": "Signature request failed to send to the following organizations:",
"try_again": "Try again",
- "signature_request_approved": "Required approvals received for ${channel}",
+ "signature_request_approved": "Required approvals received for {{channel}}",
"review_and_update": "Review and update channel configuration",
"review_and_create": "Review and approve channel configuration",
- "audit_log_submitted": "${org} - Request submitted",
- "audit_log_signature": "${org} - Request signed",
- "audit_log_sent": "Sent to ${org}",
- "audit_log_error": "Send failed to ${org}",
+ "audit_log_submitted": "{{org}} - Request submitted",
+ "audit_log_signature": "{{org}} - Request signed",
+ "audit_log_sent": "Sent to {{org}}",
+ "audit_log_error": "Send failed to {{org}}",
"signature_request_resending": "Resending signature request",
"channel_policy_update": "Channel configuration update",
"new_channel_request": "New channel created",
- "channel_policy_update_desc": "${org} has submitted a change to the ${channel} channel. The policy to update the configuration of this channel requires ${number_of_signatures} signatures.",
- "channel_policy_update_approved": "${org} has submitted a change to the ${channel} channel.",
- "new_channel_request_desc": "${org} created a new channel: ${channel}",
- "new_channel_pending_request": "New channel request submittted",
- "new_channel_pending_request_desc": "${org} submitted request to create a new channel: ${channel} and is waiting for the orderer signature.",
- "signature_for_msp": "Signature for ${msp}:",
+ "channel_policy_update_desc": "{{org}} has submitted a change to the {{channel}} channel. The policy to update the configuration of this channel requires {{number_of_signatures}} signatures.",
+ "channel_policy_update_approved": "{{org}} has submitted a change to the {{channel}} channel.",
+ "new_channel_request_desc": "{{org}} created a new channel: {{channel}}",
+ "new_channel_pending_request": "New channel request submitted",
+ "new_channel_pending_request_desc": "{{org}} submitted request to create a new channel: {{channel}} and is waiting for the orderer signature.",
+ "signature_for_msp": "Signature for {{msp}}:",
"signature_for_msp_placeholder": "Select identity to sign with",
"signature_for_join_placeholder_no_options": "No identities belong to this cluster's MSP.",
"msps_to_sign": "Approval signatures",
@@ -1584,7 +1662,7 @@
"submit_channel_update": "Submit channel update",
"submit_channel_create": "Submit channel creation",
"error_signature_failed": "Signature failed.",
- "channel_created": "New channel ${channel} created by ${org}",
+ "channel_created": "New channel {{channel}} created by {{org}}",
"signature_for_submit_msp": "MSP",
"signature_for_submit_identity": "Identity",
"added_to_channel_policy": "Added to channel configuration",
@@ -1592,10 +1670,11 @@
"removed_from_channel_policy": "Removed from channel configuration",
"create_channel_prereq_message": "To create a channel you must first go through the process of creating an organization, which starts with the creation of a CA and an organization definition. An ordering service must also exist, and know about the peer organization attempting to create a channel, before the channel can be created.",
"update_channel_prereq_message": "To update the configuration of a channel, the policy for updating a channel configuration must be satisfied. Whatever this policy is, the organization making the request must wait until enough organizations sign the request, indicating their approval, before the new configuration can take effect.",
- "create_channel_prereq_link": "${DOC_PREFIX}?ibp-console-build-network#ibp-console-build-network-create-channel",
- "update_channel_prereq_link": "${DOC_PREFIX}?ibp-console-govern#ibp-console-govern-update-channel",
+ "create_channel_prereq_link": "{{DOC_PREFIX}}?topic=started-build-network",
+ "create_channel_link": "{{DOC_PREFIX}}?topic=started-build-network#ibm-hlfsupport-console-build-network-create-channel",
+ "update_channel_prereq_link": "{{DOC_PREFIX}}?ibp-console-govern#ibp-console-govern-update-channel",
"create_channel_org_message": "Organizations will not receive a message informing them that they have been added to a channel. They will need to be sent the name of the channel out of band so they can join a peer to the channel.",
- "create_channel_org_link": "${DOC_PREFIX}?ibp-console-build-network#ibp-console-build-network-add-org",
+ "create_channel_org_link": "{{DOC_PREFIX}}?ibp-console-build-network#ibp-console-build-network-add-org",
"permissions": "Permissions",
"channel_update_policy": "Update policy",
"channel_update_policy_desc": "Specify the number of channel admins, out of the total number in the channel, who have to sign off on future updates to the channel configuration.",
@@ -1607,7 +1686,7 @@
"majority": "Majority",
"specific": "Specific",
"customPolicy": "Policy",
- "channel_specific_policy": "${count} out of ${total}",
+ "channel_specific_policy": "{{count}} out of {{total}}",
"block_cutting_params": "Block cutting parameters",
"default_parameters": "Update block parameters",
"sign_request": "Sign the request",
@@ -1622,9 +1701,9 @@
"orderer_msp_tooltip": "If you are modifying any ordering service parameters, you will need to select the MSP of an ordering service organization.",
"capabilities_orderer_msp_tooltip": "Ordering service admins will be prompted with this field if a proposed channel configuration update requires their signature. For example, an attempt to change the \"channel\" capability level.",
"select_identity": "Select an identity",
- "missing_msp_definition": "MSP definitions not found for ${list_of_msps}.",
+ "missing_msp_definition": "MSP definitions not found for {{list_of_msps}}.",
"missing_msp_definition_desc": "Please import the MSP definition in your console before updating the channel.",
- "missing_orderer_msp_definition": "MSP definition not found for ordering service ${orderer_name}. Please import the MSP definition in your console before updating the channel.",
+ "missing_orderer_msp_definition": "MSP definition not found for ordering service {{orderer_name}}. Please import the MSP definition in your console before updating the channel.",
"send_proposal": "Send proposal",
"acl_resource_tooltip": "The resource that access is being changed for.",
"acl_policy_tooltip": "This defines the channel member, whether an application or one of the organizations that are part of the channel, who will have access to the resource changed.",
@@ -1643,7 +1722,7 @@
"reset_password": "Reset password",
"reset_email": "Email",
"reset_email_placeholder": "Enter email of the user",
- "reset_password_successful": "Password for '${user}' was reset to the default password.",
+ "reset_password_successful": "Password for '{{user}}' was reset to the default password.",
"reset_password_failed": "Password reset failed.",
"change_password": "Change password",
"change_password_successful": "Password changed successfully.",
@@ -1686,7 +1765,7 @@
"ibp_beta_close_date": "August 3rd, 2019",
"learn_more_about_ga": "Learn more about how to get the GA product",
"product_label_login": "Login to Fabric Operations Console",
- "login_unauthorized_error_message": "Incorrect credentials, please try again. Forgot your password? Contact admin to reset your password.",
+ "login_unauthorized_error_message": "Incorrect credentials, please try again. \nForgot your password? Contact admin to reset your password.",
"login_generic_error_message": "An error occurred when attempting to login.",
"login_too_many_attempts_error_message": "Too many failed attempts. Please wait for a minute before trying again.",
"confirm_password_label": "Confirm new password",
@@ -1703,11 +1782,31 @@
"select_ca_default": "Select CA",
"audit_trail": "Audit trail",
"couchdb": "CouchDB",
- "reset_password_desc": "Use this panel to reset the password for the selected user ID to the default password shown below. You will need to send this default password to the user. They will be able to change their password on their first login",
+ "reset_password_desc": "Use this panel to reset the password for the selected user to the default password. You will need to communicate the default password to the user. They will be asked to change their password on their first login.",
+ "default_password_desc": "If you do not remember the default password, it can be changed by closing this panel and clicking the gear icon on the \"CouchDB\" tile.",
"username": "User ID",
+ "username_label": "Username",
+ "access_not_a_manager": "Contact a user with the \"Manager\" role to modify authentication and authorization settings.",
"defaultPassword": "Default password",
"defaultPassword_placeholder": "Default password",
"change_password_desc": "After you click change password you will be logged out and you will have to login with your new password.",
+ "apikey_description_label": "Name",
+ "apikey_label": "API key",
+ "api_secret_label": "API secret",
+ "apikey_name_label": "API key name",
+ "apikey_name_tooltip": "Enter a brief name or description of this key.",
+ "add_new_apikey": "Create an API key",
+ "edit_apikey_header": "Edit API key role",
+ "delete_access": "Delete access",
+ "api_key_warning_txt": "Every API key will also have an \"api_secret\". These secrets are unrecoverable and cannot be shown after creation. If a secret was forgotten, delete the api key and make a new one.",
+ "api_secret_reveal_txt1": "Below is your new API key and secret.",
+ "api_secret_reveal_txt2": "You must save the API secret in a safe space. It cannot be recovered or shown to you again.",
+ "login_req_header": "Login required",
+ "login_required_txt1": "Your new auth settings will revert if you are unable to login within 2 minutes.",
+ "login_required_txt2": "Please logout with the button below and then log back in to keep these settings.",
+ "logout_header": "Success",
+ "logout_required_txt1": "Your new auth settings are saved.",
+ "logout_required_txt2": "Please logout with the button below and then log back in using the default password.",
"grpcwp_url": "gRPC web proxy url",
"raft_orderer_desc": "The ordering service performs important transaction validation checks and is where channels are hosted. Until you deploy or can connect to an ordering service, you cannot create a channel.",
"external_ca_desc": "If you want to use certificates issued by a Certificate Authority not created using this console, you will have to upload a JSON file containing those certificates.",
@@ -1719,7 +1818,7 @@
"ordering_node_prefix": "Ordering node display name prefix",
"multi_node_external_ca": "Because you have chosen to use certificates from an external CA, use this panel to specify the certificates to use for each ordering node.",
"multi_node_external_important": "You need to provide a single JSON file that contains all the certificates from an external CA for each ordering node. Click Add file to upload that file here.",
- "MULTI_NODE_EXTERNAL_CA_LINK": "${DOC_PREFIX}?topic=ha-building-high-availability-certificate-authority-ca",
+ "MULTI_NODE_EXTERNAL_CA_LINK": "{{DOC_PREFIX}}?topic=ha-building-high-availability-certificate-authority-ca",
"running_in_cluster": "Running in cluster",
"ordering_nodes": "Ordering nodes",
"ordering_node": "Ordering node",
@@ -1727,13 +1826,8 @@
"upload_external": "Upload file containing certificates for ordering nodes",
"error_external_ca_array": "The definition is not an array",
"error_external_ca_array_size": "The definition array is an incorrect length",
- "local": "Local",
- "default_password": "Default password for new users",
- "default_password_placeholder": "Enter default password",
- "default_password_tooltip": "Share this password with each new user so that they can login to the console. They will be required to change it the first time they log in.",
- "confirm_default_password": "Default password for new users",
- "error_default_password_edit": "An error occurred while updating the default password.",
"understand": "Understand",
+ "i_understand": "I understand",
"typical_arch": "Typical architecture",
"arch_desc": "See how the Fabric Operations Console fits together",
"fluentd_container": "Log Collector",
@@ -1756,7 +1850,7 @@
"too_many_requests": "Server is currently processing your request, please wait.",
"orderer_unavailable_title": "The selected orderer is unavailable.",
"orderer_unavailable_desc": "If it has just been deployed, you may need to wait a few minutes and retry again after the provisioning completes.",
- "import_msp_admin_identity_link": "${DOC_PREFIX}?topic=console-importing-nodes-msps-identities",
+ "import_msp_admin_identity_link": "{{DOC_PREFIX}}?topic=console-importing-nodes-msps-identities",
"select_peer": "Select peer",
"select_peer_desc_instantiate": "Select the peer to approve proposals for instantiating the smart contract.",
"select_peer_desc_upgrade": "Select the peer to approve proposals for upgrading the smart contract.",
@@ -1767,11 +1861,11 @@
"404_desc_2": "Unfortunately, we could not find that page. Here are some helpful pages instead.",
"audit_list": "Audit list",
"please_note": "Please note",
- "console_update_msp_docs": "${DOC_PREFIX}?topic=console-importing-nodes-msps-identities",
+ "console_update_msp_docs": "{{DOC_PREFIX}}?topic=console-importing-nodes-msps-identities",
"adv_policy_json": "Advanced policy json",
- "still_loading_peer": "Still loading information from ${peerName}, please wait...",
- "success_loading_peer": "Successfully loaded ${peerName}",
- "missing_cert": "The admin identity for ${peerName} is missing from your wallet in this browser. Open the peer and ensure the admin identity has been associated.",
+ "still_loading_peer": "Still loading information from {{peerName}}, please wait...",
+ "success_loading_peer": "Successfully loaded {{peerName}}",
+ "missing_cert": "The admin identity for {{peerName}} is missing from your wallet in this browser. Open the peer and ensure the admin identity has been associated.",
"deploy": "Deploy",
"deploy_a_template": "Deploy a starter kit",
"deploy_desc": "Deploy a bundle of Hyperledger Fabric components automatically",
@@ -1802,36 +1896,40 @@
"export_cert_as_pem": "Export certificate as .pem file",
"export_private_key_as_pem": "Export private key as .pem file",
"logout_successful": "Logout Successful",
- "logout_modal": "You have been logged out. If you would like to log back in, click here.",
+ "logout_modal": "You have been logged out. If you would like to log back in, click here.",
"error_log_settings_server_restart": "Server is restarting. Please wait a few moments before attempting to change log settings.",
"authenticated_users_tooltip_ibp": "Click the Assign access in IAM button to add users to this console and edit their permissions.",
"authenticated_users_tooltip_icp": "This table contains the list of users who have access to this console and their permission level.",
- "authentication_services_tooltip_ibp": "You can use IBM Cloud Identity and Access Management (IAM) to add users to this console and grant users permission to operate blockchain components.",
- "authentication_services_tooltip_icp": "The authorization information of users who have access to this console is stored in an instance of couchDB that was deployed on your local cluster.",
- "_PDC_DOC_LINK": "${DOC_PREFIX}?ibp-console-smart-contracts#ibp-console-smart-contracts-private-data",
+ "authentication_services_tooltip_ibp": "You can use IBM Cloud Identity and Access Management (IAM) to add/remove users to this console.",
+ "authorize_services_tooltip_ibp": "You can use IBM Cloud Identity and Access Management (IAM) grant users permission to the console.",
+ "authentication_services_tooltip_oauth": "You can add/remove users to this console by contacting the administrator of your OAuth2.0 service.",
+ "authorize_services_tooltip_oauth": "You can grant users permission to the console by using the table below.",
+ "authentication_services_tooltip_local": "User login is handled by referencing local usernames/passwords stored securely in the console's CouchDB database. You can add users by using the blue button below.",
+ "authorize_services_tooltip_local": "You can grant users permission to the console by using the table below.",
+ "_PDC_DOC_LINK": "{{DOC_PREFIX}}?ibp-console-smart-contracts#ibp-console-smart-contracts-private-data",
"pdc_important_note": "For more information on how to configure private data, please visit the link below.",
"session_timeout_label": "Your session is now inactive",
- "session_timeout_message": "Your browser session has become inactive after ${timeout} of no activity. Refresh your browser by clicking Refresh to start a new session. You can amend the timeout duration from the Settings page.",
+ "session_timeout_message": "Your browser session has become inactive after {{timeout}} of no activity. Refresh your browser by clicking Refresh to start a new session. You can amend the timeout duration from the Settings page.",
"refresh": "Refresh",
"learn_more": "Learn More",
"friendly_ms_unknown": "? seconds",
- "friendly_ms_ms": "${millisecs} ms",
- "friendly_ms_secs": "${seconds} seconds",
- "friendly_ms_mins": "${minutes} minutes",
- "friendly_ms_hrs": "${hours} hours",
- "friendly_ms_days": "${days} days",
- "friendly_ms_months": "${months} months",
- "friendly_ms_years": "${years} years",
+ "friendly_ms_ms": "{{millisecs}} ms",
+ "friendly_ms_secs": "{{seconds}} seconds",
+ "friendly_ms_mins": "{{minutes}} minutes",
+ "friendly_ms_hrs": "{{hours}} hours",
+ "friendly_ms_days": "{{days}} days",
+ "friendly_ms_months": "{{months}} months",
+ "friendly_ms_years": "{{years}} years",
"friendly_ms_unknown_ago": "? seconds ago",
"friendly_ms_ms_ago": "a few seconds ago",
- "friendly_ms_secs_ago": "${seconds} seconds ago",
- "friendly_ms_mins_ago": "${minutes} minutes ago",
- "friendly_ms_hrs_ago": "${hours} hours ago",
- "friendly_ms_months_ago": "${months} months ago",
- "friendly_ms_days_ago": "${days} days ago",
- "friendly_ms_years_ago": "${years} years ago",
+ "friendly_ms_secs_ago": "{{seconds}} seconds ago",
+ "friendly_ms_mins_ago": "{{minutes}} minutes ago",
+ "friendly_ms_hrs_ago": "{{hours}} hours ago",
+ "friendly_ms_months_ago": "{{months}} months ago",
+ "friendly_ms_days_ago": "{{days}} days ago",
+ "friendly_ms_years_ago": "{{years}} years ago",
"session_warning_label": "Your session will expire soon",
- "session_warning_message": "Your session will expire in ${idle_time_remaining}. Use the page to reset the timer.",
+ "session_warning_message": "Your session will expire in {{idle_time_remaining}}. Use the page to reset the timer.",
"user_inactivity_settings": "Session timeout",
"user_inactivity_tooltip": "Enable this setting if you want user console sessions to timeout and to specify how long a session can be inactive before it times out. When their session times out due to inactivity, users receive a notification and can click Refresh to start a new session.",
"inactivity_timeout": "Enable session timeout",
@@ -1840,14 +1938,13 @@
"max_idle_time": "Session timeout (in seconds)",
"max_idle_time_tooltip": "Session timeout must be at least 60 seconds and no longer than 8 hours (28800 seconds)",
"max_idle_time_success": "Session timeout settings have been updated. Refresh the page for the settings to take effect.",
- "user_roles_find_more": "Find out more about user roles",
- "user_roles_find_more_link": "${DOC_PREFIX}?console-icp-manage#console-icp-manage-users",
+ "access_doc_links": "Visit our documentation to find more details on user [[roles]](https://www.ibm.com/docs/en/hlf-support/1.0.0?topic=console-administering-your#console-icp-manage-users) and [[API keys]](https://www.ibm.com/docs/en/hlf-support/1.0.0?topic=console-administering-your#console-icp-manage-api-key).",
"choose_peers_tooltip": "Only peers in running status can be selected",
"channel_capabilities": "Channel capabilities",
"channel_capabilities_desc1": "Every channel has three levels of capabilities to ensure that tasks are handled deterministically: one for the ordering service, one for transactions between peers, and \"channel\" capabilities for shared tasks.",
"create_channel_capabilities_desc2": "During channel creation, it is only possible to modify application level capabilities. The ordering service and channel capabilities are inherited from the ordering system channel and can only be modified through a channel configuration update, which will require the signature of an ordering service admin.",
"channel_capabilities_desc3": "Note that in order to use the latest features, it may be necessary to set the latest level of capabilities. For more information about capabilities, [[click here]](_CAPABILITIES_LINK01).",
- "channel_warning_20": "There are some nodes in the cluster that are not Fabric 2.x. Ensure that all nodes are updated to 2.x before updating capabilities.",
+ "channel_warning_20": "There are some nodes in the cluster that are not Fabric v2.x. Ensure that all nodes are updated to v2.x before updating capabilities.",
"_CAPABILITIES_LINK01": "https://hyperledger-fabric.readthedocs.io/en/release-2.4/capabilities_concept.html",
"update_channel_capabilities_desc2": "With the exception of the application capabilities, which under certain circumstances can be set during channel creation, these capability levels are inherited by default from the ordering system channel.",
"create_channel_capabilities_important_box": "It is considered a best practice to upgrade your peers to the latest release. This is because a peer that is below the level of either the application or channel capability will crash upon attempting to join the channel and will have to be upgraded. While the application capability can be set here, you must contact an ordering service admin to learn the channel capability level before attempting to join a peer to the channel.",
@@ -1869,7 +1966,8 @@
"system_channel_orderer_capability_tooltip": "The capability level for the orderer cluster, defining how the ordering service processes transactions. It is recommended to choose the latest available capability level. Similarly, it is recommended to have ordering nodes at the latest possible Fabric level.",
"system_channel_channel_capability_tooltip": "The capability level for the channel group, encompassing processes shared by the ordering service and the peers. It is recommended to choose the latest available capability level. Similarly, it is recommended to have ordering nodes and peers at the latest possible Fabric level.",
"system_channel_capabilities_warning": "Before updating capabilities, contact the consortium members to ensure that nodes owned by them are compatible with these capabilities.",
- "troubleshooting_link": "${DOC_PREFIX}?topic=help-troubleshooting",
+ "troubleshooting_link": "https://www.ibm.com/docs/en/hlf-support/1.0.0?topic=tutorials-getting-started",
+ "hlfoc_doc_link": "https://github.com/hyperledger-labs/fabric-operations-console",
"arrowLeft": "Arrow left",
"arrowRight": "Arrow right",
"arrowUp": "Arrow up",
@@ -1926,17 +2024,17 @@
"orderer_zones_tooltip": "If a node is intended to be a backup to a node that you have already deployed, ensure you choose a different zone than where that node was deployed.",
"default_zone": "Choose a zone for me",
"default_zones": "Choose zones for me",
- "orderer_node_name": "Orderer node ${index}",
- "orderer_node_summary": "Orderer node ${index} - ${zone}",
+ "orderer_node_name": "Orderer node {{index}}",
+ "orderer_node_summary": "Orderer node {{index}} - {{zone}}",
"ca_zone": "Zone",
"ca_zone_label": "Select the zone where the Certificate Authority will be deployed",
"ca_zone_tooltip": "If this node is intended to be a backup to a node that you have already deployed, ensure you choose a different zone than where that node was deployed.",
"megabyte": "MB",
"millisecond": "ms",
"smc_already_installed": "Smart contract is already installed on this peer",
- "msp_details_title": "${mspName}",
+ "msp_details_title": "{{mspName}}",
"sync_msp_definition": "Sync MSP definition to all peers",
- "error_msp_not_found": "The msp '${mspId}' was not found.",
+ "error_msp_not_found": "The msp '{{mspId}}' was not found.",
"empty_nodes_title": "No nodes available",
"empty_nodes_text": "Get started by selecting this MSP definition when you create a peer or ordering service.",
"error_occurred_during_sync_certs": "An error occurred while syncing admins certs to peers.",
@@ -1950,18 +2048,18 @@
"no_archived_notifications": "No archived notifications",
"no_archived_notifications_desc": "Archiving removes notification messages from your feed. These messages can be restored to your feed by clicking the checkbox in the right hand corner of the message and click Restore in the blue bar.",
"archive_notification_confirmation_title_inbox_single": "1 notification moved to Inbox",
- "archive_notification_confirmation_title_inbox_plural": "${count} notifications moved to Inbox",
+ "archive_notification_confirmation_title_inbox_plural": "{{count}} notifications moved to Inbox",
"archive_notification_confirmation_title_archive_single": "1 notification moved to Archive",
- "archive_notification_confirmation_title_archive_plural": "${count} notifications moved to Archive",
+ "archive_notification_confirmation_title_archive_plural": "{{count}} notifications moved to Archive",
"archive_notification_confirmation_subtitle": "Select 'Archive' from the dropdown menu to view",
"inbox_notification_confirmation_subtitle": "Select 'All' from the dropdown menu to view inbox",
- "error_archiving_notification": "There was an error with your ${visibility} request. Please try again.",
+ "error_archiving_notification": "There was an error with your {{visibility}} request. Please try again.",
"ca_no_identity": "Click the Associate identity button and select a CA admin identity. If you are operating this CA for the first time, select the CA administrator enroll ID and enter the enroll secret that you provided during deployment or select an existing identity from your Wallet.",
"peer_no_identity": "Click the Associate identity button and select an organization admin identity.",
"orderer_no_identity": "Click the Associate identity button and select an organization admin identity. If you are adding a new node to this ordering service, you do not need to associate an identity. Click the Ordering nodes tab.",
"generate_cert_ca_tooltip": "Select the if the certificate will be generated using the Root Certificate Authority or TLS Certificate Authority.",
"ca_database_desc": "Use this panel when high availability of the CA is required by configuring CA replica sets. In order to use replica sets, you must have already configured an instance of a PostgreSQL database. SQLite cannot be used for high availability. Upload a JSON file that contains the connection information for your PostgresSQL database and select the number of replica sets required. [[Find out more information here.]](_HA_CA_LINK1)",
- "_HA_CA_LINK1": "${DOC_PREFIX}?topic=ha-building-high-availability-certificate-authority-ca",
+ "_HA_CA_LINK1": "{{DOC_PREFIX}}?topic=ha-building-high-availability-certificate-authority-ca",
"ca_database": "Select database for CA to use",
"ca_database_tooltip": "Choose PostgreSQL if you plan to configure CA replica sets.",
"sqlite3": "SQLite",
@@ -2001,8 +2099,8 @@
"replica_set_cnt_tooltip": "Choose 1 replica if replication is not required at this time. Choose 2 or 3 when you need to ensure that a CA replica is always available to process requests. You can update this value later as well.",
"peer_state_database_important_note": "All peers in a channel must use the same database type. You will not be able to join a peer using a Level database to a channel where the other peers are using a Couch database, or vice versa.",
"zone_desc": "Use this panel to designate the zone where the node is deployed. When you select “Choose a zone for me”, we attempt to deploy the node in a different zone than the other nodes owned by the same organization. Alternatively, you can select a specific zone where you want to deploy the node. If your cluster has been configured with multi-zone storage, choose “Across all zones”, to ensure node availability in case of a zone failure.",
- "zone_desc_link": "${DOC_PREFIX}?topic=ha-building-high-availability-certificate-authority-ca",
- "zone_desc_link2": "${DOC_PREFIX}?topic=hah-setting-up-multiregion-high-availability-ha-deployments-peers",
+ "zone_desc_link": "{{DOC_PREFIX}}?topic=ha-building-high-availability-certificate-authority-ca",
+ "zone_desc_link2": "{{DOC_PREFIX}}?topic=hah-setting-up-multiregion-high-availability-ha-deployments-peers",
"join_peer_imp_message": "All peers in a channel must use the same database type. Therefore, take caution when choosing which peer to join to this channel, as it must have the same database type as the other peers in the channel. If you are unsure about the database type of the channel, contact the channel administrator. Note that if you did not select a database type when creating your peer, CouchDB is used.",
"upload_custom_template": "Upload custom template",
"upload_custom_template_subtext": "Drag your custom template .json file here to upload, or browse",
@@ -2015,7 +2113,7 @@
"template_secrets_note": "Please note: Secrets are used to generate identities. This service will access, but not store secrets.",
"error_unsupported_template_file_type": "Unsupported file type. Template file must be .json.",
"error_incorrect_template_json": "Incorrect template JSON.",
- "error_get_instantiated": "Error getting instantiated smart contracts on channel ${channelName} as ${peerName}",
+ "error_get_instantiated": "Error getting instantiated smart contracts on channel {{channelName}} as {{peerName}}",
"resource_estimate": "Resource estimate",
"template_starter_desc": "Perfect for getting started and learning the basics of the Fabric Operations Console. An example structure for a Blockchain network with two organizations.",
"template_dev_desc": "Replicate the same environment as the local Fabric instance within the IBM Blockchain Platform extension for VS Code.",
@@ -2023,8 +2121,8 @@
"template_information": "Template information",
"change_template": "Change template",
"custom_template_description": "Upload your custom template. To build a custom template, find out more here.",
- "join_peer_imp_link": "${DOC_PREFIX}?ibp-console-adv-deployment#ibp-console-adv-deployment-level-couch",
- "_JOIN_CHANNEL_LINK": "${DOC_PREFIX}?topic=started-join-network",
+ "join_peer_imp_link": "{{DOC_PREFIX}}?ibp-console-adv-deployment#ibp-console-adv-deployment-level-couch",
+ "_JOIN_CHANNEL_LINK": "{{DOC_PREFIX}}?topic=started-join-network",
"replica_sets_desc": "Replica sets guarantee the availability of the CA by ensuring that multiple replicas of the CA are running.",
"no_identities": "There are no applicable identities in the wallet.",
"no_ca_identities": "Please import your CA admin identity into your Wallet on the Wallet page.",
@@ -2038,10 +2136,10 @@
"consenter_empty_error": "At least one consenter is required",
"create_channel_consenter_set_desc": "The ordering nodes that form the ordering service of a channel is known as the consenter set of that channel. While the consenter set can be comprised of all of the nodes in the ordering service, it is possible to select a subset of these nodes to form the consenter set.",
"create_channel_consenter_set_desc2": "The ordering nodes that manage a channel are known as the consenter set of that channel. While the consenter set can be comprised of all of the nodes, it is possible to select a subset of these nodes to form the consenter set.",
- "osn-join-desc": "Select the ordering clusters that should join right now. The selected orderers from each selected cluster will join this channel.
Any orderers that are not selected can still join at a later date.",
- "osn-join-desc2": "Select the orderers that should join this channel. Each orderer will join as a consenter or follower depending on the channels latest config block.
Any orderers that are not selected can still join at a later date.",
+ "osn-join-desc": "Select the ordering clusters that should join right now. The selected orderers from each selected cluster will join this channel. \n\nAny orderers that are not selected can still join at a later date.",
+ "osn-join-desc2": "Select the orderers that should join this channel. Each orderer will join as a consenter or follower depending on the channels latest config block. \n\nAny orderers that are not selected can still join at a later date.",
"osn-join-desc3": "Select the \"Continue\" button if you want to join orderers now.",
- "osn-join-config-block": "Success, the genesis block for the channel \"${channel}\" was created and stored. Next join orderer nodes to this channel. You can either do that right now or on a later date.",
+ "osn-join-config-block": "Success, the genesis block for the channel \"{{channel}}\" was created and stored.\nNext join orderer nodes to this channel. You can either do that right now or on a later date.",
"osn-join-creating-block": "Creating genesis block...",
"osn-join-loading-desc": "Loading config block...",
"update_channel_consenter_set_desc": "The ordering nodes that form the ordering service of a channel is known as the consenter set of that channel. While the consenter set can be comprised of all of the nodes available in the ordering service, it is possible to add nodes that are a part of the ordering service to the consenter set. Before adding a node to the consenter set, make sure the organization that owns the node has been added as an administrator of the ordering service of this channel.",
@@ -2089,10 +2187,10 @@
"add_orderer_nodes_successful": "Ordering service nodes were added or updated",
"add_orderer_node": "Add another node",
"raft_node_desc": "If you are replacing a corrupted node or are a new organization joining a network and want to contribute a node to the ordering service to share in the management and costs associated with the ordering service, you can use this process to add a node to this ordering service. Note that you will have to complete the separate step of adding this node to the consenter set of the system channel after the deployment process has completed.",
- "raft_add_node_docs": "${DOC_PREFIX}?topic=console-adding-removing-ordering-service-nodes",
+ "raft_add_node_docs": "{{DOC_PREFIX}}?topic=console-adding-removing-ordering-service-nodes",
"remove_orderer_node": "Remove ordering node",
"delete_orderer_node": "Delete ordering node",
- "delete_orderer_node_desc": "This action will permanently delete ${name} from this ordering service and in your Kubernetes cluster.",
+ "delete_orderer_node_desc": "This action will permanently delete {{name}} from this ordering service and in your Kubernetes cluster.",
"remove_orderer_node_confirm": "Please type the name of the ordering node to confirm:",
"confirm_orderer_node_name": "Ordering node name",
"confirm_orderer_node_tooltip": "Re-enter the ordering node to confirm",
@@ -2124,7 +2222,7 @@
"ordering_node_empty_desc": "Only administrators of a node in the console where it was originally deployed can view configuration information.",
"requires_attention": "Requires attention",
"node_requires_attention": "Ordering node requires attention",
- "node_requires_attention_desc": "Your ordering node ${name} has been created but needs to be added to your ordering service. Click Go to node to finish setting up your node.",
+ "node_requires_attention_desc": "Your ordering node {{name}} has been created but needs to be added to your ordering service. Click Go to node to finish setting up your node.",
"go_to_node": "Go to node",
"database": "Database",
"time_to_network": "Time to network:",
@@ -2166,7 +2264,7 @@
"identity_desc": "The different actors in a blockchain network include peers, orderers, client applications, administrators and more. Each of these actors — active elements inside or outside a network able to consume services — has a digital identity encapsulated in an X.509 digital certificate. These identities really matter because they determine the exact permissions over resources and access to information that actors have in a blockchain network.",
"identity_desc_2": "For an identity to be verifiable, it must come from a trusted authority. This is achieved with a Membership Service Authority (MSP), which defines an organization and the root CA associated with it. MSPs also define the rules that govern which identities in the organization are valid and the role of that identity in the organization. All identities can be found in a section of the console called the 'wallet', which can be located in the left navigation. ",
"msp_desc": "On a conceptual level, a network on the Fabric Operations Console can be thought of as a collection of organizations that own and control various nodes and identities for the purpose of structuring and making transactions.",
- "msp_desc_2": "On a physical level, organizations are defined by a Membership Service Provider (MSP) which includes the root certificate of the CA issuing certificates for the entities associated with that organization, as well as the signing certificate of an admin of that organization. Organization definitions can be exported from one console into another. Organizations should be added to an ordering service, forming a consortium, the list of organizations allowed to create and join channels.",
+ "msp_desc_2": "On a physical level, organizations are defined by a Membership Service Provider (MSP) which includes the root certificate of the CA issuing certificates for the entities associated with that organization, as well as the signing certificate of an admin of that organization. Organization definitions can be exported from one console into another. Organizations should be added to an ordering service, forming a consortium, the list of organizations allowed to create and join channels.",
"what_are_applications": "What are applications?",
"application_desc": "Client applications leverage underlying infrastructures such as APIs, SDKs, and smart contracts to allow client interactions (invokes and queries) at a higher level of abstraction. After installing smart contracts and deploying your nodes, you can use client applications to transact with other members of your network. Applications can invoke the business logic contained in smart contracts to create, transfer, or update assets on the blockchain ledger.",
"template_contains": "This template contains",
@@ -2175,6 +2273,17 @@
"data_management": "Bulk data management",
"data_management_tooltip": "Used to export or import multiple nodes, MSPs, and identities at the same time.",
"export_modal_desc1": "You have the option of which components to export. Note that if you select a box, for example Peers, all of the peers will be included in the export JSON. If the console that imports these components has already imported some of the components, for example one of the peers, the additional component will show up as a duplicate.",
+ "delete_header": "Danger zone",
+ "delete_header_tooltip": "Be careful.",
+ "delete_everything": "Delete all components",
+ "delete_wallet": "Delete wallet",
+ "yes_confirmation": "Yes",
+ "confirmation_header_all": "Delete all components",
+ "confirmation_header_wallet": "Delete wallet",
+ "confirmation_desc1": "Are",
+ "confirmation_desc2": "you",
+ "confirmation_desc3": "sure",
+ "confirmation_desc4": "?",
"export_modal_desc2": "Identities are not selected by default for security reasons and because a single console does not permit more than one identity of the same name. If a duplicate identity is detected on import, the entire import will fail. Note that if identities and nodes are exported in the same JSON, the associations will also persist as part of the import. If identities are exported separately, identities will have to be associated with nodes separately.",
"export_modal_desc3": "Select which data to export:",
"export_identity_important": "Exported identities will include the private key of the identity in the export JSON. Be sure to protect this information.",
@@ -2198,8 +2307,8 @@
"subject": "Subject",
"nodes_added_successfully": "You have successfully added node(s) to the channel.",
"no_more_peers_to_join": "There are currently no more peers available to join.",
- "error_no_raft_leader": "Node deployment has not finished synchronizing with the ordering service. Please wait up to five minutes. Do not attempt any operations on this ordering service until this process is complete.",
- "add_node_to_channel_desc": "To add a peer to the ${channelName} channel, select it below. You also have the option to make this peer an Anchor peer, which is recommended if you have not yet specified an anchor peer on this channel.",
+ "error_no_raft_leader": "Node deployment has not finished synchronizing with the ordering service. Please wait up to five minutes.\n Do not attempt any operations on this ordering service until this process is complete.",
+ "add_node_to_channel_desc": "To add a peer to the {{channelName}} channel, select it below. You also have the option to make this peer an Anchor peer, which is recommended if you have not yet specified an anchor peer on this channel.",
"add_node": "Join peer",
"app_capability_version": "Application capability level",
"os_capability_version": "Ordering service capability level",
@@ -2227,7 +2336,7 @@
"enroll_cert": "Enroll certificate",
"reenroll_cert": "Re-enroll certificate",
"orderer_update_tls_cert_important_box": "After updating the TLS certificate for the ordering node, be sure to update the consenter sets for the system channel and any application channels.",
- "orderer_update_tls_cert_important_link": "${DOC_PREFIX}?cert-mgmt#cert-mgmt-enroll-tls-ordering-node",
+ "orderer_update_tls_cert_important_link": "{{DOC_PREFIX}}?cert-mgmt#cert-mgmt-enroll-tls-ordering-node",
"orderer_update_version_important_box": "The version of Fabric installed does not support enrolling or re-enrolling the TLS certificate.",
"peer_information": "Peer information",
"orderer_node_information": "Orderer node information",
@@ -2239,7 +2348,7 @@
"fabric_up_to_date": "You are up to date with the latest version of Hyperledger Fabric",
"intermediate_ca": "Intermediate CA",
"tls_intermediate_ca": "TLS Intermediate CA",
- "fabric_update_available": "Upgrade to ${upgrade_version} available",
+ "fabric_update_available": "Upgrade to {{upgrade_version}} available",
"update_version": "Upgrade version",
"hsm_desc": "Use a Hardware Security Module (HSM) to generate and store the private keys used by your Fabric nodes.",
"enable_hsm": "Enable HSM",
@@ -2263,7 +2372,7 @@
"hsm_pin_placeholder": "Eg. 9174685153",
"hsm_pkcs11endpoint_placeholder": "Eg. tcp://proxy:2345",
"hsm_important": "Before you can use an HSM with your node, you have to configure an HSM and publish an HSM client image to a container registry. The PKCS #11 proxy is deprecated.",
- "hsm_important_link": "${DOC_PREFIX}?topic=tutorials-hardware-security-module-hsm",
+ "hsm_important_link": "{{DOC_PREFIX}}?topic=tutorials-hardware-security-module-hsm",
"hsm_endpoint_tooltip": "Enter the ClusterIP address for the HSM proxy. The address must begin with tcp://",
"hsm_label_tooltip": "Enter the name of the HSM partition",
"hsm_pin_tooltip": "Enter the PIN of the HSM slot",
@@ -2276,7 +2385,8 @@
"ordering_service_organization": "Ordering service signature",
"review_channel_info": "Review channel information",
"osn_join_channel": "Create Genesis",
- "prerequisites_para1": "Each transaction on a network is executed on a channel, a private sub-network where two or more organizations can communicate and conduct transactions only the authenticated members of the channel know about. [[Find out more here]](create_channel_prereq_link).",
+ "prerequisites_para1": "Each transaction on a network is executed on a channel, a private sub-network where two or more organizations can communicate and conduct transactions only the authenticated members of the channel know about. [[For prerequisites help click here]](create_channel_prereq_link).",
+ "prerequisites_para1.5": "[[For addtional channel creation help click here]](create_channel_link)",
"prerequisites_para2": "Before creating a channel:",
"prerequisites_bullet1": "Orderers must exist",
"prerequisites_bullet2": "A peer organization must be created and joined to the consortium controlled by that ordering service",
@@ -2321,9 +2431,9 @@
"current_config_json": "Current configuration",
"config_override_json": "Configuration updates",
"config_override_delta": "Only a subset of the fields in the Current configuration can be overridden. Paste in only the fields you want to update.",
- "_LINK_CA_CONFIG_OVERRIDE_UPDATE": "${DOC_PREFIX}?ibp-console-adv-deployment#ibp-console-adv-deployment-ca-modify-json",
- "_LINK_PEER_CONFIG_OVERRIDE_UPDATE": "${DOC_PREFIX}?ibp-console-adv-deployment#ibp-console-adv-deployment-peer-modify-json",
- "_LINK_ORDERER_CONFIG_OVERRIDE_UPDATE": "${DOC_PREFIX}?ibp-console-adv-deployment#ibp-console-adv-deployment-orderer-modify-json",
+ "_LINK_CA_CONFIG_OVERRIDE_UPDATE": "{{DOC_PREFIX}}?ibp-console-adv-deployment#ibp-console-adv-deployment-ca-modify-json",
+ "_LINK_PEER_CONFIG_OVERRIDE_UPDATE": "{{DOC_PREFIX}}?ibp-console-adv-deployment#ibp-console-adv-deployment-peer-modify-json",
+ "_LINK_ORDERER_CONFIG_OVERRIDE_UPDATE": "{{DOC_PREFIX}}?ibp-console-adv-deployment#ibp-console-adv-deployment-orderer-modify-json",
"config_override_update_ca": "See [[Documentation]](_LINK_CA_CONFIG_OVERRIDE_UPDATE) for more information.",
"config_override_update_peer": "See [[Documentation]](_LINK_PEER_CONFIG_OVERRIDE_UPDATE) for more information.",
"config_override_update_orderer": "See [[Documentation]](_LINK_ORDERER_CONFIG_OVERRIDE_UPDATE) for more information.",
@@ -2342,17 +2452,18 @@
"no_msp_warning": "No MSPs available",
"select_identity_description": "Select identity to sign the request",
"msp_definition": "MSP Definition",
- "msp_definition_updates": "Orderer MSP definition updated for ${channel}, including fields: ${fields}",
+ "msp_definition_updates": "Orderer MSP definition updated for {{channel}}, including fields: {{fields}}",
"go_further": "Go further",
"api_doc_header": "API documentation",
"api_doc_desc": "Build on top of the Fabric Operations Console",
"search": "Search",
+ "find_audit_logs": "Search activity logs",
"error_component_delete_title": "Component delete failed",
- "error_component_delete": "An error occurred when deleting the component \"${id}\".",
+ "error_component_delete": "An error occurred when deleting the component \"{{id}}\".",
"error_component_removal_title": "Component removal failed",
- "error_component_removal": "Removal of the component \"${id}\" failed.",
+ "error_component_removal": "Removal of the component \"{{id}}\" failed.",
"error_tagged_component_removal_title": "Tagged component removal failed",
- "error_tagged_component_removal": "Removal of components with the tag \"${tag}\" failed.",
+ "error_tagged_component_removal": "Removal of components with the tag \"{{tag}}\" failed.",
"error_get_orderers_after_removal_title": "Could not get orderers",
"error_get_orderers_after_removal": "The list of orderers could not be retrieved after removing orderer.",
"error_remove_node_from_sys_channel_title": "System channel node remove failed",
@@ -2366,87 +2477,87 @@
"review_msp_information": "Review MSP information",
"do_not_associate": "Do not associate",
"associate_orderer_desc": "Select an admin identity for each organization used by the ordering service.",
- "do_not_translate": "${text}",
+ "do_not_translate": "{{text}}",
"consenter_mapping_required": "All of the ordering nodes that were used as consenters when the channel was created are no longer part of the channel. Ensure that all of the peers that are joining the channel contain an address override from one of the original ordering nodes to one of the current ordering nodes.",
"peer_mapping_saas": "The following managed peers may require an address override:",
"peer_mapping_imported": "The following imported peers may require an address override:",
"address_override_example": "Example override section to update the peer so that it can map the old orderer nodes to the new ones:",
"in_val_generic_title": "Request input validation failed",
- "in_val_generic": "The request was not completed because ${violations} input violations were detected.",
+ "in_val_generic": "The request was not completed because {{violations}} input violations were detected.",
"in_val_missing_required_title": "Missing required parameter",
- "in_val_missing_required": "Expected parameter '${property_name}' to exist.",
+ "in_val_missing_required": "Expected parameter '{{property_name}}' to exist.",
"in_val_invalid_type_title": "Invalid parameter type",
- "in_val_invalid_type": "Expected parameter '${property_name}' to be of type: '${property_type}', but instead was: '${type}'.",
+ "in_val_invalid_type": "Expected parameter '{{property_name}}' to be of type: '{{property_type}}', but instead was: '{{type}}'.",
"in_val_too_large_title": "Parameter too large",
- "in_val_too_large": "Parameter '${property_name}' is out of range. Must be <= ${max}.",
+ "in_val_too_large": "Parameter '{{property_name}}' is out of range. Must be <= {{max}}.",
"in_val_too_small_title": "Parameter too small",
- "in_val_too_small": "Parameter '${property_name}' is out of range. Must be >= ${min}.",
+ "in_val_too_small": "Parameter '{{property_name}}' is out of range. Must be >= {{min}}.",
"in_val_invalid_value_title": "Unexpected parameter value",
- "in_val_invalid_value": "Expected parameter '${property_name}' to be one of these values: ${values}.",
+ "in_val_invalid_value": "Expected parameter '{{property_name}}' to be one of these values: {{values}}.",
"in_val_illegal_value_title": "Illegal parameter value",
- "in_val_illegal_value": "Parameter '${property_name}' cannot be any of these values: ${values}.",
+ "in_val_illegal_value": "Parameter '{{property_name}}' cannot be any of these values: {{values}}.",
"in_val_illegal_key_title": "Illegal parameter key",
- "in_val_illegal_key": "Parameter '${property_name}' is automatically populated. It can not be set.",
+ "in_val_illegal_key": "Parameter '{{property_name}}' is automatically populated. It can not be set.",
"in_val_illegal_key_edit_title": "Parameter illegal key edit",
- "in_val_illegal_key_edit": "Parameter '${property_name}' is either never editable or not editable via this api.",
+ "in_val_illegal_key_edit": "Parameter '{{property_name}}' is either never editable or not editable via this api.",
"in_val_str_too_small_title": "Parameter too short",
- "in_val_str_too_small": "Expected parameter '${property_name}' is too short. Must be >= ${min} characters.",
+ "in_val_str_too_small": "Expected parameter '{{property_name}}' is too short. Must be >= {{min}} characters.",
"in_val_str_too_large_title": "Parameter too long",
- "in_val_str_too_large": "Expected parameter '${property_name}' is too long. Must be <= ${max} characters.",
+ "in_val_str_too_large": "Expected parameter '{{property_name}}' is too long. Must be <= {{max}} characters.",
"in_val_invalid_certificate_title": "Invalid certificate parameter",
- "in_val_invalid_certificate": "Expected parameter '${property_name}' to be a Base64 encoded PEM-string.",
+ "in_val_invalid_certificate": "Expected parameter '{{property_name}}' to be a Base64 encoded PEM-string.",
"in_val_invalid_cpu_units_title": "Invalid CPU units",
- "in_val_invalid_cpu_units": "Parameter '${property_name}' must be a valid CPU value. Try values similar to '250m' or '0.25'.",
+ "in_val_invalid_cpu_units": "Parameter '{{property_name}}' must be a valid CPU value. Try values similar to '250m' or '0.25'.",
"in_val_invalid_memory_units_title": "Invalid memory units",
- "in_val_invalid_memory_units": "Parameter '${property_name}' must be a valid memory value. Try values similar to '1GiB' or '1024MiB'.",
+ "in_val_invalid_memory_units": "Parameter '{{property_name}}' must be a valid memory value. Try values similar to '1GiB' or '1024MiB'.",
"in_val_invalid_storage_units_title": "Invalid storage units",
- "in_val_invalid_storage_units": "Parameter '${property_name}' must be a valid storage value. Try values similar to '128GiB' or '131072MiB'.",
+ "in_val_invalid_storage_units": "Parameter '{{property_name}}' must be a valid storage value. Try values similar to '128GiB' or '131072MiB'.",
"in_val_invalid_requests_for_limits_title": "Requests exceed limit",
- "in_val_invalid_requests_for_limits": "Parameter '${property_name}' is invalid. 'requests' must be <= 'limits'. requests: '${requests}', limits: '${limits}'.",
+ "in_val_invalid_requests_for_limits": "Parameter '{{property_name}}' is invalid. 'requests' must be <= 'limits'. requests: '{{requests}}', limits: '{{limits}}'.",
"in_val_invalid_duration_units_title": "Invalid duration string",
- "in_val_invalid_duration_units": "Parameter '${property_name}' must be a valid duration string. Try values similar to '1h' or '3600s'.",
+ "in_val_invalid_duration_units": "Parameter '{{property_name}}' must be a valid duration string. Try values similar to '1h' or '3600s'.",
"in_val_regex_fail_full_url_title": "Invalid URL",
- "in_val_regex_fail_full_url": "The field '${property_name}' must be a url including the protocol, hostname/ip and port.",
+ "in_val_regex_fail_full_url": "The field '{{property_name}}' must be a url including the protocol, hostname/ip and port.",
"in_val_regex_invalid_msp_id_title": "Invalid MSP ID",
- "in_val_regex_invalid_msp_id": "The field '${property_name}' can only contain alphanumerics characters, dashes, and dots.",
+ "in_val_regex_invalid_msp_id": "The field '{{property_name}}' can only contain alphanumerics characters, dashes, and dots.",
"in_val_regex_invalid_enroll_chars_title": "Invalid enrollment characters",
- "in_val_regex_invalid_enroll_chars": "The field '${property_name}' cannot contain white space or these characters :\\<>#{}%`[]\\^~|\"",
+ "in_val_regex_invalid_enroll_chars": "The field '{{property_name}}' cannot contain white space or these characters :\\<>#{}%`[]\\^~|\"",
"in_val_regex_fail_host_and_port_title": "Invalid host and port",
- "in_val_regex_fail_host_and_port": "The field '${property_name}' must be a url including the hostname/ip and port. Do not include the protocol.",
+ "in_val_regex_fail_host_and_port": "The field '{{property_name}}' must be a url including the hostname/ip and port. Do not include the protocol.",
"in_val_regex_fail_start_non_letter_title": "Invalid first letter",
- "in_val_regex_fail_start_non_letter": "The field '${property_name}' must start with a letter.",
+ "in_val_regex_fail_start_non_letter": "The field '{{property_name}}' must start with a letter.",
"in_val_regex_generic_error_title": "Malformed parameter",
- "in_val_regex_generic_error": "Parameter '${property_name}' is malformed.",
+ "in_val_regex_generic_error": "Parameter '{{property_name}}' is malformed.",
"in_val_no_extra_keys_title": "Unknown parameter",
- "in_val_no_extra_keys": "Parameter '${property_name}' is an unknown key for object.",
+ "in_val_no_extra_keys": "Parameter '{{property_name}}' is an unknown key for object.",
"in_val_missing_type_title": "Missing component type",
"in_val_missing_type": "Expected the component 'type' to be in the body or route.",
"in_val_invalid_query_param_arr_str_title": "Invalid query parameter",
- "in_val_invalid_query_param_arr_str": "Expected the query parameter '${property_name}' to be an array of strings. Try values similar to ?filter_orderers=['my-orderer.ibp.us-south.containers.appdomain.cloud']",
+ "in_val_invalid_query_param_arr_str": "Expected the query parameter '{{property_name}}' to be an array of strings. Try values similar to ?filter_orderers=['my-orderer.ibp.us-south.containers.appdomain.cloud']",
"in_val_arr_too_small_title": "Query parameter too small",
- "in_val_arr_too_small": "Expected parameter '${property_name}' is too small. Array must have >= ${min} element(s).",
+ "in_val_arr_too_small": "Expected parameter '{{property_name}}' is too small. Array must have >= {{min}} element(s).",
"in_val_arr_too_large_title": "Query parameter too large",
- "in_val_arr_too_large": "Expected parameter '${property_name}' is too large. Array must have <= ${max} element(s).",
+ "in_val_arr_too_large": "Expected parameter '{{property_name}}' is too large. Array must have <= {{max}} element(s).",
"in_val_unsupported_query_title": "Unsupported query parameter",
- "in_val_unsupported_query": "The query parameter '${property_name}' is not supported by this route.",
+ "in_val_unsupported_query": "The query parameter '{{property_name}}' is not supported by this route.",
"in_val_unmatched_lengths_title": "Unmatched parameter lengths",
- "in_val_unmatched_lengths": "Expected array '${property_name}' to be the same length as '${master_property}' (${len} elements).",
+ "in_val_unmatched_lengths": "Expected array '{{property_name}}' to be the same length as '{{master_property}}' ({{len}} elements).",
"in_val_invalid_combo_not_exist_title": "Incompatible parameters",
- "in_val_invalid_combo_not_exist": "Parameter '${property_name}' is incompatible with parameter '${conflict_property}'. Only one of these fields can exist.",
+ "in_val_invalid_combo_not_exist": "Parameter '{{property_name}}' is incompatible with parameter '{{conflict_property}}'. Only one of these fields can exist.",
"in_val_invalid_combo_missing_title": "Missing companion parameter",
- "in_val_invalid_combo_missing": "Parameter '${property_name}' is missing companion parameter '${companion_property}'. Both fields must exist.",
+ "in_val_invalid_combo_missing": "Parameter '{{property_name}}' is missing companion parameter '{{companion_property}}'. Both fields must exist.",
"in_val_invalid_key_on_free_plan_title": "Paid-only parameter",
- "in_val_invalid_key_on_free_plan": "A *free* IBM Cloud Kubernetes cluster cannot use the parameter '${property_name}'.",
- "in_val_display_format": "${title}: ${message}",
+ "in_val_invalid_key_on_free_plan": "A *free* IBM Cloud Kubernetes cluster cannot use the parameter '{{property_name}}'.",
+ "in_val_display_format": "{{title}}: {{message}}",
"in_val_invalid_query_param_import_title": "Invalid query parameter",
- "in_val_invalid_query_param_import": "The query parameter '${property_name}' with value '${value}' is not applicable on imported components.",
+ "in_val_invalid_query_param_import": "The query parameter '{{property_name}}' with value '{{value}}' is not applicable on imported components.",
"error_component_create_title": "Could not create component",
- "error_component_create": "Component ${component} could not be created.",
+ "error_component_create": "Component {{component}} could not be created.",
"error_component_edit_title": "Could not edit component",
- "error_component_edit": "Component ${component} could not be edited.",
+ "error_component_edit": "Component {{component}} could not be edited.",
"error_component_import_title": "Could not import component",
- "error_component_import": "Component ${component} could not be imported.",
- "identities_from_chosen_ca": "The following identities were created from the selected CA, ${name}.",
+ "error_component_import": "Component {{component}} could not be imported.",
+ "identities_from_chosen_ca": "The following identities were created from the selected CA, {{name}}.",
"use_default": "Use default",
"selected_ca": "Selected CA",
"panel": "panel",
@@ -2465,7 +2576,7 @@
"orderer_admin_set": "Ordering administrators",
"update_channel_admin_set_desc": "By adding and removing ordering service administrators from this channel, you can change the ordering service organizations who have the ability to sign channel updates that require the approval of the ordering service. Before a consenter can be added to the channel, the ordering service organization that owns it must be an administrator.",
"update_channel_admin_set_desc2": "By adding and removing orderer MSPs from this channel, you can change the organizations who have the ability to sign off on edits to the channel's config-block 'Orderer' section. This section includes settings like the consenters set, orderer capabilities, and others.",
- "create_channel_orderer_org_desc": "Select the orderer MSPs that will govern this channel.
The orgs with an \"Administrator\" role are organizations who have the ability to sign off on edits to the channel's config-block 'Orderer' section. This section includes settings like the consenters set, orderer capabilities, and others. The default policy will allow any orderer admin to make admin level changes.",
+ "create_channel_orderer_org_desc": "Select the orderer MSPs that will govern this channel.\n\nThe orgs with an \"Administrator\" role are organizations who have the ability to sign off on edits to the channel's config-block 'Orderer' section. This section includes settings like the consenters set, orderer capabilities, and others. The default policy will allow any orderer admin to make admin level changes.",
"channel_admin": "Administrators",
"select_admin": "Select administrator",
"channel_admins_empty_error": "At least one administrator must be specified.",
@@ -2479,13 +2590,15 @@
"getting_started_monitor_title": "Monitor your resources",
"getting_started_channel_docs_desc": "Deploy Hyperledger Fabric components in IBM Cloud",
"getting_started_channel_docs_title": "Channel governance",
- "channelDocs": "${DOC_PREFIX}?topic=console-advanced-channel-deployment-management",
+ "channelDocs": "{{DOC_PREFIX}}?topic=console-advanced-channel-deployment-management",
+ "channel_doc_hlfoc": "{{DOC_PREFIX}}/create_channel/create_channel_overview.html",
"getting_started_grow_desc": "Grow your network by inviting other organizations",
"getting_started_grow_title": "Grow your network",
- "growDocs": "${DOC_PREFIX}?topic=console-managing-organizations",
+ "growDocs": "{{DOC_PREFIX}}?topic=console-managing-organizations",
+ "hlfoc_arch": "{{DOC_PREFIX}}/architecture.html",
"getting_started_grow_resources_desc": "Add worker nodes so you don't run out of compute",
"getting_started_grow_resources_title": "Grow your resources",
- "growResourcesDocs": "${DOC_PREFIX}?topic=console-upgrading-deleting-deployed-nodes",
+ "growResourcesDocs": "{{DOC_PREFIX}}?topic=console-upgrading-deleting-deployed-nodes",
"notification_count": "Notification count",
"max_notification_count": "99+",
"invalid_consenter_error": "One or more of the consenters is no longer valid.",
@@ -2505,8 +2618,8 @@
"orderer_warning_title": "Certificate Expiration Warning",
"orderer_warning_text": "The certificates used by the orderer will expire soon and cannot be automatically renewed.",
"cert_expiry_error": "Some of your peer and orderer enrollment certs are expiring within the next 60 days and those would be automatically renewed 30 days before expiration",
- "cert_update_expire_warn": "The TLS certificate of a component was recently updated. Remember to also update your admin and enrollment certificates before they expire.
Certificates: ${upCompList}",
- "certs_expire_details": "Remember the admin and enrollment certificates in your new component have expirations. You must plan to update them before they expire.
Certificates: ${details}",
+ "cert_update_expire_warn": "The TLS certificate of a component was recently updated. Remember to also update your admin and enrollment certificates before they expire. \n\n Certificates: \n {{upCompList}}",
+ "certs_expire_details": "Remember the admin and enrollment certificates in your new component have expirations. You must plan to update them before they expire. \n\n Certificates: \n {{details}}",
"use_default_consenters": "Include all orderer nodes from the system channel consenter set.",
"use_default_consenters2": "Include all orderer nodes from the selected ordering organizations.",
"chaincode_policy": "Chaincode policy",
@@ -2515,57 +2628,57 @@
"lifecycle_policy_desc": "The lifecycle endorsement policy specified here is the criteria by which the organizations on the channel collaboratively decide to commit a smart contract definition. [[Find out more information here.]](_CHAINCODE_POLICY_LINK1)",
"lifecycle_policy_tooltip": "Choose how many organizations must approve a smart contract definition before it can be committed to the channel.",
"endorsement_policy_desc": "The endorsement policy specified here becomes the default smart contract endorsement policy for the channel, but can be overridden for a smart contract by specifying a different smart contract endorsement policy in the smart contract definition. [[Find out more information here.]](_CHAINCODE_POLICY_LINK1)",
- "_CHAINCODE_POLICY_LINK1": "${DOC_PREFIX}?topic=console-advanced-channel-deployment-management",
+ "_CHAINCODE_POLICY_LINK1": "{{DOC_PREFIX}}?topic=console-advanced-channel-deployment-management",
"endorsement_policy_tooltip": "Choose how many organizations are required to endorse a smart contract transaction.",
"chaincode_policy_majority": "Majority of the organizations must approve (default)",
"chaincode_policy_all": "All channel organizations must approve",
"chaincode_policy_any": "Any channel organization must approve",
"chaincode_policy_specific": "Specific channel organizations must approve",
"chaincode_policy_specific_label": "Channel organizations that must approve",
- "chaincode_specific_policy": "${n} out of ${members}",
+ "chaincode_specific_policy": "{{n}} out of {{members}}",
"review_endorsement_policy_error": "Navigate to the Smart contract endorsement policy section and select policy before submitting the request.",
"duplicate_mspid_error_title": "Duplicate MSP ID",
"review_lifecycle_policy_error": "Navigate to the Lifecycle endorsement policy section and select policy before submitting the request.",
"duplicate_mspid_error_desc": "Same MSP ID already exists for selected CA. Please enter a different MSP ID or choose another CA to continue.",
- "channel_warning_20_single_application": "Node ${nodes} in the cluster is not at Fabric version 2.x. Upgrade this node to 2.x before updating the Application capability.",
- "channel_warning_20_single_orderer": "Node ${nodes} in the cluster is not at Fabric version 2.x. Upgrade this node to 2.x before updating the Orderer capability.",
- "channel_warning_20_single_channel": "Node ${nodes} in the cluster is not at Fabric version 2.x. Upgrade this node to 2.x before updating the Channel capability.",
- "channel_warning_20_multi_application": "Nodes ${nodes} in the cluster are not at Fabric version 2.x. Upgrade all of the nodes to 2.x before updating the Application capability.",
- "channel_warning_20_multi_orderer": "Nodes ${nodes} in the cluster are not at Fabric version 2.x. Upgrade all of the nodes to 2.x before updating the Orderer capability.",
- "channel_warning_20_multi_channel": "Nodes ${nodes} in the cluster are not at Fabric version 2.x. Upgrade all of the nodes to 2.x before updating the Channel capability.",
+ "channel_warning_20_single_application": "Node {{nodes}} in the cluster is not at Fabric version v2.x. Upgrade this node to v2.x before updating the Application capability.",
+ "channel_warning_20_single_orderer": "Node {{nodes}} in the cluster is not at Fabric version v2.x. Upgrade this node to v2.x before updating the Orderer capability.",
+ "channel_warning_20_single_channel": "Node {{nodes}} in the cluster is not at Fabric version v2.x. Upgrade this node to v2.x before updating the Channel capability.",
+ "channel_warning_20_multi_application": "Nodes {{nodes}} in the cluster are not at Fabric version v2.x. Upgrade all of the nodes to v2.x before updating the Application capability.",
+ "channel_warning_20_multi_orderer": "Nodes {{nodes}} in the cluster are not at Fabric version v2.x. Upgrade all of the nodes to v2.x before updating the Orderer capability.",
+ "channel_warning_20_multi_channel": "Nodes {{nodes}} in the cluster are not at Fabric version v2.x. Upgrade all of the nodes to v2.x before updating the Channel capability.",
"channel_consenter_orderer_msp_tooltip": "Ordering service admins will be prompted with this field as the proposed channel configuration update requires their signature.",
"select_orderer_msp": "Select Orderer MSP",
"update_tls_certs": "Update orderer certificates",
- "update_consenter_application_channel_desc": "This action will update the orderer TLS certificate for ${name} on channel ${channelId} with the following TLS certificate:",
- "update_consenter_system_channel_desc": "This action will update the orderer TLS certificate for ${name} on system channel with the following TLS certificate:",
+ "update_consenter_application_channel_desc": "This action will update the orderer TLS certificate for {{name}} on channel {{channelId}} with the following TLS certificate:",
+ "update_consenter_system_channel_desc": "This action will update the orderer TLS certificate for {{name}} on system channel with the following TLS certificate:",
"tls_root_cert": "",
"confirm_consenter_name": "Consenter Name",
"unsupported_cluster": "Unsupported cluster",
- "unsupported_cluster_error": "Current cluster level ${clusterVersion} isn't supported by IBP. Supported cluster level range is ${min} - ${max}. Update your cluster at the earliest to avoid service disruption. [[Find out more information here.]](_IKS_VERSION_LINK)",
+ "unsupported_cluster_error": "Current cluster level {{clusterVersion}} isn't supported by IBP. Supported cluster level range is {{min}} - {{max}}. Update your cluster at the earliest to avoid service disruption. [[Find out more information here.]](_IKS_VERSION_LINK)",
"_IKS_VERSION_LINK": "https://cloud.ibm.com/docs/containers?topic=containers-cs_versions",
"update_consenter": "Update consenter",
"consenter_certs": "Consenter Certs",
- "consenter_updates": "Consenter certs updated for ${channel}",
+ "consenter_updates": "Consenter certs updated for {{channel}}",
"update_consenter_confirm": "Please type the name of the consenter to confirm:",
"confirm_remove_consenter_name_placeholder": "Enter the name of the consenter to be removed",
"confirm_update_consenter_name_placeholder": "Enter the name of the consenter to be updated",
- "channel_warning_20_join_peer_application": "${peer} is at Fabric version V${peerVersion} while the Application capability for the channel is at ${channelVersion}. Ensure that the peer Fabric version is updated to 2.x before joining the channel.",
- "channel_warning_20_join_peer_orderer": "${peer} is at Fabric version V${peerVersion} while the Orderer capability for the channel is at ${channelVersion}. Ensure that the peer Fabric version is updated to 2.x before joining the channel.",
- "channel_warning_20_join_peer_channel": "${peer} is at Fabric version V${peerVersion} while the Channel capability for the channel is at ${channelVersion}. Ensure that the peer Fabric version is updated to 2.x before joining the channel.",
- "duplicate_msp_id_warning": "An organization with MSP ID \"${msp_id}\" has already been added. It is recommended that you do not use the same MSP ID.",
+ "channel_warning_20_join_peer_application": "{{peer}} is at Fabric version {{peerVersion}} while the Application capability for the channel is at {{channelVersion}}. Ensure that the peer Fabric version is updated to v2.x before joining the channel.",
+ "channel_warning_20_join_peer_orderer": "{{peer}} is at Fabric version {{peerVersion}} while the Orderer capability for the channel is at {{channelVersion}}. Ensure that the peer Fabric version is updated to v2.x before joining the channel.",
+ "channel_warning_20_join_peer_channel": "{{peer}} is at Fabric version {{peerVersion}} while the Channel capability for the channel is at {{channelVersion}}. Ensure that the peer Fabric version is updated to v2.x before joining the channel.",
+ "duplicate_msp_id_warning": "An organization with MSP ID \"{{msp_id}}\" has already been added. It is recommended that you do not use the same MSP ID.",
"remove_ca_user": "Remove CA User",
- "remove_ca_user_desc": "This action will remove registered user ${enroll_id} from the Certificate Authority. Use with caution. While the existing certificate and private key for this user continue to be valid and can be used to transact on the network, you will not be able to enroll or reenroll (renew) the certificate.",
+ "remove_ca_user_desc": "This action will remove registered user {{enroll_id}} from the Certificate Authority. Use with caution. While the existing certificate and private key for this user continue to be valid and can be used to transact on the network, you will not be able to enroll or reenroll (renew) the certificate.",
"remove_ca_user_confirm": "Please type the Enroll ID of the user to confirm:",
"remove_ca_user_tooltip": "Remove registered user from CA",
"delete_user": "Delete user",
"identity_removal_disabled": "Identity removal is disabled for this Certificate Authority. Ensure that it is enabled by updating the CA configuration.",
"duplicate_mspid_import_error_desc": "MSP already exists",
- "no_capability_changes": "System channel can only be updated if there are changes to capability.",
+ "no_capability_changes": "The orderer already has the selected capabilities.",
"in_val_too_many_keys": "Too many fields in body. This API only supports 1 field in the body. Use multiple apis to update multiple fields.",
"smart_contract_20_lifecycle_notice_title": "Fabric v2.0 lifecycle is now available under channel details page",
"smart_contract_20_lifecycle_notice_desc": "Good news. The process to deploy smart contracts on a channel has been updated to support the Fabric v2.0 lifecycle. You can continue to use this page to install and instantiate your legacy smart contracts in .cds format. Find out more about the new smart contract lifecycle with this how-to topic. If your channel application capability is set to v2.0, open the channel and select the Smart contract management tab to get started.",
"how_to_topic": "How-to topic",
- "how_to_link": "${DOC_PREFIX}?topic=contracts-deploy-smart-fabric-v2x",
+ "how_to_link": "{{DOC_PREFIX}}?topic=contracts-deploy-smart-fabric-v2x",
"go_to_channel": "Go to channels page",
"tooltip_manage_ecert": "Select Enroll certificate if the existing enrollment certificate has already expired. Otherwise select Re-enroll certificate.",
"tooltip_manage_tls_cert": "Select Enroll certificate if the existing TLS certificate has already expired. Otherwise select Re-enroll certificate.",
@@ -2575,12 +2688,12 @@
"cert_refresh_error": "An error occurred when refreshing certs.",
"refresh_certs": "Refresh Certs",
"non_admin_identity": "A Non-Admin identity is associated.",
- "channel_nodeou_warning": "Please enable NodeOU for ${msps} before updating channel capability to 2.x",
+ "channel_nodeou_warning": "Please enable NodeOU for {{msps}} before updating channel capability to v2.x",
"missing_endorsement_policy_title": "Endorsement policy missing for some organizations",
- "missing_endorsement_policy_desc": "The organization-level endorsement policies needed to run the 2.x smart contract lifecycle are missing from ${orgs} in this Consortium. To add the endorsement policies, remove and then re-add the MSPs.",
+ "missing_endorsement_policy_desc": "The organization-level endorsement policies needed to run the v2.x smart contract lifecycle are missing from {{orgs}} in this Consortium. To add the endorsement policies, remove and then re-add the MSPs.",
"peer_v1_v2_chaincode_title": "Existing Smart Contracts",
"peer_v1_v2_chaincode_desc": "Existing smart contracts that are installed on the peer may need to be updated in order to run correctly after the upgrade.",
- "peer_v1_v2_chaincode_link": "${DOC_PREFIX}?topic=contracts-deploy-smart-fabric-v2x",
+ "peer_v1_v2_chaincode_link": "{{DOC_PREFIX}}?topic=contracts-deploy-smart-fabric-v2x",
"alert": "Alert",
"import_only_peer": "Import peer",
"import_only_ca": "Import Certificate Authority",
@@ -2609,46 +2722,51 @@
"consenter": "Consenter",
"follower": "Follower",
"osnadmin_url": "OSN Admin url",
- "clusters_title": "Orderers to join '${channel}':",
+ "clusters_title": "Orderers to join '{{channel}}':",
"already_joined": "Already joined",
"not_joined": "Not joined",
"failed_join": "Failed to join",
"restarting": "Restarting...",
"migration": "Migration",
- "migration_why1": "IBM Blockchain Platform as a Service is being sunset end of July 2023. Users must migrate to [[IBM Support for Hyperledger Fabric]](https://www.ibm.com/docs/en/hlf-support/1.0.0) or unrecoverable data loss could occur.",
- "migration_what1": "The migration process will copy this console's data to a new console deployed on your Kubernetes cluster and update the base image of your Fabric nodes. There are no limitations or functional losses to your environment or capabilities.",
- "migration_details1": "The console you are using right now is hosted by the IBM Blockchain Platform service. The new console will be hosted on your kubernetes cluster. The same cluster that is hosting your CAs, Peers and/or Orderers.",
- "migration_details2": "The login credentials used to get to this console are from an IBM ID. The new credentials will be local users to the console, using an email/password you define during migration.",
- "migration_details2.1": "- Similar to the login credentials any IBM IAM api keys or bearer tokens used to authenticate console APIs will need to change to [[local api keys]](https://www.ibm.com/docs/en/blockchain-platform/2.5.3?topic=how-administering-your-console) or local bearer tokens.",
- "migration_details4": "After migration the existing console will be put into a read-only state and you will be prompted to delete this service instance. Once in the read only state you will be unable to create/manage nodes on this console.",
- "migration_details3": "The new console will use a self-signed TLS certificate when communicating with your web browser. The first time you view the new console your browser will display a TLS warning. Follow the browser prompts to accept the new TLS certificate.",
- "migration_details5": "- The documentation to reference will move from IBM Cloud to [[IBM]](https://www.ibm.com/docs/en/hlf-support/1.0.0)",
- "migration_resources": "600 mCPU - 2 GB memory - 25 GB storage",
- "migration_resources1": "The new console will consume CPU, memory and storage from your kubernetes cluster. It's estimated that your cluster will need to have 0.6 CPU, 2 GB of memory, and 25 GB of storage available. However consoles with many nodes may require more resources to perform smoothly.",
- "migration_resources2": "We strongly recommend to manually check if your cluster has enough free cpu, memory and storage before starting migration.",
+ "migration_wiz_title": "Setup migration",
+ "migration_why1": "IBM Blockchain Platform as a Service is being sunset on July 31, 2023. Users must migrate to [[IBM Support for Hyperledger Fabric]](https://www.ibm.com/docs/en/hlf-support/1.0.0) or unrecoverable data loss could occur.",
+ "migration_what1": "The migration process will copy this console's data to a new console deployed on your cluster and update the base image of your Fabric nodes. There are no limitations or functional losses to your environment or capabilities.",
+ "migration_details1": "This console is hosted by IBM Blockchain Platform. The new console will be hosted on your cluster, which also hosts your peers, orderers, and CAs.",
+ "migration_details2": "You are currently logged into this console using IBMid credentials. New (local) credentials will be created for the new console using an email/password you define.",
+ "migration_details2.1": "- If you are using console APIs for custom integrations the IBM IAM API keys used to authenticate will need to be changed to use [[local API keys]](https://www.ibm.com/docs/en/hlf-support/1.0.0?topic=console-administering-your#console-icp-manage-api-key).",
+ "migration_details4": "Once migration is started this console will be put into a read-only state (this console will be unable to create or edit nodes/channels/chaincode).",
+ "migration_details3": "The new console will use a self-signed TLS certificate to communicate with your web browser. On your first visit the browser will display a TLS warning. Follow the browser prompts to accept the new TLS certificate.",
+ "migration_details6": "The name of this product will change from IBM Blockchain Platform to IBM Support for Hyperledger Fabric",
+ "migration_details5": "- The documentation to reference will move from IBM Cloud to [[IBM Support for Hyperledger Fabric]](https://www.ibm.com/docs/en/hlf-support/1.0.0)",
+ "migration_resources": "1.2 CPU - 2.25 GiB memory - 10 GiB storage",
+ "migration_resources1": "The new console will consume an estimated 1.2 CPU, 2.25GiB memory and 10GiB storage from your cluster. However consoles managing many nodes may require more resources to perform smoothly.",
+ "migration_resources2": "Before beginning the migration, verify that your cluster has enough free cpu, memory and storage.",
"migration_min_versions_title": "Minimum Versions:",
- "migration_min_versions": "All Fabric versions and the kubernetes version must be equal to or higher than the versions listed below. These versions will be checked before migration begins. Note that Fabric nodes that were *imported* to this console are exempt.",
- "migration_fabric_ca": "Hyperledger Fabric CA",
- "migration_fabric_peer": "Hyperledger Fabric Peer",
- "migration_fabric_orderer": "Hyperledger Fabric Orderer",
+ "migration_min_versions": "All Fabric versions and the cluster version must be equal to or higher than the versions listed below. These versions will be checked before migration begins. Note that Fabric nodes that were *imported* to this console are exempt.",
+ "openshift_txt": "Red Hat OpenShift",
+ "migration_fabric_ca": "Hyperledger Fabric CAs",
+ "migration_fabric_peer": "Hyperledger Fabric Peers",
+ "migration_fabric_2.2": "if at v2.2 or lower",
+ "migration_fabric_2.4": "if at v2.4 or higher",
+ "migration_fabric_orderer": "Hyperledger Fabric Orderers",
"migration_k8s": "Kubernetes",
- "migration_start1": "To start click the \"Review Migration\" button below. Migration of your console will require about ${estimate} minutes.",
+ "migration_start1": "To start click the \"Setup\" button below. Migration of your console will require about {{estimate}} minutes.",
"migration_start1.1": "Once started most Fabric nodes will become unreachable, thus prepare for a blockchain outage for the duration of the migration. ",
- "migration_start1.2": "During migration you may close the browser or continue to use this console. However you should not edit channels, Fabric nodes, or console settings.",
- "migration_start2": "Migration consist of:",
+ "migration_start1.2": "During migration you may close the browser or continue to use this console. However you will not be able to edit channels, chaincode, or Fabric nodes.",
+ "migration_start2": "Migration consists of:",
"migration_start_details1": "- Checking version compatibility",
"migration_start_details2": "- Creating your new login credentials",
"migration_start_details3": "- Redeploying Fabric nodes (CAs, orderers, and peers)",
"migration_start_details4": "- Deploying a new console & copying console data",
"migration_start_details5": "- Exporting your wallet and importing it on the new console",
- "migration_title": "Migration to IBP Support for Hyperledger Fabric is available",
- "migration_title_warn": "Time is running out to migrate to IBP Support for Hyperledger Fabric",
- "migration_title_error": "Migrate to IBP Support for Hyperledger Fabric *now* to avoid unrecoverable losses",
+ "migration_title": "Migration to IBM Support for Hyperledger Fabric is available",
+ "migration_title_warn": "Migration to IBM Support for Hyperledger Fabric is required",
+ "migration_title_error": "Action Required: Migrate to IBM Support for Hyperledger Fabric",
"migration_action_button": "Migrate",
- "migration_done_title": "Congratulations! You have Migrated to IBP Support for Hyperledger Fabric",
+ "migration_done_title": "Congratulations! You have Migrated to IBM Support for Hyperledger Fabric",
"migration_done_button": "Migration Details",
"migration_console_title": "Console",
- "migration_completion_title": "Console is in read only mode",
+ "migration_completion_title": "This console is in read only mode",
"migration_completion_subtitle": "This console has been migrated and is now in read only mode. You are no longer able to manage your nodes using this console. To manage your nodes use your new console.",
"migration_outage_warning": "[Disruption Warning] Fabric nodes are unreachable during migration",
"migration_completion_action": "Go to New Console",
@@ -2662,29 +2780,35 @@
"component_status_title": "Components Status:",
"why_migrate_title": "Why migrate?",
"what_changes_title": "What changes?",
+ "mig_warnings": "Any warnings?",
"what_prereq_title": "What are the prerequisites?",
- "review_mig_text": "Review Migration",
+ "mig_button_text": "Setup",
"mig_header1": "Ready to migrate?",
+ "mig_header_in_progress": "Status",
"mig_details_title": "Details:",
- "mig_tooltip1": "If you are ready to migrate click the review migration button below to begin.",
- "mig_description": "Migration for your IBM Blockchain Platform console is enabled. Proceed when ready.",
- "mig_description2": "Migration for your IBM Blockchain Platform console is not yet enabled. This feature is coming soon. Contact support if you have any questions.",
+ "mig_warning_txt": "- Note that there is breaking behavior when multiple IBP instances have been deployed to the same cluster. Migrating the first console will break Fabric functionality on the other consoles. The remaining consoles will no longer be able to show Fabric related content or perform Fabric functions, but will otherwise work. Migrate the remaining consoles and use the migrated (new) console to resolve this issue.",
+ "mig_warning_txt2": "- Once migration has started Fabric nodes will become unreachable. You should expect a blockchain outage for the duration of migration.",
+ "mig_tooltip1": "Please read the migration information above before starting migration. There are important considerations before starting.",
+ "mig_tooltip_in_progress": "This page will report the status of your migration. You may leave this page or close your browser. Migration will continue in the background.",
+ "mig_description": "Migration for your IBM Blockchain Platform console is enabled. Proceed after reading the information above by clicking \"Setup\".",
+ "mig_description_in_progress": "Migration of your IBM Blockchain Platform console is in progress.",
+ "mig_description_disabled": "Migration for your IBM Blockchain Platform console is not yet enabled. This feature is coming soon. Contact support if you have any questions.",
"mig_complete": "Migration is complete",
- "mig_missing_perms": "You do not have permission to initiate migration. The IBM Cloud role of \"manager\" is needed on this service instance.",
+ "mig_missing_perms": "You do not have permission to initiate migration. The IBM Cloud role of \"Manager\" is needed on this resource.",
"mig_timed_out": "The migration attempt has timed out. Try again. Contact support if this message persists.",
"mig_error": "The migration was not successful. You may try again. Contact support if this message persists.",
- "mig_error_msg": "Error: ${migration_error_msg}",
- "mig_elapsed_msg": "Migration started ${time} ago",
- "mig_in_progress": "Migration is in progress. It can take up to ${estimate} minutes.",
- "start_migration_txt": "Start Migration (~${estimate} mins)",
- "new_console_pass": "New console password",
- "new_console_pass_tooltip": "This password will be used to login to your new console. Note that passwords over 20 characters have relaxed rules.",
+ "mig_error_msg": "Error\n {{migration_error_msg}} \n {{jupiter_error_msg}}",
+ "mig_elapsed_msg": "Migration started {{time}} ago",
+ "mig_in_progress": "Migration is in progress. It can take up to {{estimate}} minutes.",
+ "start_migration_txt": "Start migration (~{{estimate}} mins)",
+ "new_console_pass": "New console default password",
+ "new_console_pass_tooltip": "This password will be used to login to your new console. This is also the default password for any new usernames until they change their password.",
"new_console_pass_placeholder": "Enter a new password",
"new_console_user": "New console username",
"new_console_user_tooltip": "This username will be used to login to your new console. It has already been chosen and cannot be changed.",
- "migration_wiz_txt": "The new console will use local usernames and passwords for login. The migration process will create one \"Manager\" level user. Additional users can be created on the new console after migration is complete.",
+ "migration_wiz_txt": "The new console will use local usernames and passwords for login. The migration process will create one \"Manager\" level user. Additional users can be created on the new console later. The password entered below is also the default password. Which means this password will also be used by new users on their first login to the new console.",
"advanced_mig_options": "Advanced migration options",
- "new_console_pass_confirm": "Confirm new password",
+ "new_console_pass_confirm": "Confirm default password",
"new_console_pass_confirm_placeholder": "Enter the same password",
"mig_option_clean": "Clean migration",
"mig_option_clean_tooltip": "A clean migration will overwrite any previous migration console data from previous attempts.",
@@ -2692,29 +2816,63 @@
"invalid_mig_title": "Missing or expired tokens",
"invalid_mig_title_free": "Invalid Cluster",
"invalid_mig_fab_versions_txt": "One or more of your nodes is not using a Fabric version that can migrate. Update all the red nodes below to a newer version.",
- "invalid_mig_k8s_version_txt": "Your kubernetes cluster is not using a version that can migrate. Update the cluster to a newer version.",
+ "invalid_mig_k8s_version_txt": "Your {{type}} cluster is not using a version that can migrate. Update the cluster to the newest version.",
"invalid_mig_k8s_free_txt": "Migration is not available on clusters using the IKS free plan.",
"invalid_mig_txt": "This error needs to be corrected before you can migrate.",
"invalid_iam_tokens_txt": "IBM Cloud IAM tokens are required to migrate. They should be passed automatically, but may have expired. Try launching the console again from the [[IBM Cloud]](https://cloud.ibm.com/resources) resources page.",
- "migration_node_fab_version_txt": "- Fabric version:",
"migration_node_k8s_version_txt": "Kubernetes version:",
"cluster": "Cluster",
"deployed_nodes_title": "Deployed nodes",
- "migration_required_version_txt": "-> requires ${min}+",
+ "migration_required_version_txt": "-> requires {{min}}+",
+ "migration_version_valid_txt": "valid",
+ "migration_nodes_not_found": "No deployed nodes were found",
"checking_txt": "Checking migration compatibility...",
- "checking_txt_valid": "Pre-requisites are met!",
+ "checking_txt_valid": "Prerequisites have been verified!",
"checking_txt_valid2": "There's one more step before migrating. Choose a new password.",
"how_migrate_title": "How do I migrate?",
"mig_wallet_title": "It's now your turn",
"mig_wallet_instructions": "The new console is ready. Migrate your wallet now.",
"mig_wallet_instructions1.5": "The last step is to migrate your wallet (identities), which is a step you must do.",
- "mig_wallet_instructions2": "1. Go to the Settings tab on this console and click the blue \"Export\" button. Select the `Identities` checkbox and unselect all others. Click \"Export\" and save this file somewhere safe.",
- "mig_wallet_instructions3": "2. Next open a tab to your new console, login with your new username/password, and import the wallet from the Settings tab.",
- "migration_cleanup": "Migration Cleanup",
- "mig_complete_txt": "Thank you for completing migration! The last steps are to verify the existing console is working and then to delete this service instance from your IBM Cloud account.",
- "mig_warn_txt": "1. Verify that you and any users of your console have exported their wallets from this console and imported them to the new console. Below is a list of usernames that have exported their wallet. This console cannot tell if they are imported in the new console. It is a manual step you must take before deletion. Once this console is deleted, all wallets held within it will be unrecoverable.",
- "mig_complete_txt2": "Check out your new console at ",
+ "mig_wallet_instructions2": "1. Go to the Settings tab (gear icon) on this console and click the blue \"Export\" button. Then select the \"Identities\" checkbox and unselect all others. Click \"Export\" and save this file to a secure location.",
+ "mig_wallet_instructions3": "2. Next open a tab to your new console, login with your new username/password, go to the Settings tab and import the file from the previous step.",
+ "migration_cleanup": "Migration cleanup",
+ "mig_complete_txt": "Thank you for completing migration! Next is to verify the new console is working and then to delete this console.",
+ "mig_warn_txt": "1. Verify that you and any users of your console have exported their wallets from this console and imported them to the new console. Below is a list of usernames that have exported their wallet. This console cannot tell if they are imported in the new console. Ask the users of your console if they have imported their wallet. Once this console is deleted, all wallets held within will be unrecoverable.",
+ "mig_complete_txt2": "Visit your new console at ",
"mig_exported_wallets": "Usernames that have exported their wallet:",
- "mig_test_txt": "2. To see if the new console is working well, open a new tab to the new console and click on each of the node tiles. Compare the Fabric related content seen there with the content seen on this console, it should be identical. If it isn't, try exporting and importing your wallet again, and double check the identity that is associated on each node.",
- "mig_delete_txt": "3. If the new console is working well and all wallets have been transferred, its time to delete the service instance. Go to your [[IBM Cloud resources]](https://cloud.ibm.com/resources) dashboard, find this service instance, and open it. If you see the text \"This console has been migrated!\" on the welcome page, then it is safe to delete the service instance. Click the \"Actions...\" dropdown menu and select \"Delete service\"."
+ "mig_exported_txt": "exported on",
+ "mig_users_text": "2. (optional step) Additional local users can be created by using the \"Users\" tab on your new console. You should create a user on the new console for every active user of this console.",
+ "mig_test_txt": "3. Next check if the new console is working. Open a new tab to the new console and click on each of the node tiles. You will need to associate each node with an appropriate identity from your wallet. Compare the Fabric related content seen on the new console with the content seen on this console, it should be identical. If the new console is missing content double check that the correct identity was associated and switch the identity if needed.",
+ "mig_delete_txt": "4. If the new console is working well it's time to delete this console. Go to your [[IBM Cloud resources]](https://cloud.ibm.com/resources) dashboard, under \"Blockchain\" find the row for this console, and open it. You should be on the page which used to have the blue button that launches the console. This page should now have the text \"This console has been migrated!\". If so then it is safe to delete by using the \"Actions...\" dropdown and the \"Delete service\" option. If this text is missing contact support.",
+ "audit_logs": "Audit",
+ "audit_table_desc": "These logs form a record of many actions performed on the console by a console user or console API key. Most console activity is recorded such as user login/logout, node creation/deletion, enroll ID registration, channel creation and more.",
+ "audit_table_tile_empty": "No results",
+ "audit_table_text_empty": "No logs found",
+ "audit_table_tooltip": "Log/event activity",
+ "audit_logs_title": "Activity logs",
+ "date": "Date",
+ "log": "Log",
+ "response_code": "Response code",
+ "api_title": "HTTP Details",
+ "outcome_title": "Outcome",
+ "transaction_id_title": "Id",
+ "log_title": "Activity log",
+ "view_details": "View details",
+ "by_title": "By",
+ "tx_id_title": "API Id",
+ "download_page_button_txt": "Export current page",
+ "download_all_button_txt": "Export all",
+ "copy_log_button_tooltip": "Copy log data to clipboard",
+ "log_detail_desc": "The full details of this activity log are below.",
+ "log_columns_desc": "Display",
+ "audit_no_access_msg": "Only users with the \"Manager\" role can view this page.",
+ "threat_message": "This service instance must be deleted by Oct 31, 2023 to avoid a blockchain network outage",
+ "version_debug_msg": "Version summary",
+ "version_debug_tooltip": "Use this tool to export a version summary which shows the versions of each of your component. This summary is helpful for debugging/support purposes.",
+ "hide_archived_channels": "Hide Archived Channels",
+ "show_archived_channels": "Show Archived Channels",
+ "channel_not_found_under_orderer": "Channel '{{channelId}}' not found within selected orderer '{{ordererId}}'",
+ "orderer_tls_admin_identity_not_found_in_selected_clusters": "Unable to join channel because cluster {{clusters}} does not have TLS Identity",
+ "orderer_org_not_found_in_channel": "Orderer Org not found",
+ "orderer_org_not_found_in_selected_nodes": "Unable to join channel because msp not exists for selected node {{nodes}}"
}
diff --git a/packages/apollo/src/assets/sass/_carbonTheme.scss b/packages/apollo/src/assets/sass/_carbonTheme.scss
index 5bc2965e..6289a0ff 100644
--- a/packages/apollo/src/assets/sass/_carbonTheme.scss
+++ b/packages/apollo/src/assets/sass/_carbonTheme.scss
@@ -1,32 +1,32 @@
-$carbon--theme: map-merge($carbon--theme--g100,
- (ui-background: $carbon--cool-gray-100,
- ui-01: $carbon--cool-gray-90,
- ui-02: $carbon--cool-gray-80,
- ui-03: $carbon--cool-gray-80,
- ui-04: $carbon--cool-gray-60,
- ui-05: $carbon--cool-gray-10,
- text-01: $carbon--cool-gray-10,
- text-02: $carbon--cool-gray-30,
- text-03: $carbon--cool-gray-60,
- icon-01: $carbon--cool-gray-10,
- icon-02: $carbon--cool-gray-30,
- field-01: $carbon--cool-gray-90,
- field-02: $carbon--cool-gray-80,
- inverse-01: $carbon--cool-gray-100,
- inverse-02: $carbon--cool-gray-10,
- inverse-support-01: $carbon--red-60,
- overlay-01: $carbon--cool-gray-100,
- interactive-02: $carbon--cool-gray-80,
- hover-secondary: $carbon--cool-gray-70,
- hover-tertiary: $carbon--cool-gray-10,
- hover-ui: $carbon--cool-gray-90,
- hover-selected-ui: $carbon--cool-gray-80,
- hover-row: $carbon--cool-gray-90,
- active-secondary: $carbon--cool-gray-80,
- active-tertiary: $carbon--cool-gray-30,
- active-ui: $carbon--cool-gray-70,
- selected-ui: $carbon--cool-gray-80,
- disabled-01: $carbon--cool-gray-90,
- disabled-02: $carbon--cool-gray-80,
- disabled-03: $carbon--cool-gray-60,
- highlight: $carbon--blue-20 ));
+$theme: map-merge($g100,
+ (ui-background: $cool-gray-100,
+ ui-01: $cool-gray-90,
+ ui-02: $cool-gray-80,
+ ui-03: $cool-gray-80,
+ ui-04: $cool-gray-60,
+ ui-05: $cool-gray-10,
+ text-01: $cool-gray-10,
+ text-02: $cool-gray-30,
+ text-03: $cool-gray-60,
+ icon-01: $cool-gray-10,
+ icon-02: $cool-gray-30,
+ field-01: $cool-gray-90,
+ field-02: $cool-gray-80,
+ inverse-01: $cool-gray-100,
+ inverse-02: $cool-gray-10,
+ inverse-support-01: $red-60,
+ overlay-01: $cool-gray-100,
+ interactive-02: $cool-gray-80,
+ hover-secondary: $cool-gray-70,
+ hover-tertiary: $cool-gray-10,
+ hover-ui: $cool-gray-90,
+ hover-selected-ui: $cool-gray-80,
+ hover-row: $cool-gray-90,
+ active-secondary: $cool-gray-80,
+ active-tertiary: $cool-gray-30,
+ active-ui: $cool-gray-70,
+ selected-ui: $cool-gray-80,
+ disabled-01: $cool-gray-90,
+ disabled-02: $cool-gray-80,
+ disabled-03: $cool-gray-60,
+ highlight: $blue-20 ));
diff --git a/packages/apollo/src/assets/sass/_ibm_flex.scss b/packages/apollo/src/assets/sass/_ibm_flex.scss
new file mode 100644
index 00000000..516a144f
--- /dev/null
+++ b/packages/apollo/src/assets/sass/_ibm_flex.scss
@@ -0,0 +1,52 @@
+.ibp-flex {
+ display: flex;
+}
+.ibp-row {
+ display: flex;
+ flex-direction: row;
+}
+.ibp-column {
+ display: flex;
+ flex-direction: column;
+}
+.width-10 {
+ width: 10%;
+}
+.width-20 {
+ width: 20%;
+}
+.width-25 {
+ width: 25%;
+}
+.width-30 {
+ width: 30%;
+}
+.width-40 {
+ width: 40%;
+}
+.width-50 {
+ width: 50%;
+}
+.width-60 {
+ width: 60%;
+}
+.width-70 {
+ width: 70%;
+}
+.width-75 {
+ width: 75%;
+}
+.width-80 {
+ width: 80%;
+}
+.width-90 {
+ width: 90%;
+}
+.width-100 {
+ width: 100%;
+}
+
+.p-lr-10 {
+ padding-left: 10px;
+ padding-right: 10px;
+}
diff --git a/packages/apollo/src/assets/sass/_overrides.scss b/packages/apollo/src/assets/sass/_overrides.scss
index da815f7a..ffb2295b 100644
--- a/packages/apollo/src/assets/sass/_overrides.scss
+++ b/packages/apollo/src/assets/sass/_overrides.scss
@@ -1,24 +1,24 @@
.ibm {
- .bx--overflow-menu-options {
+ .cds--overflow-menu-options {
width: 12rem;
}
- .bx--tooltip__trigger.bx--tooltip__trigger--definition+.bx--assistive-text,
- .bx--tooltip__trigger.bx--tooltip__trigger--definition.bx--tooltip--top:after,
- .bx--tooltip__trigger.bx--tooltip__trigger--definition.bx--tooltip--top:focus+.bx--assistive-text,
- .bx--tooltip__trigger.bx--tooltip__trigger--definition.bx--tooltip--top:focus .bx--assistive-text,
- .bx--tooltip__trigger.bx--tooltip__trigger--definition.bx--tooltip--top:hover+.bx--assistive-text,
- .bx--tooltip__trigger.bx--tooltip__trigger--definition.bx--tooltip--top:hover .bx--assistive-text,
- .bx--tooltip__trigger.bx--tooltip__trigger--definition.bx--tooltip--bottom:after,
- .bx--tooltip__trigger.bx--tooltip__trigger--definition.bx--tooltip--bottom:focus+.bx--assistive-text,
- .bx--tooltip__trigger.bx--tooltip__trigger--definition.bx--tooltip--bottom:focus .bx--assistive-text,
- .bx--tooltip__trigger.bx--tooltip__trigger--definition.bx--tooltip--bottom:hover+.bx--assistive-text,
- .bx--tooltip__trigger.bx--tooltip__trigger--definition.bx--tooltip--bottom:hover .bx--assistive-text {
+ .cds--tooltip__trigger.cds--tooltip__trigger--definition+.cds--assistive-text,
+ .cds--tooltip__trigger.cds--tooltip__trigger--definition.cds--tooltip--top:after,
+ .cds--tooltip__trigger.cds--tooltip__trigger--definition.cds--tooltip--top:focus+.cds--assistive-text,
+ .cds--tooltip__trigger.cds--tooltip__trigger--definition.cds--tooltip--top:focus .cds--assistive-text,
+ .cds--tooltip__trigger.cds--tooltip__trigger--definition.cds--tooltip--top:hover+.cds--assistive-text,
+ .cds--tooltip__trigger.cds--tooltip__trigger--definition.cds--tooltip--top:hover .cds--assistive-text,
+ .cds--tooltip__trigger.cds--tooltip__trigger--definition.cds--tooltip--bottom:after,
+ .cds--tooltip__trigger.cds--tooltip__trigger--definition.cds--tooltip--bottom:focus+.cds--assistive-text,
+ .cds--tooltip__trigger.cds--tooltip__trigger--definition.cds--tooltip--bottom:focus .cds--assistive-text,
+ .cds--tooltip__trigger.cds--tooltip__trigger--definition.cds--tooltip--bottom:hover+.cds--assistive-text,
+ .cds--tooltip__trigger.cds--tooltip__trigger--definition.cds--tooltip--bottom:hover .cds--assistive-text {
max-width: 20rem;
}
- .bx--tooltip__trigger.bx--tooltip__trigger--definition.bx--tooltip--top+.bx--assistive-text,
- .bx--tooltip__trigger.bx--tooltip__trigger--definition.bx--tooltip--bottom+.bx--assistive-text {
+ .cds--tooltip__trigger.cds--tooltip__trigger--definition.cds--tooltip--top+.cds--assistive-text,
+ .cds--tooltip__trigger.cds--tooltip__trigger--definition.cds--tooltip--bottom+.cds--assistive-text {
min-width: 20rem;
}
}
@@ -27,6 +27,6 @@ body #teconsent {
display: none !important;
}
-.bx--toggle__switch {
+.cds--toggle__switch {
white-space: nowrap;
}
diff --git a/packages/apollo/src/assets/sass/_variables.scss b/packages/apollo/src/assets/sass/_variables.scss
index e844b5c7..543cc72b 100644
--- a/packages/apollo/src/assets/sass/_variables.scss
+++ b/packages/apollo/src/assets/sass/_variables.scss
@@ -1,42 +1,46 @@
-$background: $carbon--cool-gray-100;
-$text: $carbon--white-0;
-$inverseText: $carbon--cool-gray-90;
+@use '@carbon/styles/scss/components/button';
+
+$background: $cool-gray-100;
+$text: $white-0;
+$inverseText: $cool-gray-90;
$inverseBackground: $text;
$inverseText: $background;
-$itemBackground: $carbon--cool-gray-90;
-$itemHover: $carbon--cool-gray-80;
-$action: $interactive-01;
-$actionHover: $carbon--blue-70;
-$secondaryAction: $carbon--blue-70;
-$secondaryActionHover: $carbon--blue-80;
-$navigationHover: $carbon--blue-40;
-$cancelButton: $carbon--cool-gray-60;
-$cancelButtonHover: $carbon--cool-gray-70;
-$buttonDisabled: $carbon--cool-gray-80;
-$sidePanelBackground: $carbon--cool-gray-100;
-$success: $carbon--green-50;
-$white: $carbon--white-0;
+$itemBackground: $cool-gray-90;
+$itemHover: $cool-gray-80;
+$action: button.$button-primary;
+// #0f62fe;
+// $interactive-01;
+$actionHover: $blue-70;
+$secondaryAction: $blue-70;
+$secondaryActionHover: $blue-80;
+$navigationHover: $blue-40;
+$cancelButton: $cool-gray-60;
+$cancelButtonHover: $cool-gray-70;
+$buttonDisabled: $cool-gray-80;
+$sidePanelBackground: $cool-gray-100;
+$success: $green-50;
+$white: $white-0;
// alert colors
-$running: $carbon--green-50;
-$pending: $support-03;
-$warning: $support-03;
+$running: $green-50;
+$pending: #f1c21b; //$support-03;
+$warning: #f1c21b; //$support-03;
$warningSecondary: #735f1b;
-$stopped: $support-01;
-$stoppedSecondary: $carbon--red-80;
+$stopped: #da1e28; //$support-01;
+$stoppedSecondary: $red-80;
// fields
-$field-background: $carbon--cool-gray-90;
-$field-color: $carbon--cool-gray-50;
+$field-background: $cool-gray-90;
+$field-color: $cool-gray-50;
$field-border: transparent;
-$field-label-color: $carbon--cool-gray-30;
-$field-focus-color: $carbon--cool-gray-10;
-$field-focus-border: $carbon--white-0;
-$field-error: $support-01;
+$field-label-color: $cool-gray-30;
+$field-focus-color: $cool-gray-10;
+$field-focus-border: $white-0;
+$field-error: #da1e28; //$support-01;
// color coding
-$codeKeywordPrimary: $carbon--purple-40;
-$codeKeywordSecondary: $carbon--teal-40;
+$codeKeywordPrimary: $purple-40;
+$codeKeywordSecondary: $teal-40;
// transition
$basic-duo-transition: all 0.2s cubic-bezier(0.2, 0.2, 0.38, 0.9);
@@ -52,3 +56,9 @@ $panelOpenLayer: 6000;
$panelOpenButtonLayer: 7000;
$sidePanelError: 8000;
$highestLayer: 10001;
+
+$inverse-support-01: $red-60;
+$hover-danger: button.$button-danger-hover;
+$disabled-03: $cool-gray-60;
+$support-01: $red-60;
+$visited-link: $link-visited;
diff --git a/packages/apollo/src/assets/sass/imports.scss b/packages/apollo/src/assets/sass/imports.scss
index 1d73cc51..1af8e195 100644
--- a/packages/apollo/src/assets/sass/imports.scss
+++ b/packages/apollo/src/assets/sass/imports.scss
@@ -1,14 +1,21 @@
$font-path: './assets/fonts';
@import './overrides';
-@import 'carbon-components/scss/globals/scss/styles.scss';
-@import 'carbon-components/scss/globals/scss/_typography.scss';
-@import 'carbon-components/scss/globals/scss/_vars.scss';
-@import 'carbon-components/scss/globals/scss/vendor/@carbon/layout/scss/_breakpoint.scss';
-@import 'carbon-components/scss/globals/scss/_mixins.scss';
-@import '@carbon/type/scss/type.scss';
-@import '@carbon/type/scss/font-face/_mono.scss';
-@import '@carbon/type/scss/font-face/_sans.scss';
+$fonts: (
+ IBM-Plex-Mono: false,
+ IBM-Plex-Sans-Arabic: false,
+ IBM-Plex-Sans-Devanagari: false,
+ IBM-Plex-Sans-Hebrew: false,
+ IBM-Plex-Sans-Thai-Looped: false,
+ IBM-Plex-Sans-Thai: false,
+ IBM-Plex-Sans: false,
+ IBM-Plex-Serif: false,
+);
+
+@import '@carbon/styles';
+
+// @import '@carbon/styles/scss/fonts/_mono.scss';
+// @import '@carbon/styles/scss/fonts/_sans.scss';
@import './variables';
@import './mixins';
diff --git a/packages/apollo/src/components/Access/Access.js b/packages/apollo/src/components/Access/Access.js
new file mode 100644
index 00000000..a24847b4
--- /dev/null
+++ b/packages/apollo/src/components/Access/Access.js
@@ -0,0 +1,938 @@
+/*
+ * Copyright contributors to the Hyperledger Fabric Operations Console project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { Loading, OverflowMenu, OverflowMenuItem, SkeletonText } from '@carbon/react';
+import PropTypes from 'prop-types';
+import React, { Component } from 'react';
+import { withTranslation } from 'react-i18next';
+import { connect } from 'react-redux';
+import { clearNotifications, showBreadcrumb, showError, showSuccess, updateState } from '../../redux/commonActions';
+import ConfigureAuthApi from '../../rest/ConfigureAuthApi';
+import ActionsHelper from '../../utils/actionsHelper';
+import Helper from '../../utils/helper';
+import AddUserModal from '../AddUserModal/AddUserModal';
+import BlockchainTooltip from '../BlockchainTooltip/BlockchainTooltip';
+import EditAuthSchemePanel from '../EditAuthSchemePanel/EditAuthSchemePanel';
+import ItemContainer from '../ItemContainer/ItemContainer';
+import Logger from '../Log/Logger';
+import PageContainer from '../PageContainer/PageContainer';
+import PageHeader from '../PageHeader/PageHeader';
+import ResetPasswordModal from '../ResetPasswordModal/ResetPasswordModal';
+import SVGs from '../Svgs/Svgs';
+import TranslateLink from '../TranslateLink/TranslateLink';
+import DeleteAccessModal from '../DeleteAccessModal/DeleteAccessModal';
+import SidePanel from '../SidePanel/SidePanel';
+import Form from '../Form/Form';
+import * as constants from '../../utils/constants';
+import withRouter from '../../hoc/withRouter';
+
+const SCOPE = 'access';
+const Log = new Logger(SCOPE);
+let login_interval = null;
+let admin_count = 0;
+
+export class Access extends Component {
+ cName = 'Access';
+
+ componentDidMount() {
+ this.props.showBreadcrumb('users', {}, this.props.history.location.pathname, true);
+
+ this.getAuthDetails();
+ if (ActionsHelper.canManageUsers(this.props.userInfo)) {
+ this.getApikeyDetails();
+ }
+ }
+
+ getAuthDetails = (skip_cache) => {
+ this.props.updateState(SCOPE, {
+ loading: true,
+ });
+ ConfigureAuthApi.getAuthScheme(skip_cache).then(
+ (resp) => {
+ ConfigureAuthApi.listUsers(skip_cache).then((resp2) => {
+ let all_users = [];
+
+ // first find the current user and put them first
+ for (const id in resp2.users) {
+ if (this.props.userInfo && this.props.userInfo.loggedInAs && resp2.users[id].email === this.props.userInfo.loggedInAs.email) {
+ all_users.push({
+ uuid: id,
+ id: resp2.users[id].email, // multi select items need an "id" field
+ email: resp2.users[id].email,
+ created: new Date(resp2.users[id].created).toDateString(),
+ roles: resp2.users[id].roles,
+ disabled: true,
+ });
+ if (resp2.users[id].roles.includes('manager')) {
+ admin_count = admin_count + 1;
+ }
+ delete resp2.users[id];
+ break;
+ }
+ }
+
+ // second list the users that are pending
+ for (const id in resp2.users) {
+ if (resp2.users[id] && (!Array.isArray(resp2.users[id].roles) || resp2.users[id].roles.length === 0)) {
+ all_users.push({
+ uuid: id,
+ id: resp2.users[id].email, // multi select items need an "id" field
+ email: resp2.users[id].email,
+ created: new Date(resp2.users[id].created).toDateString(),
+ roles: resp2.users[id].roles,
+ });
+ delete resp2.users[id];
+ }
+ }
+
+ // last list everyone else
+ for (const id in resp2.users) {
+ all_users.push({
+ uuid: id,
+ id: resp2.users[id].email, // multi select items need an "id" field
+ email: resp2.users[id].email,
+ created: new Date(resp2.users[id].created).toDateString(),
+ roles: resp2.users[id].roles,
+ });
+ if (resp2.users[id].roles.includes('manager')) {
+ admin_count = admin_count + 1;
+ }
+ }
+
+ this.props.updateState(SCOPE, {
+ loading: false,
+ oauth_url: resp.oauth_url,
+ secret: resp.secret,
+ tenant_id: resp.tenant_id,
+ client_id: resp.client_id,
+ all_users: all_users,
+ isManager: this.props.userInfo ? ActionsHelper.canManageUsers(this.props.userInfo) : false,
+ isWriter: this.props.userInfo ? ActionsHelper.canManageApiKeys(this.props.userInfo) : false,
+ auth_scheme: resp.auth_scheme,
+ in_read_only_mode: resp.in_read_only_mode === true,
+ });
+ });
+ },
+ (error) => {
+ Log.error(error);
+ this.props.updateState(SCOPE, {
+ loading: false,
+ });
+ this.props.showError('error_getting_auth_details', {}, SCOPE);
+ }
+ );
+ };
+
+ // get all the api keys
+ getApikeyDetails = async (skip_cache) => {
+ this.props.updateState(SCOPE, {
+ api_keys_loading: true,
+ all_apikeys: [],
+ });
+ try {
+ const resp = await ConfigureAuthApi.listApiKeys(skip_cache);
+ const all_keys = [];
+ for (const id in resp.keys) {
+ all_keys.push({
+ id: resp.keys[id].api_key, // multi select items need an "id" field
+ api_key: resp.keys[id].api_key,
+ description: resp.keys[id].description,
+ created: new Date(resp.keys[id].ts_created).toDateString(),
+ roles: resp.keys[id].roles,
+ });
+ }
+ this.props.updateState(SCOPE, {
+ api_keys_loading: false,
+ all_apikeys: all_keys,
+ });
+ } catch (e) {
+ console.error('unable to load api keys, error', e);
+ }
+ };
+
+ openAddUserModal = (type) => {
+ this.props.updateState(SCOPE, {
+ showAddUserModal: true,
+ addModalType: type,
+ });
+ };
+
+ openEditUserModal = (user) => {
+ if (admin_count < 2 && user.roles.includes('manager')) {
+ this.props.updateState(SCOPE, {
+ showAddUserModal: true,
+ editMode: true,
+ user: user,
+ disableUpdate: true,
+ });
+ } else {
+ this.props.updateState(SCOPE, {
+ showAddUserModal: true,
+ editMode: true,
+ user: user,
+ disableUpdate: false,
+ });
+ }
+ };
+
+ openResetPasswordModal = (user) => {
+ this.props.updateState(SCOPE, {
+ showResetPasswordModal: true,
+ user: user,
+ });
+ };
+
+ closeResetPasswordModal = () => {
+ this.props.updateState(SCOPE, {
+ showResetPasswordModal: false,
+ user: null,
+ });
+ };
+
+ closeAddUserModal = () => {
+ this.props.updateState(SCOPE, {
+ showAddUserModal: false,
+ editMode: false,
+ user: null,
+ });
+ };
+
+ openDeleteModal = (type, things) => {
+ this.props.updateState(SCOPE, {
+ showDeleteModal: true,
+ delModalType: type,
+ delThings: things,
+ });
+ };
+
+ closeDeleteModal = (type) => {
+ this.props.updateState(SCOPE, {
+ showDeleteModal: false,
+ });
+ };
+
+ checkRole = (user, role) => {
+ if (user && user.roles && user.roles.includes(role)) {
+ return (
+
+
+
+ );
+ }
+ };
+
+ // build the cell contents for the attention column
+ buildAttentionCell = (user) => {
+ const translate = this.props.t;
+
+ // is a new registered user
+ if (!Array.isArray(user.roles) || user.roles.length === 0) {
+ return
{translate('pending_user_icon_txt')}
;
+ }
+
+ // this row if for the currently logged in user
+ else if (this.props.userInfo && this.props.userInfo.loggedInAs && user.id === this.props.userInfo.loggedInAs.email) {
+ return