feat: add more info on bitcoin transaction parsing
What changed, and why it matters
This commit improves the Bitcoin transaction review screen on Keystone hardware wallets. It adds clearer warnings and labels when a transaction uses unusual signature modes (SIGHASH_SINGLE or SIGHASH_NONE) or when the fee cannot be calculated exactly (for example, with ANYONE_CAN_PAY inputs). It also fixes a small display issue where line breaks in help text were shown as raw '\r\n' characters. Overall, this is a defensive user-interface improvement rather than an attack.
No urgent action required. Treat as a normal firmware improvement. Users should ensure they review the new warnings on the device before signing Bitcoin transactions, especially those involving partial signatures or market-place/listing transactions.
Security signals we found
Adds UI warnings for non-standard Bitcoin sighash types (SIGHASH_SINGLE, SIGHASH_NONE) that can leave outputs unprotected
Changes fee display from a fixed numeric value to 'Unknown' or lower-bound indicator when inputs do not fully commit to the fee
Adds unit tests for the new sighash detection and fee-boundary logic
Fixes help-text line-break rendering (\r\n -> \n) in generated i18n strings
Evidence from the diff
The patch extends the Rust Bitcoin transaction parser to detect and report: the unified ECDSA sighash type, whether any input uses SIGHASH_SINGLE/SIGHASH_NONE, and whether the fee is a lower bound or unknown. It changes fee computation from a special-case zero for ANYONE_CAN_PAY to a saturating subtraction, and flags fees as unknown when non-ALL sighash modes are present or when outputs exceed known inputs. The C UI then displays ‘Unknown’ or ‘>=
Changed components
rust/apps/bitcoin/src/transactions/parsed_tx.rsrust/apps/bitcoin/src/lib.rsrust/rust_c/src/bitcoin/structs.rssrc/ui/gui_chain/gui_btc.csrc/ui/lv_i18n/data.csvsrc/ui/lv_i18n/lv_i18n.cInspect captured patch +602 / −157
diff --git a/rust/apps/bitcoin/src/lib.rs b/rust/apps/bitcoin/src/lib.rs
index c0588ac..cc37a99 100644
--- a/rust/apps/bitcoin/src/lib.rs
+++ b/rust/apps/bitcoin/src/lib.rs
@@ -172,6 +172,11 @@ mod test {
is_multisig: false,
need_sign: true,
has_witness_only_inputs: false,
+ fee_is_lower_bound: false,
+ fee_is_unknown: false,
+ sighash_type: Some("ALL".to_string()),
+ is_sighash_single: false,
+ is_sighash_none: false,
}
};
}
@@ -224,6 +229,8 @@ mod test {
total_input_sat: $total_input_sat.to_string(),
total_output_sat: $total_output_sat.to_string(),
fee_sat: $fee_sat.to_string(),
+ fee_is_lower_bound: false,
+ fee_is_unknown: false,
network: $network.to_string(),
sign_status: Some("Unsigned".to_string()),
}
diff --git a/rust/apps/bitcoin/src/transactions/parsed_tx.rs b/rust/apps/bitcoin/src/transactions/parsed_tx.rs
index befd174..55d07c9 100644
--- a/rust/apps/bitcoin/src/transactions/parsed_tx.rs
+++ b/rust/apps/bitcoin/src/transactions/parsed_tx.rs
@@ -64,6 +64,11 @@ pub struct OverviewTx {
pub sign_status: Option<String>,
pub need_sign: bool,
pub has_witness_only_inputs: bool,
+ pub fee_is_lower_bound: bool,
+ pub fee_is_unknown: bool,
+ pub sighash_type: Option<String>,
+ pub is_sighash_single: bool,
+ pub is_sighash_none: bool,
}
#[derive(Debug, Clone, Eq, PartialEq)]
@@ -76,6 +81,8 @@ pub struct DetailTx {
pub total_output_sat: String,
pub fee_amount: String,
pub fee_sat: String,
+ pub fee_is_lower_bound: bool,
+ pub fee_is_unknown: bool,
pub network: String,
pub sign_status: Option<String>,
}
@@ -106,6 +113,49 @@ impl ParseContext {
pub const DIVIDER: f64 = 100_000_000_f64;
pub trait TxParser {
+ fn get_unified_tx_sighash_type(inputs: &[ParsedInput]) -> Option<u8> {
+ let first = inputs.first()?;
+ if inputs
+ .iter()
+ .all(|input| input.ecdsa_sighash_type == first.ecdsa_sighash_type)
+ {
+ Some(first.ecdsa_sighash_type)
+ } else {
+ None
+ }
+ }
+
+ fn format_sighash_type(ecdsa_sighash_type: u8) -> Option<String> {
+ let base = match ecdsa_sighash_type & 0x1f {
+ 0x01 => "ALL",
+ 0x02 => "NONE",
+ 0x03 => "SINGLE",
+ _ => return None,
+ };
+
+ if ecdsa_sighash_type & 0x80 > 0 {
+ Some(format!("{base}|ANYONE_CAN_PAY"))
+ } else {
+ Some(base.to_string())
+ }
+ }
+
+ fn get_tx_sighash_type(inputs: &[ParsedInput]) -> Option<String> {
+ Self::get_unified_tx_sighash_type(inputs).and_then(Self::format_sighash_type)
+ }
+
+ fn is_tx_sighash_single(inputs: &[ParsedInput]) -> bool {
+ inputs
+ .iter()
+ .any(|input| matches!(input.ecdsa_sighash_type & 0x1f, 0x03))
+ }
+
+ fn is_tx_sighash_none(inputs: &[ParsedInput]) -> bool {
+ inputs
+ .iter()
+ .any(|input| matches!(input.ecdsa_sighash_type & 0x1f, 0x02))
+ }
+
fn format_amount(value: u64, network: &dyn NetworkT) -> String {
format!("{} {}", (value as f64).div(DIVIDER), network.get_unit())
}
@@ -168,11 +218,9 @@ pub trait TxParser {
let total_input_value = inputs.iter().fold(0, |acc, cur| acc + cur.value);
let total_output_value = outputs.iter().fold(0, |acc, cur| acc + cur.value);
let has_anyone_can_pay = inputs.iter().any(|v| v.ecdsa_sighash_type & 0x80 > 0);
- let fee = if has_anyone_can_pay {
- 0
- } else {
- total_input_value - total_output_value
- };
+ let has_unlocked_outputs = inputs
+ .iter()
+ .any(|v| !matches!(v.ecdsa_sighash_type & 0x1f, 0x01));
// in some special cases like Unisat Listing transaction, transaction input will be less than output value
// for these wallet will reassemble the transaction on their end.
if !has_anyone_can_pay && (total_input_value < total_output_value) {
@@ -180,6 +228,12 @@ pub trait TxParser {
"inputs total value is less than outputs total value".to_string(),
));
}
+ let fee_is_unknown =
+ has_unlocked_outputs || (has_anyone_can_pay && total_input_value < total_output_value);
+ let fee_is_lower_bound = has_anyone_can_pay && !fee_is_unknown;
+ let fee = total_input_value.saturating_sub(total_output_value);
+ let fee_amount = Self::format_amount(fee, network);
+ let fee_sat = Self::format_sat(fee);
let overview_amount = outputs.iter().fold(0, |acc, cur| {
if cur.path.is_none() {
return acc + cur.value;
@@ -209,11 +263,16 @@ pub trait TxParser {
overview_to.dedup();
let overview = OverviewTx {
has_witness_only_inputs,
+ sighash_type: Self::get_tx_sighash_type(&inputs),
+ is_sighash_single: Self::is_tx_sighash_single(&inputs),
+ is_sighash_none: Self::is_tx_sighash_none(&inputs),
sign_status: Self::get_sign_status_text(&inputs),
total_output_amount: Self::format_amount(overview_amount, network),
- fee_amount: Self::format_amount(fee, network),
+ fee_amount: fee_amount.clone(),
total_output_sat: Self::format_sat(overview_amount),
- fee_sat: Self::format_sat(fee),
+ fee_sat: fee_sat.clone(),
+ fee_is_lower_bound,
+ fee_is_unknown,
from: overview_from,
to: overview_to,
network: network.normalize(),
@@ -227,12 +286,212 @@ pub trait TxParser {
to: outputs,
total_input_amount: Self::format_amount(total_input_value, network),
total_output_amount: Self::format_amount(total_output_value, network),
- fee_amount: Self::format_amount(fee, network),
+ fee_amount,
total_input_sat: Self::format_sat(total_input_value),
total_output_sat: Self::format_sat(total_output_value),
- fee_sat: Self::format_sat(fee),
+ fee_sat,
+ fee_is_lower_bound,
+ fee_is_unknown,
network: network.normalize(),
};
Ok(ParsedTx { overview, detail })
}
}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ struct DummyParser;
+
+ impl TxParser for DummyParser {
+ fn parse(&self, _context: Option<&ParseContext>) -> Result<ParsedTx> {
+ unreachable!()
+ }
+
+ fn determine_network(&self) -> Result<Network> {
+ unreachable!()
+ }
+ }
+
+ fn build_input(sighash_type: u8) -> ParsedInput {
+ ParsedInput {
+ address: None,
+ amount: "0 BTC".to_string(),
+ value: 0,
+ input_txid: String::new(),
+ input_vout: 0,
+ path: None,
+ sign_status: (0, 1),
+ is_multisig: false,
+ is_external: false,
+ need_sign: false,
+ ecdsa_sighash_type: sighash_type,
+ }
+ }
+
+ fn build_input_with_value(value: u64, sighash_type: u8) -> ParsedInput {
+ ParsedInput {
+ value,
+ ..build_input(sighash_type)
+ }
+ }
+
+ fn build_output(value: u64) -> ParsedOutput {
+ ParsedOutput {
+ address: String::new(),
+ amount: "0 BTC".to_string(),
+ value,
+ path: None,
+ is_external: true,
+ is_mine: false,
+ }
+ }
+
+ #[test]
+ fn test_format_sighash_type() {
+ assert_eq!(
+ DummyParser::format_sighash_type(0x01),
+ Some("ALL".to_string())
+ );
+ assert_eq!(
+ DummyParser::format_sighash_type(0x02),
+ Some("NONE".to_string())
+ );
+ assert_eq!(
+ DummyParser::format_sighash_type(0x03),
+ Some("SINGLE".to_string())
+ );
+ assert_eq!(
+ DummyParser::format_sighash_type(0x81),
+ Some("ALL|ANYONE_CAN_PAY".to_string())
+ );
+ assert_eq!(
+ DummyParser::format_sighash_type(0x82),
+ Some("NONE|ANYONE_CAN_PAY".to_string())
+ );
+ assert_eq!(
+ DummyParser::format_sighash_type(0x83),
+ Some("SINGLE|ANYONE_CAN_PAY".to_string())
+ );
+ assert_eq!(DummyParser::format_sighash_type(0x00), None);
+ }
+
+ #[test]
+ fn test_get_tx_sighash_type() {
+ assert_eq!(
+ DummyParser::get_tx_sighash_type(&[build_input(0x83), build_input(0x83)]),
+ Some("SINGLE|ANYONE_CAN_PAY".to_string())
+ );
+ assert_eq!(
+ DummyParser::get_tx_sighash_type(&[build_input(0x01), build_input(0x02)]),
+ None
+ );
+ assert_eq!(DummyParser::get_tx_sighash_type(&[]), None);
+ }
+
+ #[test]
+ fn test_get_tx_sighash_warning_flags() {
+ assert!(DummyParser::is_tx_sighash_single(&[
+ build_input(0x03),
+ build_input(0x03)
+ ]));
+ assert!(DummyParser::is_tx_sighash_single(&[
+ build_input(0x83),
+ build_input(0x83)
+ ]));
+ assert!(!DummyParser::is_tx_sighash_single(&[build_input(0x02)]));
+
+ assert!(DummyParser::is_tx_sighash_none(&[
+ build_input(0x02),
+ build_input(0x02)
+ ]));
+ assert!(DummyParser::is_tx_sighash_none(&[
+ build_input(0x82),
+ build_input(0x82)
+ ]));
+ assert!(!DummyParser::is_tx_sighash_none(&[build_input(0x03)]));
+
+ assert!(DummyParser::is_tx_sighash_single(&[
+ build_input(0x03),
+ build_input(0x83)
+ ]));
+ assert!(DummyParser::is_tx_sighash_none(&[
+ build_input(0x02),
+ build_input(0x82)
+ ]));
+ assert!(DummyParser::is_tx_sighash_single(&[
+ build_input(0x01),
+ build_input(0x03)
+ ]));
+ assert!(DummyParser::is_tx_sighash_none(&[
+ build_input(0x01),
+ build_input(0x02)
+ ]));
+ }
+
+ #[test]
+ fn test_anyone_can_pay_fee_is_lower_bound() {
+ let parsed = DummyParser
+ .normalize(
+ vec![build_input_with_value(1_000, 0x81)],
+ vec![build_output(600)],
+ &Network::Bitcoin,
+ false,
+ )
+ .unwrap();
+
+ assert!(parsed.overview.fee_is_lower_bound);
+ assert!(parsed.detail.fee_is_lower_bound);
+ assert!(!parsed.overview.fee_is_unknown);
+ assert!(!parsed.detail.fee_is_unknown);
+ assert_eq!("0.000004 BTC", parsed.overview.fee_amount);
+ assert_eq!("400 sats", parsed.overview.fee_sat);
+ assert_eq!("0.000004 BTC", parsed.detail.fee_amount);
+ assert_eq!("400 sats", parsed.detail.fee_sat);
+ }
+
+ #[test]
+ fn test_anyone_can_pay_fee_is_unknown_when_outputs_exceed_inputs() {
+ let parsed = DummyParser
+ .normalize(
+ vec![build_input_with_value(600, 0x81)],
+ vec![build_output(1_000)],
+ &Network::Bitcoin,
+ false,
+ )
+ .unwrap();
+
+ assert!(!parsed.overview.fee_is_lower_bound);
+ assert!(!parsed.detail.fee_is_lower_bound);
+ assert!(parsed.overview.fee_is_unknown);
+ assert!(parsed.detail.fee_is_unknown);
+ assert_eq!("0 BTC", parsed.overview.fee_amount);
+ assert_eq!("0 sats", parsed.overview.fee_sat);
+ assert_eq!("0 BTC", parsed.detail.fee_amount);
+ assert_eq!("0 sats", parsed.detail.fee_sat);
+ }
+
+ #[test]
+ fn test_unlocked_outputs_fee_is_unknown() {
+ for sighash_type in [0x02, 0x03, 0x82, 0x83] {
+ let parsed = DummyParser
+ .normalize(
+ vec![build_input_with_value(1_000, sighash_type)],
+ vec![build_output(600)],
+ &Network::Bitcoin,
+ false,
+ )
+ .unwrap();
+
+ assert!(!parsed.overview.fee_is_lower_bound);
+ assert!(!parsed.detail.fee_is_lower_bound);
+ assert!(parsed.overview.fee_is_unknown);
+ assert!(parsed.detail.fee_is_unknown);
+ assert_eq!("0.000004 BTC", parsed.overview.fee_amount);
+ assert_eq!("400 sats", parsed.overview.fee_sat);
+ assert_eq!("0.000004 BTC", parsed.detail.fee_amount);
+ assert_eq!("400 sats", parsed.detail.fee_sat);
+ }
+ }
+}
diff --git a/rust/rust_c/src/bitcoin/structs.rs b/rust/rust_c/src/bitcoin/structs.rs
index 02f9ef0..18224e7 100644
--- a/rust/rust_c/src/bitcoin/structs.rs
+++ b/rust/rust_c/src/bitcoin/structs.rs
@@ -63,6 +63,11 @@ pub struct DisplayTxOverview {
sign_status: PtrString,
need_sign: bool,
has_witness_only_inputs: bool,
+ fee_is_lower_bound: bool,
+ fee_is_unknown: bool,
+ sighash_type: PtrString,
+ is_sighash_single: bool,
+ is_sighash_none: bool,
}
impl_c_ptr!(DisplayTxOverview);
@@ -78,6 +83,8 @@ pub struct DisplayTxDetail {
total_input_sat: PtrString,
total_output_sat: PtrString,
fee_sat: PtrString,
+ fee_is_lower_bound: bool,
+ fee_is_unknown: bool,
sign_status: PtrString,
}
@@ -164,6 +171,11 @@ impl From<OverviewTx> for DisplayTxOverview {
},
need_sign: value.need_sign,
has_witness_only_inputs: value.has_witness_only_inputs,
+ fee_is_lower_bound: value.fee_is_lower_bound,
+ fee_is_unknown: value.fee_is_unknown,
+ sighash_type: value.sighash_type.map(convert_c_char).unwrap_or(null_mut()),
+ is_sighash_single: value.is_sighash_single,
+ is_sighash_none: value.is_sighash_none,
}
}
}
@@ -194,6 +206,8 @@ impl From<DetailTx> for DisplayTxDetail {
total_output_sat: convert_c_char(value.total_output_sat),
total_input_sat: convert_c_char(value.total_input_sat),
fee_sat: convert_c_char(value.fee_sat),
+ fee_is_lower_bound: value.fee_is_lower_bound,
+ fee_is_unknown: value.fee_is_unknown,
sign_status: if let Some(sign_status) = value.sign_status {
convert_c_char(sign_status)
} else {
diff --git a/src/ui/gui_chain/gui_btc.c b/src/ui/gui_chain/gui_btc.c
index 24d4c33..12dfcc6 100644
--- a/src/ui/gui_chain/gui_btc.c
+++ b/src/ui/gui_chain/gui_btc.c
@@ -68,10 +68,13 @@ static uint8_t *g_psbtBytes = NULL;
static uint32_t g_psbtBytesLen = 0;
static TransactionParseResult_DisplayTx *g_parseResult = NULL;
static TransactionParseResult_DisplayBtcMsg *g_parseMsgResult = NULL;
-static const char *g_checkInputValueHintText = "Please confirm each input value is correct.";
static bool IsMultiSigTx(DisplayTx *data);
static bool NeedShowCheckInputValueHint(DisplayTx *data);
+static bool NeedShowSighashWarning(DisplayTx *data);
+static const char *GetSighashWarningText(DisplayTx *data);
+static const char *GetSighashDisplayText(const char *sighashType);
static void OpenInputRefQrCode(lv_event_t *e);
+static void FormatFeeText(char *out, size_t outLen, const char *feeText, bool isLowerBound, bool isUnknown);
static UREncodeResult *GetBtcSignDataDynamic(bool unLimit);
static void PreparePublicKeys(PtrT_CSliceFFI_ExtendedPublicKey public_keys, ExtendedPublicKey *keys);
@@ -597,10 +600,13 @@ void GetPsbtTotalOutAmount(void *indata, void *param, uint32_t maxLen)
void GetPsbtFeeAmount(void *indata, void *param, uint32_t maxLen)
{
DisplayTx *psbt = (DisplayTx *)param;
+ char feeText[BUFFER_SIZE_64] = {0};
+ FormatFeeText(feeText, sizeof(feeText), psbt->overview->fee_amount,
+ psbt->overview->fee_is_lower_bound, psbt->overview->fee_is_unknown);
if (psbt->overview->fee_larger_than_amount) {
- snprintf_s((char *)indata, maxLen, "#F55831 %s#", psbt->overview->fee_amount);
+ snprintf_s((char *)indata, maxLen, "#F55831 %s#", feeText);
} else {
- strcpy_s((char *)indata, maxLen, psbt->overview->fee_amount);
+ strcpy_s((char *)indata, maxLen, feeText);
}
}
@@ -613,10 +619,13 @@ void GetPsbtTotalOutSat(void *indata, void *param, uint32_t maxLen)
void GetPsbtFeeSat(void *indata, void *param, uint32_t maxLen)
{
DisplayTx *psbt = (DisplayTx *)param;
+ char feeText[BUFFER_SIZE_64] = {0};
+ FormatFeeText(feeText, sizeof(feeText), psbt->overview->fee_sat,
+ psbt->overview->fee_is_lower_bound, psbt->overview->fee_is_unknown);
if (psbt->overview->fee_larger_than_amount) {
- snprintf_s((char *)indata, maxLen, "#F55831 %s#", psbt->overview->fee_sat);
+ snprintf_s((char *)indata, maxLen, "#F55831 %s#", feeText);
} else {
- strcpy_s((char *)indata, maxLen, psbt->overview->fee_sat);
+ strcpy_s((char *)indata, maxLen, feeText);
}
}
@@ -641,7 +650,8 @@ void GetPsbtDetailOutputValue(void *indata, void *param, uint32_t maxLen)
void GetPsbtDetailFee(void *indata, void *param, uint32_t maxLen)
{
DisplayTx *psbt = (DisplayTx *)param;
- strcpy_s((char *)indata, maxLen, psbt->detail->fee_amount);
+ FormatFeeText((char *)indata, maxLen, psbt->detail->fee_amount, psbt->detail->fee_is_lower_bound,
+ psbt->detail->fee_is_unknown);
}
void *GetPsbtInputData(uint8_t *row, uint8_t *col, void *param)
@@ -782,10 +792,10 @@ static void OpenInputRefQrCode(lv_event_t *e)
char url[128] = {0};
char outpoint[160] = {0};
snprintf_s(url, sizeof(url), "https://mempool.space/tx/%s", inputData->input_txid);
- snprintf_s(outpoint, sizeof(outpoint), "Outpoint:\n%s:%u", inputData->input_txid,
+ snprintf_s(outpoint, sizeof(outpoint), "%s:\n%s:%u", _("btc_outpoint"), inputData->input_txid,
inputData->input_vout);
- GuiQRCodeHintBoxOpen(url, "Input Reference", outpoint);
+ GuiQRCodeHintBoxOpen(url, _("btc_input_reference"), outpoint);
}
static bool IsAvalancheTx(DisplayTx *data)
@@ -824,12 +834,17 @@ static void SwitchValueUnit(lv_event_t *e)
{
ClickParamItem_t *item = (ClickParamItem_t *)lv_event_get_user_data(e);
if (item != NULL) {
+ char feeText[BUFFER_SIZE_64] = {0};
if (*(item->isSat) == true) {
lv_label_set_text(item->amountValue, item->overviewData->total_output_amount);
- lv_label_set_text(item->feeValue, item->overviewData->fee_amount);
+ FormatFeeText(feeText, sizeof(feeText), item->overviewData->fee_amount,
+ item->overviewData->fee_is_lower_bound, item->overviewData->fee_is_unknown);
+ lv_label_set_text(item->feeValue, feeText);
} else {
lv_label_set_text(item->amountValue, item->overviewData->total_output_sat);
- lv_label_set_text(item->feeValue, item->overviewData->fee_sat);
+ FormatFeeText(feeText, sizeof(feeText), item->overviewData->fee_sat,
+ item->overviewData->fee_is_lower_bound, item->overviewData->fee_is_unknown);
+ lv_label_set_text(item->feeValue, feeText);
}
*item->isSat = !(*item->isSat);
}
@@ -838,6 +853,17 @@ static void SwitchValueUnit(lv_event_t *e)
static ClickParamItem_t clickParam;
static bool isSat = false;
+static void FormatFeeText(char *out, size_t outLen, const char *feeText, bool isLowerBound, bool isUnknown)
+{
+ if (isUnknown) {
+ strcpy_s(out, outLen, _("btc_fee_unknown"));
+ } else if (isLowerBound) {
+ snprintf_s(out, outLen, ">= %s", feeText);
+ } else {
+ strcpy_s(out, outLen, feeText);
+ }
+}
+
static lv_obj_t *CreateSignStatusView(lv_obj_t *parent, char *multi_sig_status)
{
lv_obj_t *signStatusContainer = GuiCreateContainerWithParent(parent, 408, 62);
@@ -883,7 +909,7 @@ static lv_obj_t *CreateAvalancheNoticeView(lv_obj_t *parent, lv_obj_t *lastView)
static lv_obj_t *CreateCheckInputValueHintView(lv_obj_t *parent, lv_obj_t *lastView)
{
- lv_obj_t *hintView = CreateNoticeCard(parent, g_checkInputValueHintText);
+ lv_obj_t *hintView = CreateNoticeCard(parent, _("btc_check_input_value_hint"));
if (lastView == NULL) {
lv_obj_align(hintView, LV_ALIGN_DEFAULT, 0, 0);
} else {
@@ -893,6 +919,38 @@ static lv_obj_t *CreateCheckInputValueHintView(lv_obj_t *parent, lv_obj_t *lastV
return hintView;
}
+static lv_obj_t *CreateSighashWarningView(lv_obj_t *parent, lv_obj_t *lastView, const char *warningText)
+{
+ uint16_t height = 24 + 36 + 8 + 24;
+ lv_obj_t *warningView = GuiCreateContainerWithParent(parent, 408, 24);
+ lv_obj_set_style_radius(warningView, 24, LV_PART_MAIN | LV_STATE_DEFAULT);
+ lv_obj_set_style_bg_color(warningView, RED_COLOR, LV_PART_MAIN | LV_STATE_DEFAULT);
+ lv_obj_set_style_bg_opa(warningView, 30, LV_PART_MAIN | LV_STATE_DEFAULT);
+
+ if (lastView == NULL) {
+ lv_obj_align(warningView, LV_ALIGN_DEFAULT, 0, 0);
+ } else {
+ lv_obj_align_to(warningView, lastView, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 16);
+ }
+
+ lv_obj_t *warningIcon = GuiCreateImg(warningView, &imgWarningRed);
+ lv_obj_align(warningIcon, LV_ALIGN_TOP_LEFT, 24, 24);
+
+ lv_obj_t *titleLabel = GuiCreateTextLabel(warningView, _("Warning"));
+ lv_obj_set_style_text_color(titleLabel, lv_color_hex(0xF55831), LV_PART_MAIN);
+ lv_obj_align_to(titleLabel, warningIcon, LV_ALIGN_OUT_RIGHT_MID, 8, 0);
+
+ lv_obj_t *contentLabel = GuiCreateIllustrateLabel(warningView, warningText);
+ lv_obj_set_width(contentLabel, 360);
+ lv_label_set_long_mode(contentLabel, LV_LABEL_LONG_WRAP);
+ lv_obj_update_layout(contentLabel);
+ height += lv_obj_get_self_height(contentLabel);
+ lv_obj_set_height(warningView, height);
+ lv_obj_align(contentLabel, LV_ALIGN_TOP_LEFT, 24, 68);
+
+ return warningView;
+}
+
static lv_obj_t *CreateInputRefView(lv_obj_t *parent, lv_obj_t *lastView, DisplayTxDetailInput *inputData)
{
lv_obj_t *inputRefContainer = GuiCreateContainerWithParent(parent, 160, 30);
@@ -904,7 +962,7 @@ static lv_obj_t *CreateInputRefView(lv_obj_t *parent, lv_obj_t *lastView, Displa
lv_obj_align_to(inputRefContainer, lastView, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 12);
lv_obj_add_event_cb(inputRefContainer, OpenInputRefQrCode, LV_EVENT_CLICKED, inputData);
- lv_obj_t *inputRefLabel = GuiCreateIllustrateLabel(inputRefContainer, "Input Ref");
+ lv_obj_t *inputRefLabel = GuiCreateIllustrateLabel(inputRefContainer, _("btc_input_ref"));
lv_obj_set_style_text_color(inputRefLabel, lv_color_hex(0x1BE0C6), LV_PART_MAIN);
lv_obj_align(inputRefLabel, LV_ALIGN_LEFT_MID, 0, 0);
lv_obj_clear_flag(inputRefLabel, LV_OBJ_FLAG_CLICKABLE);
@@ -944,7 +1002,10 @@ static lv_obj_t *CreateOverviewAmountView(lv_obj_t *parent, DisplayTxOverview *o
SetTitleLabelStyle(label);
lv_obj_t *feeValue = lv_label_create(amountContainer);
- lv_label_set_text(feeValue, overviewData->fee_amount);
+ char feeText[BUFFER_SIZE_64] = {0};
+ FormatFeeText(feeText, sizeof(feeText), overviewData->fee_amount,
+ overviewData->fee_is_lower_bound, overviewData->fee_is_unknown);
+ lv_label_set_text(feeValue, feeText);
lv_obj_align_to(feeValue, label, LV_ALIGN_OUT_RIGHT_MID, 16, 0);
lv_obj_set_style_text_font(feeValue, &openSansEnIllustrate, LV_PART_MAIN);
@@ -995,6 +1056,16 @@ static lv_obj_t *CreateNetworkView(lv_obj_t *parent, char *network, lv_obj_t *la
return networkContainer;
}
+static lv_obj_t *CreateSighashView(lv_obj_t *parent, char *sighashType, lv_obj_t *lastView)
+{
+ if (sighashType == NULL) {
+ return lastView;
+ }
+
+ char *displayText = (char *)GetSighashDisplayText(sighashType);
+ return CreateTransactionItemView(parent, _("btc_sighash"), displayText, lastView);
+}
+
static lv_obj_t *CreateOverviewFromView(lv_obj_t *parent, DisplayTxOverview *overviewData, lv_obj_t *lastView)
{
lv_obj_t *formContainer = GuiCreateContainerWithParent(parent, 408, 0);
@@ -1189,7 +1260,10 @@ static lv_obj_t *CreateDetailAmountView(lv_obj_t *parent, DisplayTxDetail *detai
SetTitleLabelStyle(label);
lv_obj_t *feeValue = lv_label_create(amountContainer);
- lv_label_set_text(feeValue, detailData->fee_amount);
+ char feeText[BUFFER_SIZE_64] = {0};
+ FormatFeeText(feeText, sizeof(feeText), detailData->fee_amount,
+ detailData->fee_is_lower_bound, detailData->fee_is_unknown);
+ lv_label_set_text(feeValue, feeText);
lv_obj_align_to(feeValue, label, LV_ALIGN_OUT_RIGHT_MID, 16, 0);
SetContentLableStyle(feeValue);
@@ -1383,6 +1457,10 @@ void GuiBtcTxOverview(lv_obj_t *parent, void *totalData)
lv_obj_t *lastView = NULL;
+ if (NeedShowSighashWarning(txData)) {
+ lastView = CreateSighashWarningView(parent, lastView, GetSighashWarningText(txData));
+ }
+
if (NeedShowCheckInputValueHint(txData)) {
lastView = CreateCheckInputValueHintView(parent, lastView);
}
@@ -1415,11 +1493,66 @@ void GuiBtcTxDetail(lv_obj_t *parent, void *totalData)
lastView = CreateSignStatusView(parent, detailData->sign_status);
}
lastView = CreateNetworkView(parent, detailData->network, lastView);
+ lastView = CreateSighashView(parent, txData->overview->sighash_type, lastView);
lastView = CreateDetailAmountView(parent, detailData, lastView);
lastView = CreateDetailFromView(parent, detailData, lastView);
CreateDetailToView(parent, detailData, lastView);
}
+static bool NeedShowSighashWarning(DisplayTx *data)
+{
+ if (data == NULL || data->overview == NULL) {
+ return false;
+ }
+
+ return data->overview->is_sighash_single || data->overview->is_sighash_none;
+}
+
+static const char *GetSighashWarningText(DisplayTx *data)
+{
+ if (data == NULL || data->overview == NULL) {
+ return NULL;
+ }
+
+ if (data->overview->is_sighash_single) {
+ return _("btc_sighash_single_warning");
+ }
+
+ if (data->overview->is_sighash_none) {
+ return _("btc_sighash_none_warning");
+ }
+
+ return NULL;
+}
+
+static const char *GetSighashDisplayText(const char *sighashType)
+{
+ if (sighashType == NULL) {
+ return "";
+ }
+
+ if (!strcmp(sighashType, "ALL")) {
+ return "All";
+ }
+ if (!strcmp(sighashType, "NONE")) {
+ return "None";
+ }
+ if (!strcmp(sighashType, "SINGLE")) {
+ return "Single";
+ }
+ if (!strcmp(sighashType, "ALL|ANYONE_CAN_PAY")) {
+ return "All | Anyone Can Pay";
+ }
+ if (!strcmp(sighashType, "NONE|ANYONE_CAN_PAY")) {
+ return "None | Anyone Can Pay";
+ }
+ if (!strcmp(sighashType, "SINGLE|ANYONE_CAN_PAY")) {
+ return "Single | Anyone Can Pay";
+ }
+
+ return sighashType;
+}
+
void GuiBtcMsg(lv_obj_t *parent, void *totalData)
{
DisplayBtcMsg *msgData = (DisplayBtcMsg *)totalData;
diff --git a/src/ui/lv_i18n/data.csv b/src/ui/lv_i18n/data.csv
index 357ccd1..8fb0e78 100644
--- a/src/ui/lv_i18n/data.csv
+++ b/src/ui/lv_i18n/data.csv
@@ -1059,4 +1059,12 @@ Wallet Profile,24,wallet_profile_mid_btn,Wallet Profile,Профиль коше
2.Native SegWit: formato SegWit totalmente nativo con tarifas más bajas y tamaños de transacción más pequeños. Cada vez más popular y compatible con la mayoría de las principales billeteras y exchanges.","1.Nested SegWit: ein Übergangsformat, bei dem SegWit in P2SH eingebettet ist. Es bietet eine bessere Effizienz als Legacy und ist aufgrund der breiten Kompatibilität das am häufigsten verwendete Format.
2.Native SegWit: vollständig natives SegWit-Format mit niedrigeren Gebühren und kleineren Transaktionsgrößen. Wird zunehmend beliebter und wird von den meisten großen Wallets und Börsen unterstützt.","1.Nested SegWit:SegWit を P2SH 内にネストした移行形式です。Legacy より効率的で、幅広い互換性により最も一般的に使用されている形式です。
2.Native SegWit:完全にネイティブな SegWit 形式で、手数料が低く、トランザクションサイズも小さくなります。主要なウォレットや取引所のほとんどでサポートされ、ますます普及しています。"
-,20,tap_to_see_more,"··· Tap to see more wallets","··· Нажмите, чтобы увидеть больше кошельков","··· 더 많은 지갑을 보려면 탭하세요","··· 点击查看更多钱包","··· Toca para ver más billeteras","··· Tippen Sie, um weitere Wallets zu sehen","··· タップして他のウォレットを見る"
\ No newline at end of file
+,20,tap_to_see_more,"··· Tap to see more wallets","··· Нажмите, чтобы увидеть больше кошельков","··· 더 많은 지갑을 보려면 탭하세요","··· 点击查看更多钱包","··· Toca para ver más billeteras","··· Tippen Sie, um weitere Wallets zu sehen","··· タップして他のウォレットを見る"
+,20,btc_check_input_value_hint,"Please confirm each input value is correct.","Пожалуйста, проверьте корректность суммы каждого входа.","각 입력 금액이 올바른지 확인해 주세요.","请确认每个输入金额都正确。","Confirma que el valor de cada entrada sea correcto.","Bitte bestätigen Sie, dass jeder Eingabewert korrekt ist.","各入力金額が正しいことを確認してください。"
+,20,btc_sighash_single_warning,"Only the corresponding output is locked. Other outputs may be changed after signing.","Зафиксирован только соответствующий выход. Другие выходы могут быть изменены после подписания.","해당 출력만 고정됩니다. 서명 후 다른 출력은 변경될 수 있습니다.","只有对应的输出被锁定。签名后其他输出仍可能被更改。","Solo la salida correspondiente está bloqueada. Las otras salidas pueden cambiarse después de firmar.","Nur der entsprechende Output ist festgelegt. Andere Outputs können nach dem Signieren geändert werden.","対応する出力のみが固定されます。署名後に他の出力が変更される可能性があります。"
+,20,btc_sighash_none_warning,"Outputs are not locked and this signature may be reused with different outputs.","Выходы не зафиксированы и эта подпись может быть повторно использована с другими выходами.","출력이 고정되지 않으며 이 서명은 다른 출력과 함께 재사용될 수 있습니다.","输出未被锁定,此签名可能被复用于不同的输出。","Las salidas no están bloqueadas y esta firma puede reutilizarse con salidas diferentes.","Outputs sind nicht festgelegt und diese Signatur kann mit anderen Outputs wiederverwendet werden.","出力は固定されておらず、この署名は別の出力で再利用される可能性があります。"
+,24,btc_input_reference,"Input Reference","Ссылка на вход","입력 참조","输入引用","Referencia de entrada","Input-Referenz","入力参照"
+,24,btc_input_ref,"Input Ref","Ссылка входа","입력 참조","输入引用","Ref. entrada","Input-Ref.","入力参照"
+,24,btc_sighash,"Sighash","Sighash","Sighash","签名哈希","Sighash","Sighash","Sighash"
+,24,btc_outpoint,"Outpoint","Выходная точка","아웃포인트","输出点","Outpoint","Outpoint","アウトポイント"
+,24,btc_fee_unknown,"Unknown","Неизвестно","알 수 없음","未知","Desconocido","Unbekannt","不明"
diff --git a/src/ui/lv_i18n/lv_i18n.c b/src/ui/lv_i18n/lv_i18n.c
index a1b4d16..5adb0cd 100644
--- a/src/ui/lv_i18n/lv_i18n.c
+++ b/src/ui/lv_i18n/lv_i18n.c
@@ -9,35 +9,13 @@
#define UNUSED(x) (void)(x)
-static inline uint32_t op_n(int32_t val)
-{
- return (uint32_t)(val < 0 ? -val : val);
-}
-static inline uint32_t op_i(uint32_t val)
-{
- return val;
-}
+static inline uint32_t op_n(int32_t val) { return (uint32_t)(val < 0 ? -val : val); }
+static inline uint32_t op_i(uint32_t val) { return val; }
// always zero, when decimal part not exists.
-static inline uint32_t op_v(uint32_t val)
-{
- UNUSED(val);
- return 0;
-}
-static inline uint32_t op_w(uint32_t val)
-{
- UNUSED(val);
- return 0;
-}
-static inline uint32_t op_f(uint32_t val)
-{
- UNUSED(val);
- return 0;
-}
-static inline uint32_t op_t(uint32_t val)
-{
- UNUSED(val);
- return 0;
-}
+static inline uint32_t op_v(uint32_t val) { UNUSED(val); return 0;}
+static inline uint32_t op_w(uint32_t val) { UNUSED(val); return 0; }
+static inline uint32_t op_f(uint32_t val) { UNUSED(val); return 0; }
+static inline uint32_t op_t(uint32_t val) { UNUSED(val); return 0; }
const static lv_i18n_phrase_t en_singulars[] = {
{"Address", "Address"},
@@ -163,6 +141,14 @@ const static lv_i18n_phrase_t en_singulars[] = {
{"boot_version_not_match_desc", "Your current firmware may have skipped the necessary security upgrade, please contact #1BE0C6 support@keyst.one# for assistance."},
{"boot_version_not_match_title", "Security Notification"},
{"btc_avalanche_notice", "This transaction uses an Avalanche BTC address. Verify all details carefully to avoid errors or asset loss."},
+ {"btc_check_input_value_hint", "Please confirm each input value is correct."},
+ {"btc_fee_unknown", "Unknown"},
+ {"btc_input_ref", "Input Ref"},
+ {"btc_input_reference", "Input Reference"},
+ {"btc_outpoint", "Outpoint"},
+ {"btc_sighash", "Sighash"},
+ {"btc_sighash_none_warning", "Outputs are not locked and this signature may be reused with different outputs."},
+ {"btc_sighash_single_warning", "Only the corresponding output is locked. Other outputs may be changed after signing."},
{"calculat_modal_title", "Calculating"},
{"catalyst_transactions_notice", "Ensure the address matches. Please verify carefully."},
{"catalyst_voting_registration", "Confirm Catalyst Registration"},
@@ -415,7 +401,7 @@ const static lv_i18n_phrase_t en_singulars[] = {
{"firmware_update_no_upgradable_firmware_desc", "Your device firmware version is higher than or equal to the one on your microSD card."},
{"firmware_update_no_upgradable_firmware_title", "No Upgradable Firmware Detected"},
{"firmware_update_sd_checksum_desc", "#F5870A Show Checksum#"},
- {"firmware_update_sd_checksum_done", "Checksum:\r\n"},
+ {"firmware_update_sd_checksum_done", "Checksum:\n"},
{"firmware_update_sd_checksum_fmt", "#F5870A Show Checksum(%d%%)#"},
{"firmware_update_sd_checksum_notice", "This is an optional feature to further enhance security. Compare the following checksum with the checksum of your download package on the official website, ensure that they are consistent."},
{"firmware_update_sd_copying_desc", "Do not remove the MicroSD Card while the update is underway."},
@@ -473,11 +459,11 @@ const static lv_i18n_phrase_t en_singulars[] = {
{"import_wallet_phrase_desc", "Enter your seed phrase in the blanks provided below."},
{"import_wallet_phrase_title", "Import Your Seed"},
{"import_wallet_shamir_backup", "Shamir Backup"},
- {"import_wallet_shamir_backup_desc", "You'll need a couple of seed phrase\r\nshares to recover your wallet"},
+ {"import_wallet_shamir_backup_desc", "You'll need a couple of seed phrase\nshares to recover your wallet"},
{"import_wallet_share_success_desc", "This share of your seed phrase matches your wallet."},
{"import_wallet_single_backup_desc", "Recover your wallet with the specific seed phrase. Please complete the setup process in one go to avoid any security risks."},
{"import_wallet_single_phrase", "Single Secret Phrase"},
- {"import_wallet_single_phrase_desc", "You'll need a 12/18/24 seed phrase\r\nto recover your wallet."},
+ {"import_wallet_single_phrase_desc", "You'll need a 12/18/24 seed phrase\nto recover your wallet."},
{"import_wallet_ssb_cancel_desc", "Upon cancellation, you will be required to re-enter all the Shares again."},
{"import_wallet_ssb_cancel_title", "Cancel Import Wallet?"},
{"import_wallet_ssb_desc_fmt", "Enter your #F5870A %d#-word seed phrase for Share #F5870A %d# in the blanks provided below."},
@@ -618,7 +604,7 @@ const static lv_i18n_phrase_t en_singulars[] = {
{"purpose_title", "New Wallet"},
{"receive_ada_enterprise_address", "Address (Not Delegated)"},
{"receive_ada_more_t_desc1", "On the Cardano blockchain, we provide 24 accounts, and each account can generate numerous addresses for your use. You can easily switch between the accounts you need."},
- {"receive_ada_more_t_desc2", "1. Payment & Stake Keys: In Cardano, every account has a Payment Key for regular ADA transactions (sending and receiving) and a Stake Key for staking and receiving rewards.\r\n2. Base Address: A Base Address is derived from both the Payment Key and Stake Key. It can be used for both regular transactions and staking. Also known as \"External Addresses (Delegated).\"\r\n3. Enterprise Address: This address only contains the Payment Key and is used solely for regular transactions, not for staking. It's designed for \"business\" scenarios that don't involve staking, like exchanges. Also known as \"External Addresses (Not Delegated).\"\r\n4. Stake & Reward Addresses: The Stake Key is used for staking, and the associated Stake Address is also called a Reward Address, used to receive staking rewards."},
+ {"receive_ada_more_t_desc2", "1. Payment & Stake Keys: In Cardano, every account has a Payment Key for regular ADA transactions (sending and receiving) and a Stake Key for staking and receiving rewards.\n2. Base Address: A Base Address is derived from both the Payment Key and Stake Key. It can be used for both regular transactions and staking. Also known as \"External Addresses (Delegated).\"\n3. Enterprise Address: This address only contains the Payment Key and is used solely for regular transactions, not for staking. It's designed for \"business\" scenarios that don't involve staking, like exchanges. Also known as \"External Addresses (Not Delegated).\"\n4. Stake & Reward Addresses: The Stake Key is used for staking, and the associated Stake Address is also called a Reward Address, used to receive staking rewards."},
{"receive_ada_more_t_ledger", "Ledger/BitBox02"},
{"receive_ada_more_t_standard", "Cardano Native"},
{"receive_ada_more_t_title1", "Multiple Cardano Accounts on Keystone"},
@@ -631,9 +617,9 @@ const static lv_i18n_phrase_t en_singulars[] = {
{"receive_btc_extended_public_key", "Extended Public Key"},
{"receive_btc_more_address_settings", "Address Settings"},
{"receive_btc_more_export_xpub", "Export xPub"},
- {"receive_btc_more_t_desc1", "Bitcoin (BTC) uses three address formats for receiving funds:\r\n1. Native SegWit is the most efficient and secure Bitcoin address format. It provides cost savings and improved security compared to other traditional address formats, typically starting with \"bc1\"\r\n2. Legacy format is one of the earliest versions of Bitcoin, typically starting with \"1\"\r\n3. Nested SegWit is a solution designed to facilitate the transition to Native SegWit in a smooth manner, typically starting with \"3\""},
- {"receive_btc_more_t_desc2", "Yes, the three distinct Bitcoin address formats can be used for transferring funds among each other. However, it’s important to keep in mind the following aspects:\r\n1. Differing transaction fees: The choice of address format can influence transaction fees, with Native SegWit addresses generally having lower fees.\r\n2. Wallet and exchange compatibility: Make sure that the wallet or exchange you are using supports your chosen address format. Some wallets may only be compatible with specific address formats."},
- {"receive_btc_more_t_desc3", "1. Privacy: Reusing addresses increases transaction traceability, endangering privacy. New addresses help maintain transaction privacy.\r\n2. Transaction Efficiency: Multiple UTXOs linked to one address can raise costs for consolidation, impacting wallet efficiency.\r\n3. Security: Repeated address use heightens the risk of private key exposure, potentially leading to losses if compromised.\r\nIn short, not reusing addresses safeguards privacy, optimizes transactions, and reduces security risks within the UTXO model."},
+ {"receive_btc_more_t_desc1", "Bitcoin (BTC) uses three address formats for receiving funds:\n1. Native SegWit is the most efficient and secure Bitcoin address format. It provides cost savings and improved security compared to other traditional address formats, typically starting with \"bc1\"\n2. Legacy format is one of the earliest versions of Bitcoin, typically starting with \"1\"\n3. Nested SegWit is a solution designed to facilitate the transition to Native SegWit in a smooth manner, typically starting with \"3\""},
+ {"receive_btc_more_t_desc2", "Yes, the three distinct Bitcoin address formats can be used for transferring funds among each other. However, it’s important to keep in mind the following aspects:\n1. Differing transaction fees: The choice of address format can influence transaction fees, with Native SegWit addresses generally having lower fees.\n2. Wallet and exchange compatibility: Make sure that the wallet or exchange you are using supports your chosen address format. Some wallets may only be compatible with specific address formats."},
+ {"receive_btc_more_t_desc3", "1. Privacy: Reusing addresses increases transaction traceability, endangering privacy. New addresses help maintain transaction privacy.\n2. Transaction Efficiency: Multiple UTXOs linked to one address can raise costs for consolidation, impacting wallet efficiency.\n3. Security: Repeated address use heightens the risk of private key exposure, potentially leading to losses if compromised.\nIn short, not reusing addresses safeguards privacy, optimizes transactions, and reduces security risks within the UTXO model."},
{"receive_btc_more_t_title1", "What are the three different address formats for BTC?"},
{"receive_btc_more_t_title2", "Can the three different address formats be used to transfer funds to each other?"},
{"receive_btc_more_t_title3", "Benefits of not reusing addresses"},
@@ -650,21 +636,21 @@ const static lv_i18n_phrase_t en_singulars[] = {
{"receive_eth_more_derivation_path_ledger_legacy", "Ledger Legacy"},
{"receive_eth_more_derivation_path_ledger_live", "Ledger Live"},
{"receive_eth_more_derivation_path_title2", "Accounts eg:"},
- {"receive_eth_more_t_desc1", "1. Standard Path: This path is widely employed by numerous software wallets for address generation. Examples of such wallets encompass MetaMask, Rabby, BitKeep, and Core Wallet.\r\n2. Ledger Live: Choose this path if you intend to import a seed phrase from Ledger Live. Please note that Keystone supports synchronizing only the initial 10 addresses using this format.\r\n3. Ledger Legacy: Transition to this path if you manage your digital assets with Ledger Legacy"},
+ {"receive_eth_more_t_desc1", "1. Standard Path: This path is widely employed by numerous software wallets for address generation. Examples of such wallets encompass MetaMask, Rabby, BitKeep, and Core Wallet.\n2. Ledger Live: Choose this path if you intend to import a seed phrase from Ledger Live. Please note that Keystone supports synchronizing only the initial 10 addresses using this format.\n3. Ledger Legacy: Transition to this path if you manage your digital assets with Ledger Legacy"},
{"receive_eth_more_t_title1", "Exploring Differences: Standard, Ledger Live, and Legacy Derivation Paths in Ethereum"},
{"receive_eth_receive_main_title", "Receive ETH"},
{"receive_generate_new_address", "Generate New Address"},
- {"receive_ltc_more_t_desc1", "1. Nested SegWit: A transitional format where SegWit is nested inside P2SH. It offers better efficiency than Legacy and is the most commonly used format due to broad compatibility. \r\n2.Native SegWit: Fully native SegWit format with lower fees and smaller transaction sizes. Increasingly popular and supported by most major wallets and exchanges"},
+ {"receive_ltc_more_t_desc1", "1. Nested SegWit: A transitional format where SegWit is nested inside P2SH. It offers better efficiency than Legacy and is the most commonly used format due to broad compatibility. \n2.Native SegWit: Fully native SegWit format with lower fees and smaller transaction sizes. Increasingly popular and supported by most major wallets and exchanges"},
{"receive_ltc_more_t_title1", "Know The Difference: Nested SegWit, and Native SegWit Derivation Paths in LTC"},
{"receive_more_t_qr_link", "https://keyst.one/t/3rd/faq"},
{"receive_sol_more_t_base_path", "Account-based Path"},
- {"receive_sol_more_t_desc1", "1. Account-based Path: Widely adopted across numerous Solana wallets. An example of such a wallet is Solflare.\r\n2. Single Account Path: Choose this path if you intend to import a seed phrase from Sollet / MathWallet. Please note that Keystone supports synchronizing only the initial 10 addresses using this format.\r\n3. Sub-account Path: Transition to this path if you manage your digital assets with software wallets like Phantom / Exodus."},
+ {"receive_sol_more_t_desc1", "1. Account-based Path: Widely adopted across numerous Solana wallets. An example of such a wallet is Solflare.\n2. Single Account Path: Choose this path if you intend to import a seed phrase from Sollet / MathWallet. Please note that Keystone supports synchronizing only the initial 10 addresses using this format.\n3. Sub-account Path: Transition to this path if you manage your digital assets with software wallets like Phantom / Exodus."},
{"receive_sol_more_t_single_path", "Single Account Path"},
{"receive_sol_more_t_sub_path", "Sub-account Path"},
{"receive_sol_more_t_title1", "Exploring Solana Path Options"},
{"receive_ton_hint", "Keystone default address format is V4R2. If they don’t match Tonkeeper, please check and switch in Tonkeeper. This address is exclusively for TON transactions only. Sending other types of digital assets to this address will result in their loss."},
{"receive_trx_hint", "This address is only for TRX, TRC-20 tokens and TRC-10 tokens, other digital assets sent to this address will be lost."},
- {"receive_xmr_more_t_desc1", "1.The Primary Account is your main Monero account, holding your primary balance and capable of directly receiving funds.\r\n2.A Subaddress is a secondary address linked to your Primary Account, designed for receiving payments privately. Each Subaddress keeps transactions separate, hiding your main account balance.\r\n3.Use the Primary Account for larger or long-term funds. Use Subaddresses when you want to receive payments without revealing your main balance or account details."},
+ {"receive_xmr_more_t_desc1", "1.The Primary Account is your main Monero account, holding your primary balance and capable of directly receiving funds.\n2.A Subaddress is a secondary address linked to your Primary Account, designed for receiving payments privately. Each Subaddress keeps transactions separate, hiding your main account balance.\n3.Use the Primary Account for larger or long-term funds. Use Subaddresses when you want to receive payments without revealing your main balance or account details."},
{"receive_xmr_more_t_title1", "Know The Difference: Primary Account and Subaddress"},
{"recovery_mode_switch_desc", "When enabled, you can enter Recovery Mode, proceed only if you need to recover your system."},
{"recovery_mode_switch_text_title", "Recovery Mode"},
@@ -969,12 +955,9 @@ const static lv_i18n_phrase_t en_singulars[] = {
static uint8_t en_plural_fn(int32_t num)
{
- uint32_t n = op_n(num);
- UNUSED(n);
- uint32_t i = op_i(n);
- UNUSED(i);
- uint32_t v = op_v(n);
- UNUSED(v);
+ uint32_t n = op_n(num); UNUSED(n);
+ uint32_t i = op_i(n); UNUSED(i);
+ uint32_t v = op_v(n); UNUSED(v);
if ((i == 1 && v == 0)) return LV_I18N_PLURAL_TYPE_ONE;
return LV_I18N_PLURAL_TYPE_OTHER;
@@ -1111,6 +1094,14 @@ const static lv_i18n_phrase_t de_singulars[] = {
{"boot_version_not_match_desc", "Ihre aktuelle Firmware hat möglicherweise das erforderliche Sicherheitsupdate übersprungen. Bitte kontaktieren Sie #1BE0C6 support@keyst.one# um Unterstützung zu erhalten."},
{"boot_version_not_match_title", "Sicherheitsbenachrichtigung"},
{"btc_avalanche_notice", "Diese Transaktion verwendet eine Avalanche BTC-Adresse. Überprüfen Sie alle Details sorgfältig, um Fehler oder Vermögensverluste zu vermeiden."},
+ {"btc_check_input_value_hint", "Bitte bestätigen Sie, dass jeder Eingabewert korrekt ist."},
+ {"btc_fee_unknown", "Unbekannt"},
+ {"btc_input_ref", "Input-Ref."},
+ {"btc_input_reference", "Input-Referenz"},
+ {"btc_outpoint", "Outpoint"},
+ {"btc_sighash", "Sighash"},
+ {"btc_sighash_none_warning", "Outputs sind nicht festgelegt und diese Signatur kann mit anderen Outputs wiederverwendet werden."},
+ {"btc_sighash_single_warning", "Nur der entsprechende Output ist festgelegt. Andere Outputs können nach dem Signieren geändert werden."},
{"calculat_modal_title", "Berechnung"},
{"catalyst_transactions_notice", "Prüfen Sie die Adresse sorgfältig."},
{"catalyst_voting_registration", "Wahlregistrierung bestätigen"},
@@ -1363,7 +1354,7 @@ const static lv_i18n_phrase_t de_singulars[] = {
{"firmware_update_no_upgradable_firmware_desc", "Ihre Geräte-Firmware-Version ist höher als oder gleich der auf Ihrer microSD-Karte."},
{"firmware_update_no_upgradable_firmware_title", "Keine aktualisierbare Firmware erkannt"},
{"firmware_update_sd_checksum_desc", "#F5870A Zeige Prüfsumme#"},
- {"firmware_update_sd_checksum_done", "Prüfsumme\r\n"},
+ {"firmware_update_sd_checksum_done", "Prüfsumme\n"},
{"firmware_update_sd_checksum_fmt", "#F5870A Prüfsumme anzeigen(%d%%)#"},
{"firmware_update_sd_checksum_notice", "Dies ist eine optionale Funktion, um die Sicherheit weiter zu verbessern. Vergleichen Sie die folgende Prüfsumme mit der Prüfsumme Ihres Download-Pakets auf der offiziellen Website, stellen Sie sicher, dass sie übereinstimmen."},
{"firmware_update_sd_copying_desc", "Entfernen Sie die MicroSD-Karte nicht, während das Update im Gange ist."},
@@ -1566,7 +1557,7 @@ const static lv_i18n_phrase_t de_singulars[] = {
{"purpose_title", "Neue Brieftasche"},
{"receive_ada_enterprise_address", "Adresse (Nicht übertragen)"},
{"receive_ada_more_t_desc1", "Auf der Cardano-Blockchain stellen wir 24 Konten zur Verfügung, und jedes Konto kann zahlreiche Adressen für Ihren Gebrauch generieren. Sie können problemlos zwischen den benötigten Konten wechseln."},
- {"receive_ada_more_t_desc2", "1. Zahlungs- und Stake-Schlüssel: Bei Cardano hat jedes Konto einen Zahlungsschlüssel für reguläre ADA-Transaktionen (Senden und Empfangen) und einen Stake-Schlüssel für das Staken und den Erhalt von Belohnungen.\r\n2. Basisadresse: Eine Basisadresse wird aus dem Zahlungsschlüssel und dem Stake-Schlüssel abgeleitet. Sie kann sowohl für reguläre Transaktionen als auch für das Staken verwendet werden. Auch bekannt als \"Externe Adressen (Delegiert)\".\r\n3. Unternehmensadresse: Diese Adresse enthält nur den Zahlungsschlüssel und wird ausschließlich für reguläre Transaktionen und nicht zum Staken verwendet. Sie ist für \"geschäftliche\" Szenarien gedacht, die kein Staken beinhalten, wie z.B. Börsen. Auch bekannt als \"Externe Adressen (Nicht delegiert)\".\r\n4. Stake- und Belohnungsadressen: Der Stake-Schlüssel wird zum Staken verwendet und die zugehörige Stake-Adresse wird auch als Belohnungsadresse bezeichnet und dient zum Empfangen von Staking-Belohnungen."},
+ {"receive_ada_more_t_desc2", "1. Zahlungs- und Stake-Schlüssel: Bei Cardano hat jedes Konto einen Zahlungsschlüssel für reguläre ADA-Transaktionen (Senden und Empfangen) und einen Stake-Schlüssel für das Staken und den Erhalt von Belohnungen.\n2. Basisadresse: Eine Basisadresse wird aus dem Zahlungsschlüssel und dem Stake-Schlüssel abgeleitet. Sie kann sowohl für reguläre Transaktionen als auch für das Staken verwendet werden. Auch bekannt als \"Externe Adressen (Delegiert)\".\n3. Unternehmensadresse: Diese Adresse enthält nur den Zahlungsschlüssel und wird ausschließlich für reguläre Transaktionen und nicht zum Staken verwendet. Sie ist für \"geschäftliche\" Szenarien gedacht, die kein Staken beinhalten, wie z.B. Börsen. Auch bekannt als \"Externe Adressen (Nicht delegiert)\".\n4. Stake- und Belohnungsadressen: Der Stake-Schlüssel wird zum Staken verwendet und die zugehörige Stake-Adresse wird auch als Belohnungsadresse bezeichnet und dient zum Empfangen von Staking-Belohnungen."},
{"receive_ada_more_t_ledger", "Ledger/BitBox02"},
{"receive_ada_more_t_standard", "Cardano Native"},
{"receive_ada_more_t_title1", "Mehrere Cardano-Konten auf Keystone."},
@@ -1579,9 +1570,9 @@ const static lv_i18n_phrase_t de_singulars[] = {
{"receive_btc_extended_public_key", "Erweitertes öffentliches Schlüssel"},
{"receive_btc_more_address_settings", "Adress-Einstellungen"},
{"receive_btc_more_export_xpub", "Exportieren Sie xPub."},
- {"receive_btc_more_t_desc1", "Bitcoin (BTC) utiliza tres formatos de direcciones para recibir fondos:\r\n1. Native SegWit es el formato de dirección de Bitcoin más eficiente y seguro. Ofrece ahorros en costos y mejor seguridad en comparación con otros formatos de dirección tradicionales, generalmente comienza con bc1.\r\n2. El formato Legacy es una de las primeras versiones de Bitcoin, que generalmente comienza con 1.\r\n3. Nested SegWit es una solución diseñada para facilitar la transición a Native SegWit de manera suave, generalmente comienza con 3."},
- {"receive_btc_more_t_desc2", "Ja, die drei unterschiedlichen Bitcoin-Adressformate können zur Übertragung von Geldern untereinander verwendet werden. Es ist jedoch wichtig, folgende Aspekte im Hinterkopf zu behalten:\r\n1. Unterschiedliche Transaktionsgebühren: Die Wahl des Adressformats kann die Transaktionsgebühren beeinflussen, wobei Native SegWit-Adressen normalerweise niedrigere Gebühren haben.\r\n2. Kompatibilität von Wallet und Börse: Stellen Sie sicher, dass das von Ihnen verwendete Wallet oder die Börse Ihr gewähltes Adressformat unterstützt. Manche Wallets sind möglicherweise nur mit bestimmten Adressformaten kompatibel."},
- {"receive_btc_more_t_desc3", "1. Datenschutz: Durch das Wiederverwenden von Adressen erhöht sich die Rückverfolgbarkeit von Transaktionen und gefährdet die Privatsphäre. Neue Adressen helfen dabei, den Datenschutz bei Transaktionen aufrechtzuerhalten.\r\n2. Transaktionseffizienz: Mehrere UTXOs, die einer Adresse zugeordnet sind, können die Kosten für die Konsolidierung erhöhen und die Effizienz der Geldbörse beeinträchtigen.\r\n3. Sicherheit: Die wiederholte Verwendung von Adressen erhöht das Risiko einer Offenlegung des privaten Schlüssels und kann zu Verlusten führen, wenn er kompromittiert wird.\r\nKurz gesagt, das Nicht-Wiederverwenden von Adressen schützt die Privatsphäre, optimiert Transaktionen und reduziert Sicherheitsrisiken im UTXO-Modell."},
+ {"receive_btc_more_t_desc1", "Bitcoin (BTC) utiliza tres formatos de direcciones para recibir fondos:\n1. Native SegWit es el formato de dirección de Bitcoin más eficiente y seguro. Ofrece ahorros en costos y mejor seguridad en comparación con otros formatos de dirección tradicionales, generalmente comienza con bc1.\n2. El formato Legacy es una de las primeras versiones de Bitcoin, que generalmente comienza con 1.\n3. Nested SegWit es una solución diseñada para facilitar la transición a Native SegWit de manera suave, generalmente comienza con 3."},
+ {"receive_btc_more_t_desc2", "Ja, die drei unterschiedlichen Bitcoin-Adressformate können zur Übertragung von Geldern untereinander verwendet werden. Es ist jedoch wichtig, folgende Aspekte im Hinterkopf zu behalten:\n1. Unterschiedliche Transaktionsgebühren: Die Wahl des Adressformats kann die Transaktionsgebühren beeinflussen, wobei Native SegWit-Adressen normalerweise niedrigere Gebühren haben.\n2. Kompatibilität von Wallet und Börse: Stellen Sie sicher, dass das von Ihnen verwendete Wallet oder die Börse Ihr gewähltes Adressformat unterstützt. Manche Wallets sind möglicherweise nur mit bestimmten Adressformaten kompatibel."},
+ {"receive_btc_more_t_desc3", "1. Datenschutz: Durch das Wiederverwenden von Adressen erhöht sich die Rückverfolgbarkeit von Transaktionen und gefährdet die Privatsphäre. Neue Adressen helfen dabei, den Datenschutz bei Transaktionen aufrechtzuerhalten.\n2. Transaktionseffizienz: Mehrere UTXOs, die einer Adresse zugeordnet sind, können die Kosten für die Konsolidierung erhöhen und die Effizienz der Geldbörse beeinträchtigen.\n3. Sicherheit: Die wiederholte Verwendung von Adressen erhöht das Risiko einer Offenlegung des privaten Schlüssels und kann zu Verlusten führen, wenn er kompromittiert wird.\nKurz gesagt, das Nicht-Wiederverwenden von Adressen schützt die Privatsphäre, optimiert Transaktionen und reduziert Sicherheitsrisiken im UTXO-Modell."},
{"receive_btc_more_t_title1", "Welche sind die drei verschiedenen Adressformate für BTC?"},
{"receive_btc_more_t_title2", "Können die drei verschiedenen Adressformate verwendet werden, um Gelder untereinander zu übertragen?"},
{"receive_btc_more_t_title3", "Vorteile der Nicht-Wiederverwendung von Adressen"},
@@ -1598,21 +1589,21 @@ const static lv_i18n_phrase_t de_singulars[] = {
{"receive_eth_more_derivation_path_ledger_legacy", "Ledger Legacy"},
{"receive_eth_more_derivation_path_ledger_live", "Ledger Live"},
{"receive_eth_more_derivation_path_title2", "Konten z.B.:"},
- {"receive_eth_more_t_desc1", "1. Standardpfad: Dieser Pfad wird von zahlreichen Software-Wallets zur Adressgenerierung weit verbreitet eingesetzt. Beispiele für solche Wallets sind MetaMask, Rabby, BitKeep und Core Wallet.\r\n2. Ledger Live: Wählen Sie diesen Pfad, wenn Sie eine Seed-Phrase aus Ledger Live importieren möchten. Bitte beachten Sie, dass Keystone nur die ersten 10 Adressen mit diesem Format synchronisieren kann.\r\n3. Ledger Legacy: Wechseln Sie zu diesem Pfad, wenn Sie Ihre digitalen Vermögenswerte mit Ledger Legacy verwalten."},
+ {"receive_eth_more_t_desc1", "1. Standardpfad: Dieser Pfad wird von zahlreichen Software-Wallets zur Adressgenerierung weit verbreitet eingesetzt. Beispiele für solche Wallets sind MetaMask, Rabby, BitKeep und Core Wallet.\n2. Ledger Live: Wählen Sie diesen Pfad, wenn Sie eine Seed-Phrase aus Ledger Live importieren möchten. Bitte beachten Sie, dass Keystone nur die ersten 10 Adressen mit diesem Format synchronisieren kann.\n3. Ledger Legacy: Wechseln Sie zu diesem Pfad, wenn Sie Ihre digitalen Vermögenswerte mit Ledger Legacy verwalten."},
{"receive_eth_more_t_title1", "Erkundung von Unterschieden: Standard, Ledger Live und Legacy Derivation Pfade in Ethereum"},
{"receive_eth_receive_main_title", "Erhalte ETH"},
{"receive_generate_new_address", "Neue Adresse generieren"},
- {"receive_ltc_more_t_desc1", "1.Nested SegWit: ein Übergangsformat, bei dem SegWit in P2SH eingebettet ist. Es bietet eine bessere Effizienz als Legacy und ist aufgrund der breiten Kompatibilität das am häufigsten verwendete Format.\r\n2.Native SegWit: vollständig natives SegWit-Format mit niedrigeren Gebühren und kleineren Transaktionsgrößen. Wird zunehmend beliebter und wird von den meisten großen Wallets und Börsen unterstützt."},
+ {"receive_ltc_more_t_desc1", "1.Nested SegWit: ein Übergangsformat, bei dem SegWit in P2SH eingebettet ist. Es bietet eine bessere Effizienz als Legacy und ist aufgrund der breiten Kompatibilität das am häufigsten verwendete Format.\n2.Native SegWit: vollständig natives SegWit-Format mit niedrigeren Gebühren und kleineren Transaktionsgrößen. Wird zunehmend beliebter und wird von den meisten großen Wallets und Börsen unterstützt."},
{"receive_ltc_more_t_title1", "Erkennen Sie den Unterschied: Verschachtelte SegWit- und Native SegWit-Ableitungspfade in LTC"},
{"receive_more_t_qr_link", "https://keyst.one/t/3rd/faq"},
{"receive_sol_more_t_base_path", "Aktengestützter Pfad"},
- {"receive_sol_more_t_desc1", "1. Kontobasierter Pfad: Weit verbreitet in zahlreichen Solana-Wallets übernommen. Ein Beispiel für ein solches Wallet ist Solflare.\r\n2. Einzelkontopfad: Wählen Sie diesen Pfad, wenn Sie vorhaben, eine Seed-Phrase von Sollet / MathWallet zu importieren. Bitte beachten Sie, dass Keystone nur das erstmalige Synchronisieren von 10 Adressen mit diesem Format unterstützt.\r\n3. Unterkontopfad: Wechseln Sie zu diesem Pfad, wenn Sie Ihre digitalen Vermögenswerte mit Software-Wallets wie Phantom / Exodus verwalten."},
+ {"receive_sol_more_t_desc1", "1. Kontobasierter Pfad: Weit verbreitet in zahlreichen Solana-Wallets übernommen. Ein Beispiel für ein solches Wallet ist Solflare.\n2. Einzelkontopfad: Wählen Sie diesen Pfad, wenn Sie vorhaben, eine Seed-Phrase von Sollet / MathWallet zu importieren. Bitte beachten Sie, dass Keystone nur das erstmalige Synchronisieren von 10 Adressen mit diesem Format unterstützt.\n3. Unterkontopfad: Wechseln Sie zu diesem Pfad, wenn Sie Ihre digitalen Vermögenswerte mit Software-Wallets wie Phantom / Exodus verwalten."},
{"receive_sol_more_t_single_path", "Einzelkonto Pfad"},
{"receive_sol_more_t_sub_path", "Unterkonto-Pfad"},
{"receive_sol_more_t_title1", "Exploring Solana-Pfadoptionen"},
{"receive_ton_hint", "Das Standardadressenformat von Keystone ist V4R2. Wenn sie nicht mit Tonkeeper übereinstimmen, überprüfen und wechseln Sie bitte in Tonkeeper. Diese Adresse ist ausschließlich für TON-Transaktionen. Das Senden anderer Arten von digitalen Assets an diese Adresse führt zu deren Verlust."},
{"receive_trx_hint", "Diese Adresse ist nur für TRX, TRC-20 Token und TRC-10 Token bestimmt. Andere digitale Vermögenswerte, die an diese Adresse gesendet werden, gehen verloren."},
- {"receive_xmr_more_t_desc1", "1. Das Hauptkonto ist Ihr Haupt-Monero-Konto, das Ihr primäres Guthaben hält und direkt Gelder empfangen kann.\r\n2. Eine Unteradresse ist eine sekundäre Adresse, die mit Ihrem Hauptkonto verknüpft ist und für den privaten Zahlungsempfang konzipiert wurde. Jede Unteradresse hält Transaktionen getrennt und verbirgt so den Saldo Ihres Hauptkontos.\r\n3. Verwenden Sie das Hauptkonto für größere oder langfristige Gelder. Verwenden Sie Unteradressen, wenn Sie Zahlungen erhalten möchten, ohne Ihren Hauptkontostand oder Kontodetails preiszugeben."},
+ {"receive_xmr_more_t_desc1", "1. Das Hauptkonto ist Ihr Haupt-Monero-Konto, das Ihr primäres Guthaben hält und direkt Gelder empfangen kann.\n2. Eine Unteradresse ist eine sekundäre Adresse, die mit Ihrem Hauptkonto verknüpft ist und für den privaten Zahlungsempfang konzipiert wurde. Jede Unteradresse hält Transaktionen getrennt und verbirgt so den Saldo Ihres Hauptkontos.\n3. Verwenden Sie das Hauptkonto für größere oder langfristige Gelder. Verwenden Sie Unteradressen, wenn Sie Zahlungen erhalten möchten, ohne Ihren Hauptkontostand oder Kontodetails preiszugeben."},
{"receive_xmr_more_t_title1", "Kennen Sie den Unterschied: Hauptkonto und Unteradresse"},
{"recovery_mode_switch_desc", "Wenn diese Funktion aktiviert ist, können Sie den Wiederherstellungsmodus eingeben, fahren Sie nur fort, wenn Sie Ihr System wiederherstellen müssen."},
{"recovery_mode_switch_text_title", "Wiederherstellungsmodus"},
@@ -1917,12 +1908,9 @@ const static lv_i18n_phrase_t de_singulars[] = {
static uint8_t de_plural_fn(int32_t num)
{
- uint32_t n = op_n(num);
- UNUSED(n);
- uint32_t i = op_i(n);
- UNUSED(i);
- uint32_t v = op_v(n);
- UNUSED(v);
+ uint32_t n = op_n(num); UNUSED(n);
+ uint32_t i = op_i(n); UNUSED(i);
+ uint32_t v = op_v(n); UNUSED(v);
if ((i == 1 && v == 0)) return LV_I18N_PLURAL_TYPE_ONE;
return LV_I18N_PLURAL_TYPE_OTHER;
@@ -2059,6 +2047,14 @@ const static lv_i18n_phrase_t es_singulars[] = {
{"boot_version_not_match_desc", "Es posible que su firmware actual haya omitido la actualización de seguridad necesaria. Por favor, contacte a #1BE0C6 support@keyst.one# para obtener asistencia."},
{"boot_version_not_match_title", "Aviso de seguridad"},
{"btc_avalanche_notice", "Esta transacción utiliza una dirección BTC de Avalanche. Verifique cuidadosamente todos los detalles para evitar errores o pérdida de activos."},
+ {"btc_check_input_value_hint", "Confirma que el valor de cada entrada sea correcto."},
+ {"btc_fee_unknown", "Desconocido"},
+ {"btc_input_ref", "Ref. entrada"},
+ {"btc_input_reference", "Referencia de entrada"},
+ {"btc_outpoint", "Outpoint"},
+ {"btc_sighash", "Sighash"},
+ {"btc_sighash_none_warning", "Las salidas no están bloqueadas y esta firma puede reutilizarse con salidas diferentes."},
+ {"btc_sighash_single_warning", "Solo la salida correspondiente está bloqueada. Las otras salidas pueden cambiarse después de firmar."},
{"calculat_modal_title", "Calculando"},
{"catalyst_transactions_notice", "Asegúrese de que la dirección coincida. Verifique cuidadosamente."},
{"catalyst_voting_registration", "Confirmar registro de votación"},
@@ -2514,7 +2510,7 @@ const static lv_i18n_phrase_t es_singulars[] = {
{"purpose_title", "Nueva billetera"},
{"receive_ada_enterprise_address", "Dirección (No Delegada)"},
{"receive_ada_more_t_desc1", "En la blockchain de Cardano, proporcionamos 24 cuentas y cada cuenta puedes generar numerosas direcciones para su uso. Puedes cambiar fácilmente entre las cuentas que necesites."},
- {"receive_ada_more_t_desc2", "1. Pagos y Claves de Participación: En Cardano, cada cuenta tiene una Clave de Pago para transacciones regulares de ADA (envío y recepción) y una Clave de Participación para participar y recibir recompensas.\r\n2. Dirección Base: Una Dirección Base se deriva tanto de la Clave de Pago como de la Clave de Participación. Se puede usar tanto para transacciones regulares como para participación. También conocida como Direcciones Externas (Delegadas).\r\n3. Dirección de Empresa: Esta dirección solo contiene la Clave de Pago y se utiliza únicamente para transacciones regulares, no para participación. Está diseñada para escenarios empresariales que no implican participación, como intercambios. También conocida como Direcciones Externas (No Delegadas).\r\n4. Direcciones de Participación y Recompensa: La Clave de Participación se utiliza para la participación, y la Dirección de Participación asociada también se llama Dirección de Recompensa, utilizada para recibir recompensas por la participación."},
+ {"receive_ada_more_t_desc2", "1. Pagos y Claves de Participación: En Cardano, cada cuenta tiene una Clave de Pago para transacciones regulares de ADA (envío y recepción) y una Clave de Participación para participar y recibir recompensas.\n2. Dirección Base: Una Dirección Base se deriva tanto de la Clave de Pago como de la Clave de Participación. Se puede usar tanto para transacciones regulares como para participación. También conocida como Direcciones Externas (Delegadas).\n3. Dirección de Empresa: Esta dirección solo contiene la Clave de Pago y se utiliza únicamente para transacciones regulares, no para participación. Está diseñada para escenarios empresariales que no implican participación, como intercambios. También conocida como Direcciones Externas (No Delegadas).\n4. Direcciones de Participación y Recompensa: La Clave de Participación se utiliza para la participación, y la Dirección de Participación asociada también se llama Dirección de Recompensa, utilizada para recibir recompensas por la participación."},
{"receive_ada_more_t_ledger", "Ledger/BitBox02"},
{"receive_ada_more_t_standard", "Cardano Native"},
{"receive_ada_more_t_title1", "Múltiples cuentas de Cardano en Keystone"},
@@ -2527,9 +2523,9 @@ const static lv_i18n_phrase_t es_singulars[] = {
{"receive_btc_extended_public_key", "Clave pública extendida"},
{"receive_btc_more_address_settings", "Ajustes de dirección"},
{"receive_btc_more_export_xpub", "Exportar xPub"},
- {"receive_btc_more_t_desc1", "Bitcoin (BTC) utiliza tres formatos de direcciones para recibir fondos:\r\n1. SegWit nativo es el formato de dirección de Bitcoin más eficiente y seguro. Proporciona ahorros de costos y una seguridad mejorada en comparación con otros formatos de dirección tradicionales, generalmente comenzando con bc1.\r\n2. Formato heredado es una de las primeras versiones de Bitcoin, generalmente comenzando con 1.\r\n3. SegWit anidado es una solución diseñada para facilitar la transición al SegWit nativo de manera fluida, generalmente comenzando con 3."},
- {"receive_btc_more_t_desc2", "Sí, los tres formatos de dirección Bitcoin se pueden utilizar para transferir fondos entre sí. Sin embargo, es importante tener en cuenta los siguientes aspectos:\r\n1. Diferentes comisiones de transacción: la elección del formato de dirección puede influir en las comisiones de transacción, siendo las direcciones de Native SegWit generalmente las que tienen comisiones más bajas.\r\n2. Compatibilidad de billetera e intercambio: asegúrate de que la billetera o el intercambio que estás utilizando admita el formato de dirección elegido. Algunas billeteras pueden ser compatibles únicamente con formatos de dirección específicos."},
- {"receive_btc_more_t_desc3", "1. Privacidad: Reutilizar direcciones aumenta la rastreabilidad de las transacciones, poniendo en peligro la privacidad. Las nuevas direcciones ayudan a mantener la privacidad de las transacciones.\r\n2. Eficiencia de transacciones: Varios UTXOs vinculados a una misma dirección pueden aumentar los costos de consolidación, afectando la eficiencia de la billetera.\r\n3. Seguridad: El uso repetido de direcciones aumenta el riesgo de exposición de la clave privada, lo que potencialmente puede llevar a pérdidas si se compromete.\r\nEn resumen, no reutilizar direcciones protege la privacidad, optimiza las transacciones y reduce los riesgos de seguridad dentro del modelo UTXO."},
+ {"receive_btc_more_t_desc1", "Bitcoin (BTC) utiliza tres formatos de direcciones para recibir fondos:\n1. SegWit nativo es el formato de dirección de Bitcoin más eficiente y seguro. Proporciona ahorros de costos y una seguridad mejorada en comparación con otros formatos de dirección tradicionales, generalmente comenzando con bc1.\n2. Formato heredado es una de las primeras versiones de Bitcoin, generalmente comenzando con 1.\n3. SegWit anidado es una solución diseñada para facilitar la transición al SegWit nativo de manera fluida, generalmente comenzando con 3."},
+ {"receive_btc_more_t_desc2", "Sí, los tres formatos de dirección Bitcoin se pueden utilizar para transferir fondos entre sí. Sin embargo, es importante tener en cuenta los siguientes aspectos:\n1. Diferentes comisiones de transacción: la elección del formato de dirección puede influir en las comisiones de transacción, siendo las direcciones de Native SegWit generalmente las que tienen comisiones más bajas.\n2. Compatibilidad de billetera e intercambio: asegúrate de que la billetera o el intercambio que estás utilizando admita el formato de dirección elegido. Algunas billeteras pueden ser compatibles únicamente con formatos de dirección específicos."},
+ {"receive_btc_more_t_desc3", "1. Privacidad: Reutilizar direcciones aumenta la rastreabilidad de las transacciones, poniendo en peligro la privacidad. Las nuevas direcciones ayudan a mantener la privacidad de las transacciones.\n2. Eficiencia de transacciones: Varios UTXOs vinculados a una misma dirección pueden aumentar los costos de consolidación, afectando la eficiencia de la billetera.\n3. Seguridad: El uso repetido de direcciones aumenta el riesgo de exposición de la clave privada, lo que potencialmente puede llevar a pérdidas si se compromete.\nEn resumen, no reutilizar direcciones protege la privacidad, optimiza las transacciones y reduce los riesgos de seguridad dentro del modelo UTXO."},
{"receive_btc_more_t_title1", "¿Cuáles son los tres formatos de dirección diferentes para BTC?"},
{"receive_btc_more_t_title2", "¿Se pueden utilizar los tres formatos de dirección diferentes para transferir fondos entre ellos?"},
{"receive_btc_more_t_title3", "Beneficios de no reutilizar direcciones"},
@@ -2546,21 +2542,21 @@ const static lv_i18n_phrase_t es_singulars[] = {
{"receive_eth_more_derivation_path_ledger_legacy", "Ledger Legacy"},
{"receive_eth_more_derivation_path_ledger_live", "Ledger Live"},
{"receive_eth_more_derivation_path_title2", "Cuentas de ejemplo:"},
- {"receive_eth_more_t_desc1", "1. Ruta estándar: Esta ruta es ampliamente utilizada por numerosas billeteras de software para la generación de direcciones. Ejemplos de estas billeteras son MetaMask, Rabby, BitKeep y Core Wallet.\r\n2. Ledger Live: Elija esta ruta si desea importar una frase de recuperación desde Ledger Live. Por favor tenga en cuenta que Keystone solo admite la sincronización de las primeras 10 direcciones utilizando este formato.\r\n3. Ledger Legacy: Transita a esta ruta si administras tus activos digitales con Ledger Legacy."},
+ {"receive_eth_more_t_desc1", "1. Ruta estándar: Esta ruta es ampliamente utilizada por numerosas billeteras de software para la generación de direcciones. Ejemplos de estas billeteras son MetaMask, Rabby, BitKeep y Core Wallet.\n2. Ledger Live: Elija esta ruta si desea importar una frase de recuperación desde Ledger Live. Por favor tenga en cuenta que Keystone solo admite la sincronización de las primeras 10 direcciones utilizando este formato.\n3. Ledger Legacy: Transita a esta ruta si administras tus activos digitales con Ledger Legacy."},
{"receive_eth_more_t_title1", "Explorando diferencias: caminos de derivación estándar, Ledger Live y Legacy en Ethereum"},
{"receive_eth_receive_main_title", "Recibir ETH"},
{"receive_generate_new_address", "Generar nueva dirección"},
- {"receive_ltc_more_t_desc1", "1.Nested SegWit: un formato transicional donde SegWit está anidado dentro de P2SH. Ofrece mayor eficiencia que Legacy y es el formato más utilizado debido a su amplia compatibilidad.\r\n2.Native SegWit: formato SegWit totalmente nativo con tarifas más bajas y tamaños de transacción más pequeños. Cada vez más popular y compatible con la mayoría de las principales billeteras y exchanges."},
+ {"receive_ltc_more_t_desc1", "1.Nested SegWit: un formato transicional donde SegWit está anidado dentro de P2SH. Ofrece mayor eficiencia que Legacy y es el formato más utilizado debido a su amplia compatibilidad.\n2.Native SegWit: formato SegWit totalmente nativo con tarifas más bajas y tamaños de transacción más pequeños. Cada vez más popular y compatible con la mayoría de las principales billeteras y exchanges."},
{"receive_ltc_more_t_title1", "Conozca la diferencia: rutas de derivación Nested SegWit y Native SegWit en LTC"},
{"receive_more_t_qr_link", "https://keyst.one/t/3rd/faq"},
{"receive_sol_more_t_base_path", "Ruta basada en cuentas"},
- {"receive_sol_more_t_desc1", "1. Ruta basada en cuentas: Ampliamente adoptada en numerosas billeteras de Solana. Un ejemplo de esta billetera es Solflare.\r\n2. Ruta de cuenta única: Elije esta ruta si deseas importar una frase de recuperación desde Sollet / MathWallet. Ten en cuenta que Keystone solo admite la sincronización de las 10 direcciones iniciales utilizando este formato.\r\n3. Ruta de subcuenta: Haz la transición a esta ruta si administras tus activos digitales con billeteras de software como Phantom / Exodus."},
+ {"receive_sol_more_t_desc1", "1. Ruta basada en cuentas: Ampliamente adoptada en numerosas billeteras de Solana. Un ejemplo de esta billetera es Solflare.\n2. Ruta de cuenta única: Elije esta ruta si deseas importar una frase de recuperación desde Sollet / MathWallet. Ten en cuenta que Keystone solo admite la sincronización de las 10 direcciones iniciales utilizando este formato.\n3. Ruta de subcuenta: Haz la transición a esta ruta si administras tus activos digitales con billeteras de software como Phantom / Exodus."},
{"receive_sol_more_t_single_path", "Ruta de cuenta única"},
{"receive_sol_more_t_sub_path", "Ruta de Subcuenta"},
{"receive_sol_more_t_title1", "Explorando opciones de ruta en Solana"},
{"receive_ton_hint", "El formato de dirección predeterminado de Keystone es V4R2. Si no coinciden con Tonkeeper, por favor verifique y cambie en Tonkeeper. Esta dirección es exclusivamente para transacciones de TON. Enviar otros tipos de activos digitales a esta dirección resultará en su pérdida."},
{"receive_trx_hint", "Esta dirección es solo para TRX, tokens TRC-20 y tokens TRC-10, otros activos digitales enviados a esta dirección se perderán."},
- {"receive_xmr_more_t_desc1", "1.La Cuenta Principal es tu principal cuenta de Monero, que mantiene tu saldo primario y es capaz de recibir fondos directamente.\r\n2.Una Subdirección es una dirección secundaria vinculada a tu Cuenta Principal, diseñada para recibir pagos de manera privada. Cada Subdirección mantiene las transacciones separadas, ocultando el saldo de tu cuenta principal.\r\n3.Utiliza la Cuenta Principal para fondos más grandes o a largo plazo. Usa Subdirecciones cuando quieras recibir pagos sin revelar tu saldo principal o los detalles de la cuenta."},
+ {"receive_xmr_more_t_desc1", "1.La Cuenta Principal es tu principal cuenta de Monero, que mantiene tu saldo primario y es capaz de recibir fondos directamente.\n2.Una Subdirección es una dirección secundaria vinculada a tu Cuenta Principal, diseñada para recibir pagos de manera privada. Cada Subdirección mantiene las transacciones separadas, ocultando el saldo de tu cuenta principal.\n3.Utiliza la Cuenta Principal para fondos más grandes o a largo plazo. Usa Subdirecciones cuando quieras recibir pagos sin revelar tu saldo principal o los detalles de la cuenta."},
{"receive_xmr_more_t_title1", "Conozca la diferencia: Cuenta principal y subdirección"},
{"recovery_mode_switch_desc", "Al activar esta función, puede entrar en el modo de recuperación, continúe solo si necesita recuperar su sistema."},
{"recovery_mode_switch_text_title", "Modo de recuperación"},
@@ -2793,7 +2789,7 @@ const static lv_i18n_phrase_t es_singulars[] = {
{"usb_transport_sign_unkown_error_message", "No se puede reconocer la información de los datos."},
{"usb_transport_sign_unkown_error_title", "Error Desconocido"},
{"verification_code_desc", "Ingresa este código en el sitio web oficial de Keystone para verificar la seguridad de tu dispositivo"},
- {"verification_code_failed_desc", "Tu dispositivo puede haber sido comprometido, lo que representa un riesgo para tus datos sensibles y activos digitales. \r\nPara tu seguridad, recomendamos borrar todos los datos personales y contactar de inmediato al equipo de soporte de Keystone para obtener ayuda."},
+ {"verification_code_failed_desc", "Tu dispositivo puede haber sido comprometido, lo que representa un riesgo para tus datos sensibles y activos digitales. \nPara tu seguridad, recomendamos borrar todos los datos personales y contactar de inmediato al equipo de soporte de Keystone para obtener ayuda."},
{"verification_code_failed_title", "¡Se ha detectado un intento de violación no autorizada!"},
{"verification_code_title", "Código de verificación"},
{"verification_success", "Verificado"},
@@ -2865,8 +2861,7 @@ const static lv_i18n_phrase_t es_singulars[] = {
static uint8_t es_plural_fn(int32_t num)
{
- uint32_t n = op_n(num);
- UNUSED(n);
+ uint32_t n = op_n(num); UNUSED(n);
if ((n == 1)) return LV_I18N_PLURAL_TYPE_ONE;
@@ -3004,6 +2999,14 @@ const static lv_i18n_phrase_t ja_singulars[] = {
{"boot_version_not_match_desc", "現在のファームウェアが必要なセキュリティアップグレードをスキップしている可能性があります。サポートを受けるには、 #1BE0C6 support@keyst.one # にご連絡ください。"},
{"boot_version_not_match_title", "セキュリティ通知"},
{"btc_avalanche_notice", "このトランザクションはAvalanche BTCアドレスを使用しています。エラーや資産の損失を避けるため、すべての詳細を慎重に確認してください。"},
+ {"btc_check_input_value_hint", "各入力金額が正しいことを確認してください。"},
+ {"btc_fee_unknown", "不明"},
+ {"btc_input_ref", "入力参照"},
+ {"btc_input_reference", "入力参照"},
+ {"btc_outpoint", "アウトポイント"},
+ {"btc_sighash", "Sighash"},
+ {"btc_sighash_none_warning", "出力は固定されておらず、この署名は別の出力で再利用される可能性があります。"},
+ {"btc_sighash_single_warning", "対応する出力のみが固定されます。署名後に他の出力が変更される可能性があります。"},
{"calculat_modal_title", "計算しています"},
{"catalyst_transactions_notice", "アドレスが一致することを確認してください。慎重に確認してください"},
{"catalyst_voting_registration", "投票登録を確認"},
@@ -3256,7 +3259,7 @@ const static lv_i18n_phrase_t ja_singulars[] = {
{"firmware_update_no_upgradable_firmware_desc", "あなたのデバイスのファームウェアバージョンは、マイクロSDカードに保存されているものと同じかそれよりも高いです."},
{"firmware_update_no_upgradable_firmware_title", "アップグレード可能なファームウェアが検出されませんでした."},
{"firmware_update_sd_checksum_desc", "#F5870A チェックサムを表示#"},
- {"firmware_update_sd_checksum_done", "チェックサム:\r\n"},
+ {"firmware_update_sd_checksum_done", "チェックサム:\n"},
{"firmware_update_sd_checksum_fmt", "#F5870A チェックサムを表示(%d%%) #"},
{"firmware_update_sd_checksum_notice", "これはセキュリティをさらに強化するためのオプション機能です.公式ウェブサイトでのダウンロードパッケージのチェックサムと以下のチェックサムを比較し、一致することを確認してください."},
{"firmware_update_sd_copying_desc", "アップデート中はMicroSDカードを取り外さないでください."},
@@ -3459,7 +3462,7 @@ const static lv_i18n_phrase_t ja_singulars[] = {
{"purpose_title", "新しい財布"},
{"receive_ada_enterprise_address", "住所(委任されていません)"},
{"receive_ada_more_t_desc1", "カルダノブロックチェーン上では、24つのアカウントを提供しており、各アカウントは使用するために多くのアドレスを生成することができます.必要なアカウント間を簡単に切り替えることができます."},
- {"receive_ada_more_t_desc2", "1. 支払いとステークのキー:Cardanoでは、各アカウントには通常のADAトランザクション(送受信)のための支払いキーと、ステーキングおよび報酬を受け取るためのステークキーがあります.\r\n\r\n2. ベースアドレス:ベースアドレスは支払いキーとステークキーの両方から派生したものです.通常のトランザクションとステーキングの両方に使用することができます.また、「外部アドレス(委任)」とも呼ばれています.\r\n\r\n3. 企業アドレス:このアドレスには支払いキーのみが含まれており、ステーキングには使用されません.ステーキングを含まない「ビジネス」シナリオ(取引所など)のために設計されています.また、「外部アドレス(委任されていない)」とも呼ばれています.\r\n\r\n4. ステークおよび報酬のアドレス:ステークキーはステーキングに使用され、関連するステークアドレスは報酬アドレスとも呼ばれ、ステーキング報酬を受け取るために使用されます."},
+ {"receive_ada_more_t_desc2", "1. 支払いとステークのキー:Cardanoでは、各アカウントには通常のADAトランザクション(送受信)のための支払いキーと、ステーキングおよび報酬を受け取るためのステークキーがあります.\n\n2. ベースアドレス:ベースアドレスは支払いキーとステークキーの両方から派生したものです.通常のトランザクションとステーキングの両方に使用することができます.また、「外部アドレス(委任)」とも呼ばれています.\n\n3. 企業アドレス:このアドレスには支払いキーのみが含まれており、ステーキングには使用されません.ステーキングを含まない「ビジネス」シナリオ(取引所など)のために設計されています.また、「外部アドレス(委任されていない)」とも呼ばれています.\n\n4. ステークおよび報酬のアドレス:ステークキーはステーキングに使用され、関連するステークアドレスは報酬アドレスとも呼ばれ、ステーキング報酬を受け取るために使用されます."},
{"receive_ada_more_t_ledger", "Ledger/BitBox02"},
{"receive_ada_more_t_standard", "Cardano Native"},
{"receive_ada_more_t_title1", "キーストーン上の複数のカルダノアカウント"},
@@ -3472,9 +3475,9 @@ const static lv_i18n_phrase_t ja_singulars[] = {
{"receive_btc_extended_public_key", "拡張公開鍵"},
{"receive_btc_more_address_settings", "アドレス設定"},
{"receive_btc_more_export_xpub", "エクスポート xPub"},
- {"receive_btc_more_t_desc1", "ビットコイン(BTC)は資金受領用に以下の3つのアドレス形式を使用しています:\r\n1. Native SegWitは、最も効率的で安全なビットコインアドレス形式です。従来のアドレス形式に比べてコスト削減とセキュリティの向上を提供し、通常は「bc1」で始まります。\r\n2. Legacy形式はビットコインの最も初期のバージョンの一つで、通常は「1」で始まります。\r\n3. Nested SegWitは、スムーズにNative SegWitへの移行を促進するために設計されたソリューションで、通常は「3」で始まります"},
- {"receive_btc_more_t_desc2", "はい、3つの異なるBitcoinアドレスフォーマットは互いに資金を送金するために使用することができます.ただし、以下の点に注意することが重要です:\r\n1. 異なるトランザクション手数料:アドレスフォーマットの選択はトランザクション手数料に影響を与える可能性があります.ネイティブSegWitアドレスは通常、より低い手数料で使用できます.\r\n2. ウォレットと取引所の互換性:使用しているウォレットや取引所が選択したアドレスフォーマットに対応していることを確認してください.一部のウォレットは特定のアドレスフォーマットにのみ対応している場合があります."},
- {"receive_btc_more_t_desc3", "1. プライバシー:アドレスの再利用はトランザクションの追跡可能性を高め、プライバシーを危険にさらします.新しいアドレスはトランザクションのプライバシーを維持するのに役立ちます.\r\n2. トランザクション効率:1つのアドレスにリンクされた複数のUTXOは統合によるコスト増加を引き起こし、ウォレットの効率に影響を与える可能性があります.\r\n3. セキュリティ:アドレスの繰り返し使用はプライベートキーの公開リスクを高め、侵害された場合には損失をもたらす可能性があります.\r\n要するに、アドレスの再利用をしないことは、UTXOモデル内でのプライバシーの保護、トランザクションの最適化、およびセキュリティリスクの低減を実現します."},
+ {"receive_btc_more_t_desc1", "ビットコイン(BTC)は資金受領用に以下の3つのアドレス形式を使用しています:\n1. Native SegWitは、最も効率的で安全なビットコインアドレス形式です。従来のアドレス形式に比べてコスト削減とセキュリティの向上を提供し、通常は「bc1」で始まります。\n2. Legacy形式はビットコインの最も初期のバージョンの一つで、通常は「1」で始まります。\n3. Nested SegWitは、スムーズにNative SegWitへの移行を促進するために設計されたソリューションで、通常は「3」で始まります"},
+ {"receive_btc_more_t_desc2", "はい、3つの異なるBitcoinアドレスフォーマットは互いに資金を送金するために使用することができます.ただし、以下の点に注意することが重要です:\n1. 異なるトランザクション手数料:アドレスフォーマットの選択はトランザクション手数料に影響を与える可能性があります.ネイティブSegWitアドレスは通常、より低い手数料で使用できます.\n2. ウォレットと取引所の互換性:使用しているウォレットや取引所が選択したアドレスフォーマットに対応していることを確認してください.一部のウォレットは特定のアドレスフォーマットにのみ対応している場合があります."},
+ {"receive_btc_more_t_desc3", "1. プライバシー:アドレスの再利用はトランザクションの追跡可能性を高め、プライバシーを危険にさらします.新しいアドレスはトランザクションのプライバシーを維持するのに役立ちます.\n2. トランザクション効率:1つのアドレスにリンクされた複数のUTXOは統合によるコスト増加を引き起こし、ウォレットの効率に影響を与える可能性があります.\n3. セキュリティ:アドレスの繰り返し使用はプライベートキーの公開リスクを高め、侵害された場合には損失をもたらす可能性があります.\n要するに、アドレスの再利用をしないことは、UTXOモデル内でのプライバシーの保護、トランザクションの最適化、およびセキュリティリスクの低減を実現します."},
{"receive_btc_more_t_title1", "BTCのための3つの異なるアドレス形式は何ですか?"},
{"receive_btc_more_t_title2", "3つの異なるアドレス形式を使用して、お互いに資金を送金することはできますか?"},
{"receive_btc_more_t_title3", "再利用しないアドレスの利点"},
@@ -3491,21 +3494,21 @@ const static lv_i18n_phrase_t ja_singulars[] = {
{"receive_eth_more_derivation_path_ledger_legacy", "レジャシーレジャシー"},
{"receive_eth_more_derivation_path_ledger_live", "Ledger Live"},
{"receive_eth_more_derivation_path_title2", "アカウント例:"},
- {"receive_eth_more_t_desc1", "1. 標準パス:このパスは、アドレスの生成に多くのソフトウェアウォレットで広く使用されています.このようなウォレットの例には、MetaMask、Rabby、BitKeep、およびCore Walletが含まれます.\r\n2. Ledger Live:Ledger Liveからシードフレーズをインポートする場合は、このパスを選択してください.Keystoneは、この形式を使用して初期の10個のアドレスのみ同期サポートしていることに注意してください.\r\n3. Ledger Legacy:デジタル資産をLedger Legacyで管理する場合は、このパスに移行してください."},
+ {"receive_eth_more_t_desc1", "1. 標準パス:このパスは、アドレスの生成に多くのソフトウェアウォレットで広く使用されています.このようなウォレットの例には、MetaMask、Rabby、BitKeep、およびCore Walletが含まれます.\n2. Ledger Live:Ledger Liveからシードフレーズをインポートする場合は、このパスを選択してください.Keystoneは、この形式を使用して初期の10個のアドレスのみ同期サポートしていることに注意してください.\n3. Ledger Legacy:デジタル資産をLedger Legacyで管理する場合は、このパスに移行してください."},
{"receive_eth_more_t_title1", "異なるアプローチの探索:イーサリアムにおける標準、Ledger Live、およびレガシー派生パス"},
{"receive_eth_receive_main_title", "ETHを受け取る"},
{"receive_generate_new_address", "新しいアドレスを作成する"},
- {"receive_ltc_more_t_desc1", "1.Nested SegWit:SegWit を P2SH 内にネストした移行形式です。Legacy より効率的で、幅広い互換性により最も一般的に使用されている形式です。\r\n2.Native SegWit:完全にネイティブな SegWit 形式で、手数料が低く、トランザクションサイズも小さくなります。主要なウォレットや取引所のほとんどでサポートされ、ますます普及しています。"},
+ {"receive_ltc_more_t_desc1", "1.Nested SegWit:SegWit を P2SH 内にネストした移行形式です。Legacy より効率的で、幅広い互換性により最も一般的に使用されている形式です。\n2.Native SegWit:完全にネイティブな SegWit 形式で、手数料が低く、トランザクションサイズも小さくなります。主要なウォレットや取引所のほとんどでサポートされ、ますます普及しています。"},
{"receive_ltc_more_t_title1", "違いを知ろう:LTC における Nested SegWit と Native SegWit の派生パス"},
{"receive_more_t_qr_link", "https://keyst.one/t/3rd/faq"},
{"receive_sol_more_t_base_path", "アカウントベースのパス"},
- {"receive_sol_more_t_desc1", "1. アカウントベースのパス:多くのSolanaウォレットで広く採用されています.このようなウォレットの例はSolflareです.\r\n2. 単一アカウントパス:Sollet / MathWalletからシードフレーズをインポートする場合は、このパスを選択してください.Keystoneは、この形式を使用して最初の10個のアドレスのみを同期することができることに注意してください.\r\n3. サブアカウントパス:Phantom / Exodusなどのソフトウェアウォレットでデジタル資産を管理している場合は、このパスに移行してください."},
+ {"receive_sol_more_t_desc1", "1. アカウントベースのパス:多くのSolanaウォレットで広く採用されています.このようなウォレットの例はSolflareです.\n2. 単一アカウントパス:Sollet / MathWalletからシードフレーズをインポートする場合は、このパスを選択してください.Keystoneは、この形式を使用して最初の10個のアドレスのみを同期することができることに注意してください.\n3. サブアカウントパス:Phantom / Exodusなどのソフトウェアウォレットでデジタル資産を管理している場合は、このパスに移行してください."},
{"receive_sol_more_t_single_path", "単一アカウントパス"},
{"receive_sol_more_t_sub_path", "サブアカウントパス"},
{"receive_sol_more_t_title1", "ソラナのパスオプションを探る"},
{"receive_ton_hint", "Keystoneのデフォルトアドレス形式はV4R2です。Tonkeeperと一致しない場合は、Tonkeeperで確認して切り替えてください。このアドレスはTON取引専用です。このアドレスに他の種類のデジタル資産を送ると、紛失することになります。"},
{"receive_trx_hint", "このアドレスはTRX、TRC-20トークン、およびTRC-10トークンのみに対応しています.このアドレスに送信された他のデジタル資産は失われます."},
- {"receive_xmr_more_t_desc1", "1.プライマリアカウントは、あなたの主要なモネロアカウントで、主要な残高を保有し、直接資金を受け取ることができます。\r\n2.サブアドレスは、あなたのプライマリアカウントにリンクされた二次アドレスで、プライベートに支払いを受けるために設計されています。各サブアドレスは取引を別々に保持し、あなたのメインアカウントの残高を隠します。\r\n3.大きな資金や長期的な資金にはプライマリアカウントを使用してください。メインの残高やアカウントの詳細を明かさずに支払いを受け取りたい場合は、サブアドレスを使用してください。"},
+ {"receive_xmr_more_t_desc1", "1.プライマリアカウントは、あなたの主要なモネロアカウントで、主要な残高を保有し、直接資金を受け取ることができます。\n2.サブアドレスは、あなたのプライマリアカウントにリンクされた二次アドレスで、プライベートに支払いを受けるために設計されています。各サブアドレスは取引を別々に保持し、あなたのメインアカウントの残高を隠します。\n3.大きな資金や長期的な資金にはプライマリアカウントを使用してください。メインの残高やアカウントの詳細を明かさずに支払いを受け取りたい場合は、サブアドレスを使用してください。"},
{"receive_xmr_more_t_title1", "プライマリアカウントとサブアドレスの違いを知る"},
{"recovery_mode_switch_desc", "この機能を有効にすると、回復モードに入ることができます。システムを回復する必要がある場合にのみ続行してください。"},
{"recovery_mode_switch_text_title", "回復モード"},
@@ -3947,6 +3950,14 @@ const static lv_i18n_phrase_t ko_singulars[] = {
{"boot_version_not_match_desc", "현재 펌웨어가 필수 보안 업그레이드를 건너뛴 것 같습니다. 도움을 받으려면 #1BE0C6 support@keyst.one#에 연락해 주세요"},
{"boot_version_not_match_title", "보안 알림"},
{"btc_avalanche_notice", "이 트랜잭션은 Avalanche BTC 주소를 사용합니다. 오류나 자산 손실을 방지하기 위해 모든 세부 사항을 주의 깊게 확인하십시오."},
+ {"btc_check_input_value_hint", "각 입력 금액이 올바른지 확인해 주세요."},
+ {"btc_fee_unknown", "알 수 없음"},
+ {"btc_input_ref", "입력 참조"},
+ {"btc_input_reference", "입력 참조"},
+ {"btc_outpoint", "아웃포인트"},
+ {"btc_sighash", "Sighash"},
+ {"btc_sighash_none_warning", "출력이 고정되지 않으며 이 서명은 다른 출력과 함께 재사용될 수 있습니다."},
+ {"btc_sighash_single_warning", "해당 출력만 고정됩니다. 서명 후 다른 출력은 변경될 수 있습니다."},
{"calculat_modal_title", "계산중 "},
{"catalyst_transactions_notice", "주소가 일치하는지 확인하세요. 주의깊게 검증해 주세요."},
{"catalyst_voting_registration", "투표 등록 확인"},
@@ -4199,7 +4210,7 @@ const static lv_i18n_phrase_t ko_singulars[] = {
{"firmware_update_no_upgradable_firmware_desc", "장치의 현재 버전이 MicroSD 카드의 펌웨어 버전보다 높거나 같습니다."},
{"firmware_update_no_upgradable_firmware_title", "업그레이드 가능한 펌웨어를 찾을 수 없습니다."},
{"firmware_update_sd_checksum_desc", "#F5870A 체크섬 표시#"},
- {"firmware_update_sd_checksum_done", "체크섬\r\n"},
+ {"firmware_update_sd_checksum_done", "체크섬\n"},
{"firmware_update_sd_checksum_fmt", "#F5870A 체크섬 표시 (%d%%)#"},
{"firmware_update_sd_checksum_notice", "보안성을 더욱 높일 수 있는 옵션 기능입니다.아래 체크섬과 공식 홈페이지에서 다운로드한 패키지의 체크섬을 비교하여 동일하게 유지하여 주시기 바랍니다."},
{"firmware_update_sd_copying_desc", "업그레이드 중에는 microSD 카드를 제거하지 마십시오."},
@@ -4402,7 +4413,7 @@ const static lv_i18n_phrase_t ko_singulars[] = {
{"purpose_title", "새 지갑"},
{"receive_ada_enterprise_address", "주소(위임되지 않음)"},
{"receive_ada_more_t_desc1", "카르다노 블록체인에서 24개의 계정을 제공하고 있으며, 각 계정은 사용할 수 있는 수많은 주소를 생성할 수 있다. 필요한 계정을 쉽게 전환할 수 있다."},
- {"receive_ada_more_t_desc2", "\"1. Payment & Stake Key: Cardano의 모든 계정에는 정기적인 ADA 거래(전송 및 수신)를 위한 Payment Key와 Stake and Reception을 위한 Stake Key가 있습니다.\r\n 2. 기본 주소(Base Address): 기본 주소는 결제 키와 지분 키 모두에서 파생됩니다. 정기적인 거래와 스테이킹에 모두 사용할 수 있습니다. \"외부 주소(Delegated)\"라고도 합니다\r\n 3. 기업 주소: 이 주소는 결제 키만 포함되어 있으며, 일반 거래에만 사용되며, 거래소와 같이 지분이 포함되지 않는 \"비즈니스\" 시나리오를 위해 설계되었으며, \"외부 주소(위임되지 않음)\"라고도 합니다\r\n 4. Stake & Reward Address: Stake Key는 스테이킹에 사용되며, 관련된 Stake Address는 스테이킹 보상을 받는 데 사용되는 Reward Address라고도 합니다.\""},
+ {"receive_ada_more_t_desc2", "\"1. Payment & Stake Key: Cardano의 모든 계정에는 정기적인 ADA 거래(전송 및 수신)를 위한 Payment Key와 Stake and Reception을 위한 Stake Key가 있습니다.\n 2. 기본 주소(Base Address): 기본 주소는 결제 키와 지분 키 모두에서 파생됩니다. 정기적인 거래와 스테이킹에 모두 사용할 수 있습니다. \"외부 주소(Delegated)\"라고도 합니다\n 3. 기업 주소: 이 주소는 결제 키만 포함되어 있으며, 일반 거래에만 사용되며, 거래소와 같이 지분이 포함되지 않는 \"비즈니스\" 시나리오를 위해 설계되었으며, \"외부 주소(위임되지 않음)\"라고도 합니다\n 4. Stake & Reward Address: Stake Key는 스테이킹에 사용되며, 관련된 Stake Address는 스테이킹 보상을 받는 데 사용되는 Reward Address라고도 합니다.\""},
{"receive_ada_more_t_ledger", "Ledger/BitBox02"},
{"receive_ada_more_t_standard", "Cardano Native"},
{"receive_ada_more_t_title1", "키스톤의 여러 카르다노 계정"},
@@ -4415,9 +4426,9 @@ const static lv_i18n_phrase_t ko_singulars[] = {
{"receive_btc_extended_public_key", "공개 키 확장 "},
{"receive_btc_more_address_settings", "주소 설정"},
{"receive_btc_more_export_xpub", "XPub 내보내기"},
- {"receive_btc_more_t_desc1", "비트코인(BTC)은 자금을 받기 위해 세 가지 주소 형식을 사용합니다:\r\n 1. 네이티브 세그윗(Native SegWit)은 가장 효율적이고 안전한 비트코인 주소 포맷이다. 일반적으로 \"bc1\"로 시작하는 다른 전통적인 주소 포맷에 비해 비용 절감 및 향상된 보안을 제공한다\r\n 2. 레거시 형식은 일반적으로 \"1\"로 시작하는 비트코인의 초기 버전 중 하나이다\r\n 3. Nested SegWit은 Native SegWit으로 원활하게 전환할 수 있도록 설계된 솔루션으로, 일반적으로 \"3\"으로 시작한다"},
- {"receive_btc_more_t_desc2", "\"그렇다. 서로 다른 세 가지 비트코인 주소 형식을 사용하여 자금을 이체할 수 있다. 그러나 다음과 같은 측면을 염두에 두어야 한다:\r\n 1. 거래 수수료 차이: 주소 형식의 선택은 거래 수수료에 영향을 미칠 수 있으며, 네이티브 세그윗 주소는 일반적으로 수수료가 저렴하다.\r\n 2. 지갑과 교환의 호환성: 당신이 사용하고 있는 지갑이나 교환이 당신이 선택한 주소 형식을 지원하는지 확인하세요. 일부 지갑은 특정 주소 형식과만 호환될 수 있습니다.\""},
- {"receive_btc_more_t_desc3", "\"1. Privacy: 주소를 재사용하면 트랜잭션 추적성이 향상되어 프라이버시가 위험해진다. 새로운 주소는 트랜잭션 프라이버시를 유지하는 데 도움이 된다.\r\n 2. 트랜잭션 효율성: 하나의 주소에 연결된 여러 UTXO는 통합 비용을 증가시켜 지갑 효율성에 영향을 줄 수 있습니다.\r\n 3. 보안: 주소를 반복적으로 사용하면 개인 키가 노출될 위험이 높아져 손상될 경우 손실이 발생할 수 있습니다.\r\n 간단히 말해서, 주소를 재사용하지 않으면 사생활이 보호되고 트랜잭션이 최적화되며 UTXO 모델 내의 보안 위험이 감소합니다.\""},
+ {"receive_btc_more_t_desc1", "비트코인(BTC)은 자금을 받기 위해 세 가지 주소 형식을 사용합니다:\n 1. 네이티브 세그윗(Native SegWit)은 가장 효율적이고 안전한 비트코인 주소 포맷이다. 일반적으로 \"bc1\"로 시작하는 다른 전통적인 주소 포맷에 비해 비용 절감 및 향상된 보안을 제공한다\n 2. 레거시 형식은 일반적으로 \"1\"로 시작하는 비트코인의 초기 버전 중 하나이다\n 3. Nested SegWit은 Native SegWit으로 원활하게 전환할 수 있도록 설계된 솔루션으로, 일반적으로 \"3\"으로 시작한다"},
+ {"receive_btc_more_t_desc2", "\"그렇다. 서로 다른 세 가지 비트코인 주소 형식을 사용하여 자금을 이체할 수 있다. 그러나 다음과 같은 측면을 염두에 두어야 한다:\n 1. 거래 수수료 차이: 주소 형식의 선택은 거래 수수료에 영향을 미칠 수 있으며, 네이티브 세그윗 주소는 일반적으로 수수료가 저렴하다.\n 2. 지갑과 교환의 호환성: 당신이 사용하고 있는 지갑이나 교환이 당신이 선택한 주소 형식을 지원하는지 확인하세요. 일부 지갑은 특정 주소 형식과만 호환될 수 있습니다.\""},
+ {"receive_btc_more_t_desc3", "\"1. Privacy: 주소를 재사용하면 트랜잭션 추적성이 향상되어 프라이버시가 위험해진다. 새로운 주소는 트랜잭션 프라이버시를 유지하는 데 도움이 된다.\n 2. 트랜잭션 효율성: 하나의 주소에 연결된 여러 UTXO는 통합 비용을 증가시켜 지갑 효율성에 영향을 줄 수 있습니다.\n 3. 보안: 주소를 반복적으로 사용하면 개인 키가 노출될 위험이 높아져 손상될 경우 손실이 발생할 수 있습니다.\n 간단히 말해서, 주소를 재사용하지 않으면 사생활이 보호되고 트랜잭션이 최적화되며 UTXO 모델 내의 보안 위험이 감소합니다.\""},
{"receive_btc_more_t_title1", "BTC의 세 가지 주소 형식은 무엇입니까?"},
{"receive_btc_more_t_title2", "세 가지 다른 주소 형식을 사용하여 서로 자금을 송금할 수 있습니까?"},
{"receive_btc_more_t_title3", "주소를 재사용하지 않을 경우의 이점"},
@@ -4434,21 +4445,21 @@ const static lv_i18n_phrase_t ko_singulars[] = {
{"receive_eth_more_derivation_path_ledger_legacy", "레저 레거시"},
{"receive_eth_more_derivation_path_ledger_live", "레저 라이브"},
{"receive_eth_more_derivation_path_title2", "계정 예:"},
- {"receive_eth_more_t_desc1", "\"1. 표준 경로: 이 경로는 주소 생성을 위해 수많은 소프트웨어 지갑에서 널리 사용되고 있다. 이러한 지갑의 예로는 메타마스크, 래비, 비트킵, 코어 지갑 등이 있다.\r\n 2. 레저 라이브: 레저 라이브에서 시드 프레이즈를 가져오려면 이 경로를 선택하십시오. 키스톤은 이 형식을 사용하여 초기 10개의 주소만 동기화할 수 있습니다.\r\n 3. 원장 레거시: 원장 레거시로 디지털 자산을 관리하는 경우 이 경로로 전환\""},
+ {"receive_eth_more_t_desc1", "\"1. 표준 경로: 이 경로는 주소 생성을 위해 수많은 소프트웨어 지갑에서 널리 사용되고 있다. 이러한 지갑의 예로는 메타마스크, 래비, 비트킵, 코어 지갑 등이 있다.\n 2. 레저 라이브: 레저 라이브에서 시드 프레이즈를 가져오려면 이 경로를 선택하십시오. 키스톤은 이 형식을 사용하여 초기 10개의 주소만 동기화할 수 있습니다.\n 3. 원장 레거시: 원장 레거시로 디지털 자산을 관리하는 경우 이 경로로 전환\""},
{"receive_eth_more_t_title1", "차이점 탐색: 표준, 원장 라이브 및 이더리움의 레거시 도출 경로"},
{"receive_eth_receive_main_title", "ETH 받기"},
{"receive_generate_new_address", "새 주소 생성"},
- {"receive_ltc_more_t_desc1", "1.Nested SegWit: SegWit이 P2SH 안에 중첩된 과도기적 형식입니다. Legacy보다 효율성이 뛰어나며, 광범위한 호환성 덕분에 가장 일반적으로 사용되는 형식입니다.\r\n2.Native SegWit: 완전한 네이티브 SegWit 형식으로, 수수료가 더 낮고 거래 크기가 더 작습니다. 점점 더 인기를 얻고 있으며 대부분의 주요 지갑과 거래소에서 지원됩니다."},
+ {"receive_ltc_more_t_desc1", "1.Nested SegWit: SegWit이 P2SH 안에 중첩된 과도기적 형식입니다. Legacy보다 효율성이 뛰어나며, 광범위한 호환성 덕분에 가장 일반적으로 사용되는 형식입니다.\n2.Native SegWit: 완전한 네이티브 SegWit 형식으로, 수수료가 더 낮고 거래 크기가 더 작습니다. 점점 더 인기를 얻고 있으며 대부분의 주요 지갑과 거래소에서 지원됩니다."},
{"receive_ltc_more_t_title1", "차이를 알아보기: LTC에서 Nested SegWit 및 Native SegWit 파생 경로"},
{"receive_more_t_qr_link", "https://keyst.one/t/3rd/faq"},
{"receive_sol_more_t_base_path", "계정 기반 경로"},
- {"receive_sol_more_t_desc1", "\"1. 계정 기반 경로: 수많은 솔라나 지갑에 널리 채택되고 있습니다. 그러한 지갑의 예로는 솔프라레가 있습니다.\r\n 2. 단일 계정 경로: Sollet / MathWallet에서 시드 구문을 가져오려면 이 경로를 선택하십시오. Keystone은 이 형식을 사용하여 초기 10개 주소만 동기화할 수 있습니다.\r\n 3. 하위 계정 경로: 팬텀/엑소더스와 같은 소프트웨어 지갑으로 디지털 자산을 관리하면 이 경로로 전환하십시오.\""},
+ {"receive_sol_more_t_desc1", "\"1. 계정 기반 경로: 수많은 솔라나 지갑에 널리 채택되고 있습니다. 그러한 지갑의 예로는 솔프라레가 있습니다.\n 2. 단일 계정 경로: Sollet / MathWallet에서 시드 구문을 가져오려면 이 경로를 선택하십시오. Keystone은 이 형식을 사용하여 초기 10개 주소만 동기화할 수 있습니다.\n 3. 하위 계정 경로: 팬텀/엑소더스와 같은 소프트웨어 지갑으로 디지털 자산을 관리하면 이 경로로 전환하십시오.\""},
{"receive_sol_more_t_single_path", "단일 계정 경로"},
{"receive_sol_more_t_sub_path", "서브 계정 경로"},
{"receive_sol_more_t_title1", "Solana 경로 옵션 탐색"},
{"receive_ton_hint", "Keystone 기본 주소 형식은 V4R2입니다. Tonkeeper와 일치하지 않는 경우 Tonkeeper에서 확인하고 전환하십시오. 이 주소는 TON 거래에만 사용됩니다. 이 주소로 다른 종류의 디지털 자산을 보내면 손실됩니다."},
{"receive_trx_hint", "이 주소는 TRX, TRC-20 토큰 및 TRC-10 토큰만을 위한 것이며, 이 주소로 전송된 다른 디지털 자산은 손실됩니다."},
- {"receive_xmr_more_t_desc1", "1. 기본 계정은 귀하의 주요 모네로 계정으로, 주요 잔액을 보유하고 직접 자금을 받을 수 있습니다.\r\n2. 서브어드레스는 귀하의 기본 계정에 연결된 보조 주소로, 개인적으로 지불을 받기 위해 설계되었습니다. 각 서브어드레스는 거래를 별도로 유지하여 귀하의 주요 계정 잔액을 숨깁니다.\r\n3. 큰 금액이나 장기 자금의 경우 기본 계정을 사용하세요. 주요 잔액이나 계정 상세 정보를 공개하지 않고 지불을 받고 싶을 때 서브어드레스를 사용하세요."},
+ {"receive_xmr_more_t_desc1", "1. 기본 계정은 귀하의 주요 모네로 계정으로, 주요 잔액을 보유하고 직접 자금을 받을 수 있습니다.\n2. 서브어드레스는 귀하의 기본 계정에 연결된 보조 주소로, 개인적으로 지불을 받기 위해 설계되었습니다. 각 서브어드레스는 거래를 별도로 유지하여 귀하의 주요 계정 잔액을 숨깁니다.\n3. 큰 금액이나 장기 자금의 경우 기본 계정을 사용하세요. 주요 잔액이나 계정 상세 정보를 공개하지 않고 지불을 받고 싶을 때 서브어드레스를 사용하세요."},
{"receive_xmr_more_t_title1", "기본 계정과 서브어드레스의 차이를 알아보세요"},
{"recovery_mode_switch_desc", "이 기능을 활성화하면 복구 모드에 진입할 수 있습니다. 시스템을 복구해야 하는 경우에만 진행하세요."},
{"recovery_mode_switch_text_title", "복구 모드"},
@@ -4890,6 +4901,14 @@ const static lv_i18n_phrase_t ru_singulars[] = {
{"boot_version_not_match_desc", "Ваша текущая прошивка, возможно, пропустила необходимое обновление безопасности, пожалуйста, свяжитесь с #1BE0C6 support@keyst.one# для помощи."},
{"boot_version_not_match_title", "Безопасность уведомление"},
{"btc_avalanche_notice", "Эта транзакция использует адрес Avalanche BTC. Внимательно проверьте все детали, чтобы избежать ошибок или потери активов."},
+ {"btc_check_input_value_hint", "Пожалуйста, проверьте корректность суммы каждого входа."},
+ {"btc_fee_unknown", "Неизвестно"},
+ {"btc_input_ref", "Ссылка входа"},
+ {"btc_input_reference", "Ссылка на вход"},
+ {"btc_outpoint", "Выходная точка"},
+ {"btc_sighash", "Sighash"},
+ {"btc_sighash_none_warning", "Выходы не зафиксированы и эта подпись может быть повторно использована с другими выходами."},
+ {"btc_sighash_single_warning", "Зафиксирован только соответствующий выход. Другие выходы могут быть изменены после подписания."},
{"calculat_modal_title", "Расчет"},
{"catalyst_transactions_notice", "Убедитесь, что адрес совпадает. Тщательно проверьте."},
{"catalyst_voting_registration", "Регистрация для голосования"},
@@ -5142,7 +5161,7 @@ const static lv_i18n_phrase_t ru_singulars[] = {
{"firmware_update_no_upgradable_firmware_desc", "Обновляемой прошивки не обнаружено"},
{"firmware_update_no_upgradable_firmware_title", "Обновляемой прошивки не обнаружено"},
{"firmware_update_sd_checksum_desc", "#F5870A Показать контрольную сумму#"},
- {"firmware_update_sd_checksum_done", "Контрольная сумма:\r\n"},
+ {"firmware_update_sd_checksum_done", "Контрольная сумма:\n"},
{"firmware_update_sd_checksum_fmt", "#F5870A Показать контрольную сумму(%d%%)#"},
{"firmware_update_sd_checksum_notice", "Это дополнительная функция, предназначенная для дальнейшего повышения безопасности. Сравните следующую контрольную сумму с контрольной суммой вашего загружаемого пакета на официальном сайте и убедитесь, что они совпадают"},
{"firmware_update_sd_copying_desc", "Не доставайте MicroSD карту во время загрузки прошивки."},
@@ -5200,7 +5219,7 @@ const static lv_i18n_phrase_t ru_singulars[] = {
{"import_wallet_phrase_desc", "Введите слова вашей сид фразы в поля представленные ниже."},
{"import_wallet_phrase_title", "Введите сид фразу"},
{"import_wallet_shamir_backup", "Фраза Шамира"},
- {"import_wallet_shamir_backup_desc", "Вам понадобится несколько сид фраз\r\nдля восстановления кошелька"},
+ {"import_wallet_shamir_backup_desc", "Вам понадобится несколько сид фраз\nдля восстановления кошелька"},
{"import_wallet_share_success_desc", "Эта часть сид фразы соответствует вашему кошельку."},
{"import_wallet_single_backup_desc", "Восстановите кошелек выбрав тип сид фразы, Пожалуйста, завершите процесс установки сразу, чтобы избежать риска для безопасности"},
{"import_wallet_single_phrase", "Стандартная фраза"},
@@ -5345,7 +5364,7 @@ const static lv_i18n_phrase_t ru_singulars[] = {
{"purpose_title", "Новый кошелек"},
{"receive_ada_enterprise_address", "Адрес (Не делегированный)"},
{"receive_ada_more_t_desc1", "В блокчейне Cardano мы предоставляем 24 счета. Каждый счет может генерировать множество адресов. Вы можете легко переключаться между нужными вам счетами."},
- {"receive_ada_more_t_desc2", "1. Ключи для платежей и делегирования: В Cardano каждая учетная запись имеет платежный ключ для обычных транзакций ADA (отправка и получение) и ключ для стейкинга и получения вознаграждений.\r\n2. Базовый адрес: Базовый адрес получается как из платежного ключа, так и из ключа делегирования. Его можно использовать как для обычных транзакций, так и для стейкинга. Также известен как «Внешний адрес (делегированный)».\r\n3. Адрес предприятия: Этот адрес содержит только платежный ключ и используется исключительно для обычных транзакций, а не для стейкинга. Он предназначен для «бизнес-сценариев», которые не требуют стейкинга, например, бирж. Также известен как «Внешний адрес (не делегированный)».\r\n4. Адреса стейкинга и вознаграждений: Ключи для стейкинга используется для стейкинга, а связанный с ним адрес стейкинга также называется адресом вознаграждения и используется для получения вознаграждений за стейкинг."},
+ {"receive_ada_more_t_desc2", "1. Ключи для платежей и делегирования: В Cardano каждая учетная запись имеет платежный ключ для обычных транзакций ADA (отправка и получение) и ключ для стейкинга и получения вознаграждений.\n2. Базовый адрес: Базовый адрес получается как из платежного ключа, так и из ключа делегирования. Его можно использовать как для обычных транзакций, так и для стейкинга. Также известен как «Внешний адрес (делегированный)».\n3. Адрес предприятия: Этот адрес содержит только платежный ключ и используется исключительно для обычных транзакций, а не для стейкинга. Он предназначен для «бизнес-сценариев», которые не требуют стейкинга, например, бирж. Также известен как «Внешний адрес (не делегированный)».\n4. Адреса стейкинга и вознаграждений: Ключи для стейкинга используется для стейкинга, а связанный с ним адрес стейкинга также называется адресом вознаграждения и используется для получения вознаграждений за стейкинг."},
{"receive_ada_more_t_ledger", "Ledger/BitBox02"},
{"receive_ada_more_t_standard", "Cardano Native"},
{"receive_ada_more_t_title1", "Несколько счетов Cardano на Keystone"},
@@ -5358,9 +5377,9 @@ const static lv_i18n_phrase_t ru_singulars[] = {
{"receive_btc_extended_public_key", "Расширенный Открытый ключ"},
{"receive_btc_more_address_settings", "Настройки адресов"},
{"receive_btc_more_export_xpub", "Экспорт XPub"},
- {"receive_btc_more_t_desc1", "Bitcoin (BTC) поддерживает три формата адресов: \r\n1. Native SegWit это наиболее эффективный и безопасный формат, который уменьшает комиссии в сети в отличие от других адресов. Адреса этого формата начинаются с символов «bc1». \r\n2. Устаревший формат одна из самых ранних версий адресов Bitcoin, обычно начинающаяся с «1».\r\n3. Nested SegWit это решение, предназначенное для плавного перехода на Native SegWit, обычно начинается с «3». "},
- {"receive_btc_more_t_desc2", "Да, три различных формата Bitcoin адресов могут использоваться для перевода средств друг другу. Однако важно учитывать следующие аспекты:\r\n1. Различная комиссия за транзакцию. Выбор формата адреса может влиять на комиссию за транзакцию, при этом оригинальные адреса SegWit обычно имеют более низкую комиссию.\r\n2. Совместимость кошелька и биржи. Убедитесь, что используемый вами кошелек или биржа поддерживает выбранный формат адреса. Некоторые кошельки могут быть совместимы только с определенными форматами адресов."},
- {"receive_btc_more_t_desc3", "1. Конфиденциальность: повторное использование адресов повышает отслеживаемость транзакций и уменьшает вашу конфиденциальность. Новые адреса помогают поддерживать конфиденциальность транзакций.\r\n2. Эффективность транзакций. Несколько UTXO, связанных с одним адресом, могут повысить затраты на консолидацию, что повлияет на эффективность кошелька.\r\n3. Безопасность. Повторное использование адреса повышает риск раскрытия приватного ключа, что потенциально может привести к потерям в случае компрометации своих секретов.\r\nОтказ от повторного использования адресов защищает конфиденциальность, оптимизирует транзакции и снижает риски безопасности в рамках модели UTXO»"},
+ {"receive_btc_more_t_desc1", "Bitcoin (BTC) поддерживает три формата адресов: \n1. Native SegWit это наиболее эффективный и безопасный формат, который уменьшает комиссии в сети в отличие от других адресов. Адреса этого формата начинаются с символов «bc1». \n2. Устаревший формат одна из самых ранних версий адресов Bitcoin, обычно начинающаяся с «1».\n3. Nested SegWit это решение, предназначенное для плавного перехода на Native SegWit, обычно начинается с «3». "},
+ {"receive_btc_more_t_desc2", "Да, три различных формата Bitcoin адресов могут использоваться для перевода средств друг другу. Однако важно учитывать следующие аспекты:\n1. Различная комиссия за транзакцию. Выбор формата адреса может влиять на комиссию за транзакцию, при этом оригинальные адреса SegWit обычно имеют более низкую комиссию.\n2. Совместимость кошелька и биржи. Убедитесь, что используемый вами кошелек или биржа поддерживает выбранный формат адреса. Некоторые кошельки могут быть совместимы только с определенными форматами адресов."},
+ {"receive_btc_more_t_desc3", "1. Конфиденциальность: повторное использование адресов повышает отслеживаемость транзакций и уменьшает вашу конфиденциальность. Новые адреса помогают поддерживать конфиденциальность транзакций.\n2. Эффективность транзакций. Несколько UTXO, связанных с одним адресом, могут повысить затраты на консолидацию, что повлияет на эффективность кошелька.\n3. Безопасность. Повторное использование адреса повышает риск раскрытия приватного ключа, что потенциально может привести к потерям в случае компрометации своих секретов.\nОтказ от повторного использования адресов защищает конфиденциальность, оптимизирует транзакции и снижает риски безопасности в рамках модели UTXO»"},
{"receive_btc_more_t_title1", "Чем отличаются три формата Bitcoin адресов?"},
{"receive_btc_more_t_title2", "Можно ли использовать три разных формата адресов для перевода средств между ними?"},
{"receive_btc_more_t_title3", "О недостатках повторного использования адресов"},
@@ -5377,21 +5396,21 @@ const static lv_i18n_phrase_t ru_singulars[] = {
{"receive_eth_more_derivation_path_ledger_legacy", "Ledger устаревшие"},
{"receive_eth_more_derivation_path_ledger_live", "Ledger Live"},
{"receive_eth_more_derivation_path_title2", "Пример адресов"},
- {"receive_eth_more_t_desc1", "1. Стандартный путь: этот путь широко используется популярными программными кошельками для генерации адресов. Примеры таких кошельков: MetaMask, Rabby, BitKeep и Core Wallet. \r\n2. Ledger Live: выберите этот путь, если вы собираетесь импортировать сид фразу из Ledger Live. Обратите внимание, что Keystone поддерживает синхронизацию только первых 10 адресов в этом формате. \r\n3. Ledger устаревшие: переходите на этот путь, если вы управляете своими цифровыми активами с помощью устаревших приложений Ledger"},
+ {"receive_eth_more_t_desc1", "1. Стандартный путь: этот путь широко используется популярными программными кошельками для генерации адресов. Примеры таких кошельков: MetaMask, Rabby, BitKeep и Core Wallet. \n2. Ledger Live: выберите этот путь, если вы собираетесь импортировать сид фразу из Ledger Live. Обратите внимание, что Keystone поддерживает синхронизацию только первых 10 адресов в этом формате. \n3. Ledger устаревшие: переходите на этот путь, если вы управляете своими цифровыми активами с помощью устаревших приложений Ledger"},
{"receive_eth_more_t_title1", "Ledger Live и устаревших путей вывода в Ethereum\""},
{"receive_eth_receive_main_title", "Получить ETH"},
{"receive_generate_new_address", "Создать новый адрес"},
- {"receive_ltc_more_t_desc1", "1.Nested SegWit: переходный формат, где SegWit вложен в P2SH. Он обеспечивает лучшую эффективность, чем Legacy, и является наиболее часто используемым форматом благодаря широкой совместимости.\r\n2.Native SegWit: полностью нативный формат SegWit с более низкими комиссиями и меньшими размерами транзакций. Становится всё более популярным и поддерживается большинством основных кошельков и бирж."},
+ {"receive_ltc_more_t_desc1", "1.Nested SegWit: переходный формат, где SegWit вложен в P2SH. Он обеспечивает лучшую эффективность, чем Legacy, и является наиболее часто используемым форматом благодаря широкой совместимости.\n2.Native SegWit: полностью нативный формат SegWit с более низкими комиссиями и меньшими размерами транзакций. Становится всё более популярным и поддерживается большинством основных кошельков и бирж."},
{"receive_ltc_more_t_title1", "Узнайте разницу: вложенный SegWit и нативные пути деривации SegWit в LTC"},
{"receive_more_t_qr_link", "https://keyst.one/t/3rd/faq"},
{"receive_sol_more_t_base_path", "Путь основного счета"},
- {"receive_sol_more_t_desc1", "1. Путь на основе учетной записи: широко применяется во многих кошельках Solana. Примером такого кошелька является Solflare.\r\n2. Путь к единой учетной записи: выберите этот путь, если вы собираетесь импортировать исходную фразу из Sollet/MathWallet. Обратите внимание, что Keystone поддерживает синхронизацию только первых 10 адресов в этом формате.\r\n3. Путь субсчета: перейдите на этот путь, если вы управляете своими цифровыми активами с помощью программных кошельков, таких как Phantom/Exodus."},
+ {"receive_sol_more_t_desc1", "1. Путь на основе учетной записи: широко применяется во многих кошельках Solana. Примером такого кошелька является Solflare.\n2. Путь к единой учетной записи: выберите этот путь, если вы собираетесь импортировать исходную фразу из Sollet/MathWallet. Обратите внимание, что Keystone поддерживает синхронизацию только первых 10 адресов в этом формате.\n3. Путь субсчета: перейдите на этот путь, если вы управляете своими цифровыми активами с помощью программных кошельков, таких как Phantom/Exodus."},
{"receive_sol_more_t_single_path", "Путь к единому счету"},
{"receive_sol_more_t_sub_path", "Путь суб-счета"},
{"receive_sol_more_t_title1", "Узнать о путях вывода Solana"},
{"receive_ton_hint", "Формат адреса по умолчанию для Keystone - V4R2. Если они не совпадают с Tonkeeper, пожалуйста, проверьте и переключите в Tonkeeper. Этот адрес используется исключительно для транзакций TON. Отправка других типов цифровых активов на этот адрес приведет к их потере."},
{"receive_trx_hint", "Этот адрес предназначен только для TRX, TRC-20 и TRC-10 токенов, другие цифровые активы, отправленные на этот адрес, будут потеряны."},
- {"receive_xmr_more_t_desc1", "1. Основной счет — это ваш основной счет Monero, на котором хранится ваш основной баланс и который может напрямую получать средства.\r\n2. Субадрес — это второстепенный адрес, связанный с вашим основным счетом, предназначенный для частного получения платежей. Каждый субадрес держит транзакции отдельно, скрывая баланс вашего основного счета.\r\n3. Используйте основной счет для больших или долгосрочных средств. Используйте субадреса, когда вы хотите получать платежи, не раскрывая основной баланс или детали счета."},
+ {"receive_xmr_more_t_desc1", "1. Основной счет — это ваш основной счет Monero, на котором хранится ваш основной баланс и который может напрямую получать средства.\n2. Субадрес — это второстепенный адрес, связанный с вашим основным счетом, предназначенный для частного получения платежей. Каждый субадрес держит транзакции отдельно, скрывая баланс вашего основного счета.\n3. Используйте основной счет для больших или долгосрочных средств. Используйте субадреса, когда вы хотите получать платежи, не раскрывая основной баланс или детали счета."},
{"receive_xmr_more_t_title1", "Знайте разницу: Основной счет и субадрес"},
{"recovery_mode_switch_desc", "Включив эту функцию, вы можете войти в режим восстановления, продолжайте только в том случае, если вам нужно восстановить свою систему."},
{"recovery_mode_switch_text_title", "Режим восстановления"},
@@ -5696,12 +5715,9 @@ const static lv_i18n_phrase_t ru_singulars[] = {
static uint8_t ru_plural_fn(int32_t num)
{
- uint32_t n = op_n(num);
- UNUSED(n);
- uint32_t v = op_v(n);
- UNUSED(v);
- uint32_t i = op_i(n);
- UNUSED(i);
+ uint32_t n = op_n(num); UNUSED(n);
+ uint32_t v = op_v(n); UNUSED(v);
+ uint32_t i = op_i(n); UNUSED(i);
uint32_t i10 = i % 10;
uint32_t i100 = i % 100;
if ((v == 0 && i10 == 1 && i100 != 11)) return LV_I18N_PLURAL_TYPE_ONE;
@@ -5841,6 +5857,14 @@ const static lv_i18n_phrase_t zh_cn_singulars[] = {
{"boot_version_not_match_desc", "您当前的固件可能错过了必要的安全升级,请联系 #1BE0C6 support@keyst.one# 以获取帮助。"},
{"boot_version_not_match_title", "安全通知"},
{"btc_avalanche_notice", "此交易使用Avalanche BTC地址。请仔细验证所有详细信息,以避免错误或资产损失。"},
+ {"btc_check_input_value_hint", "请确认每个输入金额都正确。"},
+ {"btc_fee_unknown", "未知"},
+ {"btc_input_ref", "输入引用"},
+ {"btc_input_reference", "输入引用"},
+ {"btc_outpoint", "输出点"},
+ {"btc_sighash", "签名哈希"},
+ {"btc_sighash_none_warning", "输出未被锁定,此签名可能被复用于不同的输出。"},
+ {"btc_sighash_single_warning", "只有对应的输出被锁定。签名后其他输出仍可能被更改。"},
{"calculat_modal_title", "计算中..."},
{"catalyst_transactions_notice", "请确保地址匹配。仔细核对。"},
{"catalyst_voting_registration", "确认投票注册"},
@@ -6093,7 +6117,7 @@ const static lv_i18n_phrase_t zh_cn_singulars[] = {
{"firmware_update_no_upgradable_firmware_desc", "设备当前版本已高于或等于 microSD 卡上的固件版本."},
{"firmware_update_no_upgradable_firmware_title", "未检测到可升级固件"},
{"firmware_update_sd_checksum_desc", "#F5870A 展示校验和#"},
- {"firmware_update_sd_checksum_done", "校验和\r\n"},
+ {"firmware_update_sd_checksum_done", "校验和\n"},
{"firmware_update_sd_checksum_fmt", "#F5870A 展示校验和 (%d%%)#"},
{"firmware_update_sd_checksum_notice", "这是一个可选的功能,可以进一步提高安全性.将以下校验和在官方网站上的下载软件包的校验和签到,请确保它们保持一致."},
{"firmware_update_sd_copying_desc", "升级过程中,请勿移除 microSD 卡."},
@@ -6296,7 +6320,7 @@ const static lv_i18n_phrase_t zh_cn_singulars[] = {
{"purpose_title", "新建钱包"},
{"receive_ada_enterprise_address", "地址(未委派)"},
{"receive_ada_more_t_desc1", "在 Cardano 区块链上,我们提供了 24 个 ADA 帐户,每个帐户都可以生成无数新地址.您可以在所需帐户之间轻松切换."},
- {"receive_ada_more_t_desc2", "1. Payment & Stake Keys:在Cardano中,每个帐户都有一个发送或接收常规ADA交易的付款密钥(Payment Key),以及用于积分和获得奖励的质押密钥(Stake Key).\r\n2. Base Address:基本地址(Base Address)是由付款密钥和股份密钥派生而来.它可以用于常规交易和质押,也被称为\"外部地址(External Addresses)\".\r\n3. Enterprise Address:此地址仅包含付款密钥,仅用于常规交易,而不是用于质押.它是为不涉及既有既定的\"业务\"场景而设计的,例如交流.也称为\"外部地址(未授权)\".\r\n4. Stake & Reward Addresses:质押密钥(Stake Key)用于质押;与之相关的质押地址(Stake Addresses)也被称为奖励地址(Reward Addresses),用于接收质押奖励."},
+ {"receive_ada_more_t_desc2", "1. Payment & Stake Keys:在Cardano中,每个帐户都有一个发送或接收常规ADA交易的付款密钥(Payment Key),以及用于积分和获得奖励的质押密钥(Stake Key).\n2. Base Address:基本地址(Base Address)是由付款密钥和股份密钥派生而来.它可以用于常规交易和质押,也被称为\"外部地址(External Addresses)\".\n3. Enterprise Address:此地址仅包含付款密钥,仅用于常规交易,而不是用于质押.它是为不涉及既有既定的\"业务\"场景而设计的,例如交流.也称为\"外部地址(未授权)\".\n4. Stake & Reward Addresses:质押密钥(Stake Key)用于质押;与之相关的质押地址(Stake Addresses)也被称为奖励地址(Reward Addresses),用于接收质押奖励."},
{"receive_ada_more_t_ledger", "Ledger/BitBox02"},
{"receive_ada_more_t_standard", "Cardano Native"},
{"receive_ada_more_t_title1", "Keystone上的多个 Cardano 帐户"},
@@ -6309,9 +6333,9 @@ const static lv_i18n_phrase_t zh_cn_singulars[] = {
{"receive_btc_extended_public_key", "扩展公钥"},
{"receive_btc_more_address_settings", "地址设置"},
{"receive_btc_more_export_xpub", "导出 XPUB"},
- {"receive_btc_more_t_desc1", "比特币(BTC)的三种地址格式:\r\n1. Native SegWit 是当前主流的地址类型,交易费较低,地址以\" bc1\"开头.\r\n2. Nested SegWit 兼容 \"Legacy\" 和 \"Segwit\" 地址类型,交易费中等,地址以\" 3\"开头.\r\n3. Legacy 属于最初的比特币地址格式,交易费较高,地址以\" 1\"开头."},
- {"receive_btc_more_t_desc2", "是的,三种不同的比特币地址格式可用于彼此转移资金.但是,请务必牢记以下方面:\r\n1.交易费不同:选择不同的地址格式会产生不同的交易费.通常 Native Segwit 的交易费较低.\r\n2.钱包或交易所的兼容性:请确保您使用的钱包或交易所支持您选择的地址格式.某些钱包可能仅支持特定地址格式."},
- {"receive_btc_more_t_desc3", "1.隐私:重复使用同一地址增加了交易可追溯性,容易暴露隐私.每笔交易使用新地址有利于保持您的隐私.\r\n2.交易效率:链接到一个地址的多个UTXO会提高整合成本,从而影响转账速度.\r\n简而言之,不重复使用同一地址有利于保障隐私、优化交易速度."},
+ {"receive_btc_more_t_desc1", "比特币(BTC)的三种地址格式:\n1. Native SegWit 是当前主流的地址类型,交易费较低,地址以\" bc1\"开头.\n2. Nested SegWit 兼容 \"Legacy\" 和 \"Segwit\" 地址类型,交易费中等,地址以\" 3\"开头.\n3. Legacy 属于最初的比特币地址格式,交易费较高,地址以\" 1\"开头."},
+ {"receive_btc_more_t_desc2", "是的,三种不同的比特币地址格式可用于彼此转移资金.但是,请务必牢记以下方面:\n1.交易费不同:选择不同的地址格式会产生不同的交易费.通常 Native Segwit 的交易费较低.\n2.钱包或交易所的兼容性:请确保您使用的钱包或交易所支持您选择的地址格式.某些钱包可能仅支持特定地址格式."},
+ {"receive_btc_more_t_desc3", "1.隐私:重复使用同一地址增加了交易可追溯性,容易暴露隐私.每笔交易使用新地址有利于保持您的隐私.\n2.交易效率:链接到一个地址的多个UTXO会提高整合成本,从而影响转账速度.\n简而言之,不重复使用同一地址有利于保障隐私、优化交易速度."},
{"receive_btc_more_t_title1", "BTC 的三种不同地址格式是什么?"},
{"receive_btc_more_t_title2", "这三种不同的地址格式可以相互接受资产吗?"},
{"receive_btc_more_t_title3", "不重复使用同一地址的好处"},
@@ -6328,21 +6352,21 @@ const static lv_i18n_phrase_t zh_cn_singulars[] = {
{"receive_eth_more_derivation_path_ledger_legacy", "Ledger Legacy"},
{"receive_eth_more_derivation_path_ledger_live", "Ledger Live"},
{"receive_eth_more_derivation_path_title2", "例如:"},
- {"receive_eth_more_t_desc1", "1.标准路径:此路径被许多软件钱包广泛用于地址生成,比如 Metamask,Rabby,Bitkeep和Core Wallet.\r\n2. Ledger Live:如果您曾在Ledger Live下管理您的资产,请选择此派生路径.请注意,Keystone 仅支持此路径下的前10个地址.\r\n3. Ledger Legacy:如果您曾在Ledger Legacy下管理您的资产,请选择此派生路径."},
+ {"receive_eth_more_t_desc1", "1.标准路径:此路径被许多软件钱包广泛用于地址生成,比如 Metamask,Rabby,Bitkeep和Core Wallet.\n2. Ledger Live:如果您曾在Ledger Live下管理您的资产,请选择此派生路径.请注意,Keystone 仅支持此路径下的前10个地址.\n3. Ledger Legacy:如果您曾在Ledger Legacy下管理您的资产,请选择此派生路径."},
{"receive_eth_more_t_title1", "了解以太坊中的标准路径、Ledger Live和Ledger Legacy的派生路径"},
{"receive_eth_receive_main_title", "接收 ETH"},
{"receive_generate_new_address", "生成新地址"},
- {"receive_ltc_more_t_desc1", "1.Nested SegWit:一种过渡格式,将 SegWit 嵌套在 P2SH 中。它比 Legacy 更高效,并因广泛的兼容性而成为最常用的格式。\r\n2.Native SegWit:完全原生的 SegWit 格式,手续费更低,交易体积更小。越来越受欢迎,并得到大多数主流钱包和交易所的支持。"},
+ {"receive_ltc_more_t_desc1", "1.Nested SegWit:一种过渡格式,将 SegWit 嵌套在 P2SH 中。它比 Legacy 更高效,并因广泛的兼容性而成为最常用的格式。\n2.Native SegWit:完全原生的 SegWit 格式,手续费更低,交易体积更小。越来越受欢迎,并得到大多数主流钱包和交易所的支持。"},
{"receive_ltc_more_t_title1", "了解区别:LTC 中的 Nested SegWit 与 Native SegWit 派生路径"},
{"receive_more_t_qr_link", "https://keyst.one/t/3rd/faq"},
{"receive_sol_more_t_base_path", "基于帐户的路径"},
- {"receive_sol_more_t_desc1", "1. Account-based 路径:被许多 Solana 钱包采用,比如 Solflare.\r\n2. Single Account 路径:如果您将 Sollet 或者 MathWallet钱包的助记词导入到 Keystone,则选择此路径.请注意,Keystone 仅支持此路径下的前10个地址.\r\n3. Sub-account 路径:如果您将 Phantom 或者 Exodus 钱包的助记词导入到 Keystone,则选择此路径."},
+ {"receive_sol_more_t_desc1", "1. Account-based 路径:被许多 Solana 钱包采用,比如 Solflare.\n2. Single Account 路径:如果您将 Sollet 或者 MathWallet钱包的助记词导入到 Keystone,则选择此路径.请注意,Keystone 仅支持此路径下的前10个地址.\n3. Sub-account 路径:如果您将 Phantom 或者 Exodus 钱包的助记词导入到 Keystone,则选择此路径."},
{"receive_sol_more_t_single_path", "单账户路径"},
{"receive_sol_more_t_sub_path", "子账户路径"},
{"receive_sol_more_t_title1", "了解 Solana 的各派生路径"},
{"receive_ton_hint", "Keystone 默认地址格式为 V4R2。如果它们与 Tonkeeper 不匹配,请在 Tonkeeper 中检查并切换。此地址仅用于 TON 交易。将其他类型的数字资产发送到此地址将导致其丢失。"},
{"receive_trx_hint", "此地址仅适用于 TRX,TRC-20 和 TRC-10 代币,将其他数字货币发送到该地址将会造成丢失."},
- {"receive_xmr_more_t_desc1", "1.主账户是您的主要门罗币账户,持有您的主要余额,并能直接接收资金。\r\n2.子地址是与您的主账户关联的次要地址,设计用于私密接收支付。每个子地址将交易保持独立,隐藏您的主账户余额。\r\n3.使用主账户用于较大或长期资金。当您想要接收支付而不显示您的主要余额或账户详情时,使用子地址。"},
+ {"receive_xmr_more_t_desc1", "1.主账户是您的主要门罗币账户,持有您的主要余额,并能直接接收资金。\n2.子地址是与您的主账户关联的次要地址,设计用于私密接收支付。每个子地址将交易保持独立,隐藏您的主账户余额。\n3.使用主账户用于较大或长期资金。当您想要接收支付而不显示您的主要余额或账户详情时,使用子地址。"},
{"receive_xmr_more_t_title1", "了解差异:主账户与子地址"},
{"recovery_mode_switch_desc", "启用此功能后,您可以进入恢复模式,仅在需要恢复系统时继续。"},
{"recovery_mode_switch_text_title", "恢复模式"},
@@ -6694,8 +6718,8 @@ void __lv_i18n_reset(void)
*/
int lv_i18n_init(const lv_i18n_language_pack_t * langs)
{
- if (langs == NULL) return -1;
- if (langs[0] == NULL) return -1;
+ if(langs == NULL) return -1;
+ if(langs[0] == NULL) return -1;
current_lang_pack = langs;
current_lang = langs[0]; /*Automatically select the first language*/
@@ -6708,13 +6732,13 @@ int lv_i18n_init(const lv_i18n_language_pack_t * langs)
*/
int lv_i18n_set_locale(const char * l_name)
{
- if (current_lang_pack == NULL) return -1;
+ if(current_lang_pack == NULL) return -1;
uint16_t i;
- for (i = 0; current_lang_pack[i] != NULL; i++) {
+ for(i = 0; current_lang_pack[i] != NULL; i++) {
// Found -> finish
- if (strcmp(current_lang_pack[i]->locale_name, l_name) == 0) {
+ if(strcmp(current_lang_pack[i]->locale_name, l_name) == 0) {
current_lang = current_lang_pack[i];
return 0;
}
@@ -6727,10 +6751,10 @@ int lv_i18n_set_locale(const char * l_name)
static const char * __lv_i18n_get_text_core(lv_i18n_phrase_t * trans, const char * msg_id)
{
uint16_t i;
- for (i = 0; trans[i].msg_id != NULL; i++) {
- if (strcmp(trans[i].msg_id, msg_id) == 0) {
+ for(i = 0; trans[i].msg_id != NULL; i++) {
+ if(strcmp(trans[i].msg_id, msg_id) == 0) {
/*The msg_id has found. Check the translation*/
- if (trans[i].translation) return trans[i].translation;
+ if(trans[i].translation) return trans[i].translation;
}
}
@@ -6745,23 +6769,23 @@ static const char * __lv_i18n_get_text_core(lv_i18n_phrase_t * trans, const char
*/
const char * lv_i18n_get_text(const char * msg_id)
{
- if (current_lang == NULL) return msg_id;
+ if(current_lang == NULL) return msg_id;
const lv_i18n_lang_t * lang = current_lang;
const void * txt;
// Search in current locale
- if (lang->singulars != NULL) {
+ if(lang->singulars != NULL) {
txt = __lv_i18n_get_text_core(lang->singulars, msg_id);
if (txt != NULL) return txt;
}
// Try to fallback
- if (lang == current_lang_pack[0]) return msg_id;
+ if(lang == current_lang_pack[0]) return msg_id;
lang = current_lang_pack[0];
// Repeat search for default locale
- if (lang->singulars != NULL) {
+ if(lang->singulars != NULL) {
txt = __lv_i18n_get_text_core(lang->singulars, msg_id);
if (txt != NULL) return txt;
}
@@ -6777,31 +6801,31 @@ const char * lv_i18n_get_text(const char * msg_id)
*/
const char * lv_i18n_get_text_plural(const char * msg_id, int32_t num)
{
- if (current_lang == NULL) return msg_id;
+ if(current_lang == NULL) return msg_id;
const lv_i18n_lang_t * lang = current_lang;
const void * txt;
lv_i18n_plural_type_t ptype;
// Search in current locale
- if (lang->locale_plural_fn != NULL) {
+ if(lang->locale_plural_fn != NULL) {
ptype = lang->locale_plural_fn(num);
- if (lang->plurals[ptype] != NULL) {
+ if(lang->plurals[ptype] != NULL) {
txt = __lv_i18n_get_text_core(lang->plurals[ptype], msg_id);
if (txt != NULL) return txt;
}
}
// Try to fallback
- if (lang == current_lang_pack[0]) return msg_id;
+ if(lang == current_lang_pack[0]) return msg_id;
lang = current_lang_pack[0];
// Repeat search for default locale
- if (lang->locale_plural_fn != NULL) {
+ if(lang->locale_plural_fn != NULL) {
ptype = lang->locale_plural_fn(num);
- if (lang->plurals[ptype] != NULL) {
+ if(lang->plurals[ptype] != NULL) {
txt = __lv_i18n_get_text_core(lang->plurals[ptype], msg_id);
if (txt != NULL) return txt;
}
@@ -6816,6 +6840,6 @@ const char * lv_i18n_get_text_plural(const char * msg_id, int32_t num)
*/
const char * lv_i18n_get_current_locale(void)
{
- if (!current_lang) return NULL;
+ if(!current_lang) return NULL;
return current_lang->locale_name;
}
Why this scored 35/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.