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 = "";
+ test("ja", "ClearSpeak", expr, "x は 大なり 5")?;
+ return Ok(());
+}
+
+/// ≠ is ノット・イコール, the partner of the イコール already used for =.
+#[test]
+fn not_equal() -> Result<()> {
+ let expr = "";
+ 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!("");
+ 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!(
+ ""
+ );
+ 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 = "";
+ 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 = "";
- 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!("");
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!(
""