diff --git a/Rules/Languages/ja/definitions.yaml b/Rules/Languages/ja/definitions.yaml index c92c2a31..b5e9b8f9 100644 --- a/Rules/Languages/ja/definitions.yaml +++ b/Rules/Languages/ja/definitions.yaml @@ -280,29 +280,29 @@ "dot-product": "infix=内積", "downwards-diagonal-ellipsis": "infix=下向き対角の省略記号", "direct-product": "infix=直積", - "element-of": "infix=の要素", + "element-of": "infix=要素オブ", "ellipsis": "infix=省略記号", "equals": "infix=イコール", "equivalent-to": "infix=と同等の", "evaluates-to": "infix=評価する", "given": "infix=与えられた", - "greater-than": "infix=より大きい", - "greater-than-or-equal-to": "infix=より大きいか等しい", + "greater-than": "infix=大なり", + "greater-than-or-equal-to": "infix=大なり オア イコール", "identically-equals": "infix=恒等的に等しい", "if-and-only-if": "infix=同値", "implies": "infix=ならば", "inner-product": "infix=内積", "intersection": "infix=共通部分", - "less-than": "infix=より小さい", - "less-than-or-equal-to": "infix=以下", + "less-than": "infix=小なり", + "less-than-or-equal-to": "infix=小なり オア イコール", "list-separator": "infix=コンマ", "maps-to": "infix=に写る", - "member-of": "infix=に属する", + "member-of": "infix=元", "minus-or-plus": "infix=マイナスまたはプラス", "not-subset": "infix=部分集合でない", "not-superset": "infix=上位集合でない", - "not-equal-to": "infix=等しくない", - "not-member-of": "infix=に属さない", + "not-equal-to": "infix=ノット イコール", + "not-member-of": "infix=元でない", "not-parallel-to": "infix=平行でない", "obtained-from": "infix=から得られる", "or": "infix=または", diff --git a/Rules/Languages/ja/unicode.yaml b/Rules/Languages/ja/unicode.yaml index 88b08f23..882434aa 100644 --- a/Rules/Languages/ja/unicode.yaml +++ b/Rules/Languages/ja/unicode.yaml @@ -138,7 +138,7 @@ - test: if: "$Verbosity!='Terse'" then: [t: "は"] - - t: "小なり" + - T: "小なり" - "=": # 0x3d - test: if: "$Verbosity!='Terse'" @@ -149,7 +149,7 @@ - test: if: "$Verbosity!='Terse'" then: [t: "は"] - - t: "より大きい" + - T: "大なり" - "?": [t: "疑問符"] # 0x3f - "@": [t: "アットマーク"] # 0x40 - "[": # 0x5b @@ -345,23 +345,23 @@ - test: if: "$Verbosity!='Terse' and not(ancestor::*[self::m:set])" # "the set x is an element of ..." sounds bad" then: [t: "は"] - - t: "属する" + - T: "要素オブ" # Several options for speaking elements in ClearSpeak -- they split between being inside a set or not and then the option else_test: if: "../../self::m:set or ../../../self::m:set" # inside a set then_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "中へ"] + then: [T: "イン"] - else_if: $ClearSpeak_SetMemberSymbol = 'Member' then: [t: "元"] - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "要素の"] + then: [T: "要素オブ"] - else: [t: "に属する"] # $ClearSpeak_SetMemberSymbol = 'Belongs' else_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' then: [t: "元"] - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "要素"] + then: [t: "要素オブ"] - else_if: $ClearSpeak_SetMemberSymbol = 'In' then: [t: "に含まれる"] - else: [t: "属する"] # $ClearSpeak_SetMemberSymbol = 'Belongs' @@ -383,12 +383,12 @@ - test: if: "$Verbosity!='Terse'" then: [t: "は"] - - t: "より小さいか等しい" + - T: "小なり オア イコール" - "≥": # 0x2265 - test: if: "$Verbosity!='Terse'" then: [t: "は"] - - t: "より大きいか等しい" + - T: "大なり オア イコール" # --- restored complex short definitions (prefer over unicode-full) --- - "…": # 0x2026 @@ -448,23 +448,23 @@ - test: if: "$Verbosity!='Terse' and not(ancestor::*[self::m:set])" # "the set x is an element of ..." sounds bad" then: [t: "は"] - - t: "要素の" + - T: "要素オブ" # Several options for speaking elements in ClearSpeak -- they split between being inside a set or not and then the option else_test: if: "../../self::m:set or ../../../self::m:set" # inside a set then_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "中へ"] + then: [T: "イン"] - else_if: $ClearSpeak_SetMemberSymbol = 'Member' then: [t: "元"] - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "要素の"] + then: [T: "要素オブ"] - else: [t: "に属する"] # $ClearSpeak_SetMemberSymbol = 'Belongs' else_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' then: [t: "元"] - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "要素"] + then: [t: "要素オブ"] - else_if: $ClearSpeak_SetMemberSymbol = 'In' then: [t: "に含まれる"] - else: [t: "属する"] # $ClearSpeak_SetMemberSymbol = 'Belongs' @@ -487,12 +487,12 @@ - test: if: "$Verbosity!='Terse'" then: [t: "は"] - - t: "最も肯定的な" + - T: "最も正の" - "≠": # 0x2260 - test: if: "$Verbosity!='Terse'" then: [t: "は"] - - t: "等しくない" + - T: "ノット イコール" - "≡": # 0x2261 - test: if: "$Verbosity!='Terse'" diff --git a/tests/Languages/ja/ja.rs b/tests/Languages/ja/ja.rs index 3fe944e2..53d13d47 100644 --- a/tests/Languages/ja/ja.rs +++ b/tests/Languages/ja/ja.rs @@ -261,6 +261,62 @@ fn less_than() -> Result<()> { return Ok(()); } +/// 小なり / 大なり are the pair the source gives for < and >. より大きい stranded the +/// より, which needs its comparand in front of it, so "x は より大きい 5" read as +/// "x is a bigger 5"; and it did not match the 小なり already used for <. +#[test] +fn greater_than() -> Result<()> { + let expr = "x>5"; + test("ja", "ClearSpeak", expr, "x は 大なり 5")?; + return Ok(()); +} + +/// ≠ is ノット・イコール, the partner of the イコール already used for =. +#[test] +fn not_equal() -> Result<()> { + let expr = "x5"; + test("ja", "ClearSpeak", expr, "x は ノット イコール 5")?; + return Ok(()); +} + +/// ∈ is 要素オブ. 要素の attaches backwards -- 要素の A is "A of an element" -- and +/// the rules for ∈ and ∊ did not even agree with each other. +#[test] +fn element_of() -> Result<()> { + for ch in ["∈", "∊"] { + let expr = format!("x{ch}A"); + test("ja", "SimpleSpeak", &expr, "x は 要素オブ, 大文字 エー")?; + test_ClearSpeak("ja", "ClearSpeak_SetMemberSymbol", "Element", &expr, + "x 要素オブ 大文字 エー")?; + } + return Ok(()); +} + +/// Inside a set the ClearSpeak options take a different branch of the same rule. +/// 中へ is "into", a direction of motion, not membership. The shape is the one +/// en/ClearSpeak/sets.rs uses for set-builder notation. +#[test] +fn set_builder_member_symbol() -> Result<()> { + for ch in ["∈", "∊"] { + let expr = format!( + "{{x{ch}: x>5}}" + ); + test_ClearSpeak("ja", "ClearSpeak_SetMemberSymbol", "In", &expr, + "集合 すべて x イン 整数 そのようなこと x は 大なり 5")?; + test_ClearSpeak("ja", "ClearSpeak_SetMemberSymbol", "Element", &expr, + "集合 すべて x 要素オブ 整数 そのようなこと x は 大なり 5")?; + } + return Ok(()); +} + +/// ∾ is "most positive" in the numeric sense; 最も肯定的な is "most affirmative". +#[test] +fn most_positive() -> Result<()> { + let expr = "xy"; + test("ja", "ClearSpeak", expr, "x は 最も正の y")?; + return Ok(()); +} + /// A hat over a variable is ハット. 帽子 is the thing you wear, and it was said /// twice. #[test] @@ -423,7 +479,7 @@ fn greek_letters() -> Result<()> { #[test] fn set_membership() -> Result<()> { let expr = "xR"; - test("ja", "SimpleSpeak", expr, "x は 属する 実数")?; + test("ja", "SimpleSpeak", expr, "x は 要素オブ 実数")?; return Ok(()); } @@ -490,12 +546,13 @@ fn parallel_and_perpendicular() -> Result<()> { } /// ≤ said より少しまたは等しい ("a little more, or equal") and ≥ ended in the -/// particle へ. +/// particle へ. They then said より小さいか等しい / より大きいか等しい, which strand the +/// より the same way > did; the source gives 小なり・オア・イコール. #[test] fn comparison_with_equality() -> Result<()> { for (op, expected) in [ - ("≤", "x は より小さいか等しい 5"), - ("≥", "x は より大きいか等しい 5"), + ("≤", "x は 小なり オア イコール 5"), + ("≥", "x は 大なり オア イコール 5"), ] { let expr = format!("x{op}5"); test("ja", "ClearSpeak", &expr, expected)?; @@ -592,11 +649,11 @@ fn matrix_terminology() -> Result<()> { #[test] fn number_set_names() -> Result<()> { for (letter, expected) in [ - ("C", "x は 属する 複素数"), - ("N", "x は 属する 自然数"), - ("Q", "x は 属する 有理数"), - ("R", "x は 属する 実数"), - ("Z", "x は 属する 整数"), + ("C", "x は 要素オブ 複素数"), + ("N", "x は 要素オブ 自然数"), + ("Q", "x は 要素オブ 有理数"), + ("R", "x は 要素オブ 実数"), + ("Z", "x は 要素オブ 整数"), ] { let expr = format!( "x{letter}"