diff --git a/icu4c/source/test/letest/cletest.c b/icu4c/source/test/letest/cletest.c
index 3839d1e..fc86588 100644
--- a/icu4c/source/test/letest/cletest.c
+++ b/icu4c/source/test/letest/cletest.c
@@ -125,45 +125,45 @@
     DELETE_ARRAY(glyphs);
 
     status = LE_NO_ERROR;
-    glyphCount = le_layoutChars(engine, NULL, 0, 0, 0, FALSE, 0.0, 0.0, &status);
+    glyphCount = le_layoutChars(engine, NULL, 0, 0, 0, false, 0.0, 0.0, &status);
 
     if (status != LE_ILLEGAL_ARGUMENT_ERROR) {
-        log_err("Calling layoutChars(NULL, 0, 0, 0, FALSE, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
+        log_err("Calling layoutChars(NULL, 0, 0, 0, false, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
     }
 
     status = LE_NO_ERROR;
-    glyphCount = le_layoutChars(engine, chars, -1, 6, 20, TRUE, 0.0, 0.0, &status);
+    glyphCount = le_layoutChars(engine, chars, -1, 6, 20, true, 0.0, 0.0, &status);
 
     if (status != LE_ILLEGAL_ARGUMENT_ERROR) {
-        log_err("Calling layoutChars(chars, -1, 6, 20, TRUE, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
+        log_err("Calling layoutChars(chars, -1, 6, 20, true, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
     }
 
     status = LE_NO_ERROR;
-    glyphCount = le_layoutChars(engine, chars, 8, -1, 20, TRUE, 0.0, 0.0, &status);
+    glyphCount = le_layoutChars(engine, chars, 8, -1, 20, true, 0.0, 0.0, &status);
 
     if (status != LE_ILLEGAL_ARGUMENT_ERROR) {
-        log_err("Calling layoutChars(chars, 8, -1, 20, TRUE, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
+        log_err("Calling layoutChars(chars, 8, -1, 20, true, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
     }
 
     status = LE_NO_ERROR;
-    glyphCount = le_layoutChars(engine, chars, 8, 6, -1, TRUE, 0.0, 0.0, &status);
+    glyphCount = le_layoutChars(engine, chars, 8, 6, -1, true, 0.0, 0.0, &status);
 
     if (status != LE_ILLEGAL_ARGUMENT_ERROR) {
-        log_err("Calling layoutChars((chars, 8, 6, -1, TRUE, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
+        log_err("Calling layoutChars((chars, 8, 6, -1, true, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
     }
 
     status = LE_NO_ERROR;
-    glyphCount = le_layoutChars(engine, chars, 8, 6, 10, TRUE, 0.0, 0.0, &status);
+    glyphCount = le_layoutChars(engine, chars, 8, 6, 10, true, 0.0, 0.0, &status);
 
     if (status != LE_ILLEGAL_ARGUMENT_ERROR) {
-        log_err("Calling layoutChars(chars, 8, 6, 10, TRUE, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
+        log_err("Calling layoutChars(chars, 8, 6, 10, true, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
     }
 
     status = LE_NO_ERROR;
-    glyphCount = le_layoutChars(engine, chars, 8, 6, 20, TRUE, 0.0, 0.0, &status);
+    glyphCount = le_layoutChars(engine, chars, 8, 6, 20, true, 0.0, 0.0, &status);
 
     if (LE_FAILURE(status)) {
-        log_err("Calling layoutChars(chars, 8, 6, 20, TRUE, 0.0, 0.0, status) failed.\n");
+        log_err("Calling layoutChars(chars, 8, 6, 20, true, 0.0, 0.0, status) failed.\n");
         goto bail;
     }
 
@@ -230,10 +230,10 @@
         goto bail;
     }
 
-    glyphCount = le_layoutChars(engine, chars, 8, 6, 20, TRUE, 0.0, 0.0, &status);
+    glyphCount = le_layoutChars(engine, chars, 8, 6, 20, true, 0.0, 0.0, &status);
 
     if (LE_FAILURE(status) || glyphCount != 6) {
-        log_err("layoutChars(chars, 8, 6, 20, TRUE, 0.0, 0.0, status) failed.\n");
+        log_err("layoutChars(chars, 8, 6, 20, true, 0.0, 0.0, status) failed.\n");
         goto bail;
     }
 
@@ -293,14 +293,14 @@
     if (actual->glyphCount != expected->glyphCount) {
         log_err("Test %s: incorrect glyph count: exptected %d, got %d\n",
             testID, expected->glyphCount, actual->glyphCount);
-        return FALSE;
+        return false;
     }
 
     for (i = 0; i < actual->glyphCount; i += 1) {
         if (actual->glyphs[i] != expected->glyphs[i]) {
             log_err("Test %s: incorrect id for glyph %d: expected %4X, got %4X\n",
                 testID, i, expected->glyphs[i], actual->glyphs[i]);
-            return FALSE;
+            return false;
         }
     }
 
@@ -308,7 +308,7 @@
         if (actual->indices[i] != expected->indices[i]) {
             log_err("Test %s: incorrect index for glyph %d: expected %8X, got %8X\n",
                 testID, i, expected->indices[i], actual->indices[i]);
-            return FALSE;
+            return false;
         }
     }
 
@@ -319,7 +319,7 @@
         if (xError > 0.0001) {
             log_err("Test %s: incorrect x position for glyph %d: expected %f, got %f\n",
                 testID, i, expected->positions[i * 2], actual->positions[i * 2]);
-            return FALSE;
+            return false;
         }
 
         if (yError < 0) {
@@ -329,11 +329,11 @@
         if (yError > 0.0001) {
             log_err("Test %s: incorrect y position for glyph %d: expected %f, got %f\n",
                 testID, i, expected->positions[i * 2 + 1], actual->positions[i * 2 + 1]);
-            return FALSE;
+            return false;
         }
     }
 
-    return TRUE;
+    return true;
 }
 
 static void checkFontVersion(le_font *font, const char *testVersionString,
@@ -652,7 +652,7 @@
     fontRuns = pl_openEmptyFontRuns(0);
     pl_addFontRun(fontRuns, font, charCount);
 
-    paragraph = pl_create(chars, charCount, fontRuns, NULL, NULL, NULL, 0, FALSE, &status);
+    paragraph = pl_create(chars, charCount, fontRuns, NULL, NULL, NULL, 0, false, &status);
 
     pl_closeFontRuns(fontRuns);
 
diff --git a/icu4c/source/test/letest/cletest.sln b/icu4c/source/test/letest/cletest.sln
index 323eb6d..2054f4b 100644
--- a/icu4c/source/test/letest/cletest.sln
+++ b/icu4c/source/test/letest/cletest.sln
@@ -21,6 +21,6 @@
 		{798E3AE4-A984-43FF-8928-EACFF43F56AE}.Release|x64.Build.0 = Release|x64
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
+		HideSolutionNode = false
 	EndGlobalSection
 EndGlobal
diff --git a/icu4c/source/test/letest/gendata.cpp b/icu4c/source/test/letest/gendata.cpp
index a9c5da5..0f4cf1a 100644
--- a/icu4c/source/test/letest/gendata.cpp
+++ b/icu4c/source/test/letest/gendata.cpp
@@ -283,7 +283,7 @@
                 } else if (tag.compare(test_text) == 0) {
                     char *utf8 = NULL;
 
-                    text = element->getText(TRUE);
+                    text = element->getText(true);
                     charCount = text.length();
 
                     utf8 = getUTF8String(&text);
diff --git a/icu4c/source/test/letest/gendata.sln b/icu4c/source/test/letest/gendata.sln
index 18c4f22..23bf47e 100644
--- a/icu4c/source/test/letest/gendata.sln
+++ b/icu4c/source/test/letest/gendata.sln
@@ -20,6 +20,6 @@
 		{DA322426-C37C-4909-A99D-16B05E7FA498}.Release|x64.Build.0 = Release|x64
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
+		HideSolutionNode = false
 	EndGlobalSection
 EndGlobal
diff --git a/icu4c/source/test/letest/letest.cpp b/icu4c/source/test/letest/letest.cpp
index 35c326f..ff15c93 100644
--- a/icu4c/source/test/letest/letest.cpp
+++ b/icu4c/source/test/letest/letest.cpp
@@ -146,10 +146,10 @@
     DELETE_ARRAY(glyphs);
 
     status = LE_NO_ERROR;
-    glyphCount = engine->layoutChars(NULL, 0, 0, 0, FALSE, 0.0, 0.0, status);
+    glyphCount = engine->layoutChars(NULL, 0, 0, 0, false, 0.0, 0.0, status);
 
     if (status != LE_ILLEGAL_ARGUMENT_ERROR) {
-        log_err("Calling layoutChars(NULL, 0, 0, 0, FALSE, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
+        log_err("Calling layoutChars(NULL, 0, 0, 0, false, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
     }
 
     LEUnicode chars[] = {
@@ -159,40 +159,40 @@
     };
 
     status = LE_NO_ERROR;
-    glyphCount = engine->layoutChars(chars, -1, 6, 20, TRUE, 0.0, 0.0, status);
+    glyphCount = engine->layoutChars(chars, -1, 6, 20, true, 0.0, 0.0, status);
 
     if (status != LE_ILLEGAL_ARGUMENT_ERROR) {
-        log_err("Calling layoutChars(chars, -1, 6, 20, TRUE, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
+        log_err("Calling layoutChars(chars, -1, 6, 20, true, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
     }
 
     status = LE_NO_ERROR;
-    glyphCount = engine->layoutChars(chars, 8, -1, 20, TRUE, 0.0, 0.0, status);
+    glyphCount = engine->layoutChars(chars, 8, -1, 20, true, 0.0, 0.0, status);
 
     if (status != LE_ILLEGAL_ARGUMENT_ERROR) {
-        log_err("Calling layoutChars(chars, 8, -1, 20, TRUE, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
+        log_err("Calling layoutChars(chars, 8, -1, 20, true, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
     }
 
     status = LE_NO_ERROR;
-    glyphCount = engine->layoutChars(chars, 8, 6, -1, TRUE, 0.0, 0.0, status);
+    glyphCount = engine->layoutChars(chars, 8, 6, -1, true, 0.0, 0.0, status);
 
     if (status != LE_ILLEGAL_ARGUMENT_ERROR) {
-        log_err("Calling layoutChars((chars, 8, 6, -1, TRUE, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
+        log_err("Calling layoutChars((chars, 8, 6, -1, true, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
     }
 
     status = LE_NO_ERROR;
-    glyphCount = engine->layoutChars(chars, 8, 6, 10, TRUE, 0.0, 0.0, status);
+    glyphCount = engine->layoutChars(chars, 8, 6, 10, true, 0.0, 0.0, status);
 
     if (status != LE_ILLEGAL_ARGUMENT_ERROR) {
-        log_err("Calling layoutChars(chars, 8, 6, 10, TRUE, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
+        log_err("Calling layoutChars(chars, 8, 6, 10, true, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
     }
 
     float x = 0.0, y = 0.0;
 
     status = LE_NO_ERROR;
-    glyphCount = engine->layoutChars(chars, 8, 6, 20, TRUE, 0.0, 0.0, status);
+    glyphCount = engine->layoutChars(chars, 8, 6, 20, true, 0.0, 0.0, status);
 
     if (LE_FAILURE(status)) {
-        log_err("Calling layoutChars(chars, 8, 6, 20, TRUE, 0.0, 0.0, status) failed.\n");
+        log_err("Calling layoutChars(chars, 8, 6, 20, true, 0.0, 0.0, status) failed.\n");
         goto bail;
     }
 
@@ -258,10 +258,10 @@
         goto bail;
     }
 
-    glyphCount = engine->layoutChars(chars, 8, 6, 20, TRUE, 0.0, 0.0, status);
+    glyphCount = engine->layoutChars(chars, 8, 6, 20, true, 0.0, 0.0, status);
 
     if (LE_FAILURE(status) || glyphCount != 6) {
-        log_err("layoutChars(chars, 8, 6, 20, TRUE, 0.0, 0.0, status) failed.\n");
+        log_err("layoutChars(chars, 8, 6, 20, true, 0.0, 0.0, status) failed.\n");
         goto bail;
     }
 
@@ -333,7 +333,7 @@
     if (actual->glyphCount != expected->glyphCount) {
         log_err("Test %s: incorrect glyph count: exptected %d, got %d\n",
             testID, expected->glyphCount, actual->glyphCount);
-        return FALSE;
+        return false;
     }
 
     le_int32 i;
@@ -342,7 +342,7 @@
         if (actual->glyphs[i] != expected->glyphs[i]) {
             log_err("Test %s: incorrect id for glyph %d: expected %4X, got %4X\n",
                 testID, i, expected->glyphs[i], actual->glyphs[i]);
-            return FALSE;
+            return false;
         }
     }
 
@@ -350,7 +350,7 @@
         if (actual->indices[i] != expected->indices[i]) {
             log_err("Test %s: incorrect index for glyph %d: expected %8X, got %8X\n",
                 testID, i, expected->indices[i], actual->indices[i]);
-            return FALSE;
+            return false;
         }
     }
 
@@ -360,7 +360,7 @@
         if (xError > 0.0001) {
             log_err("Test %s: incorrect x position for glyph %d: expected %f, got %f\n",
                 testID, i, expected->positions[i * 2], actual->positions[i * 2]);
-            return FALSE;
+            return false;
         }
 
         double yError = uprv_fabs(actual->positions[i * 2 + 1] - expected->positions[i * 2 + 1]);
@@ -372,11 +372,11 @@
         if (yError > 0.0001) {
             log_err("Test %s: incorrect y position for glyph %d: expected %f, got %f\n",
                 testID, i, expected->positions[i * 2 + 1], actual->positions[i * 2 + 1]);
-            return FALSE;
+            return false;
         }
     }
 
-    return TRUE;
+    return true;
 }
 
 static void checkFontVersion(PortableFontInstance *fontInstance, const char *testVersionString,
@@ -652,14 +652,14 @@
                         goto free_c_strings;
                     }
                 } else if (tag.compare(test_text) == 0) {
-                    text = element->getText(TRUE);
+                    text = element->getText(true);
                     charCount = text.length();
                 } else if (tag.compare(result_glyphs) == 0) {
-                    glyphs = element->getText(TRUE);
+                    glyphs = element->getText(true);
                 } else if (tag.compare(result_indices) == 0) {
-                    indices = element->getText(TRUE);
+                    indices = element->getText(true);
                 } else if (tag.compare(result_positions) == 0) {
-                    positions = element->getText(TRUE);
+                    positions = element->getText(true);
                 } else {
                     // an unknown tag...
                     char *cTag = getCString(&tag);
@@ -885,7 +885,7 @@
 
     fontRuns.add(font, charCount);
 
-    paragraphLayout = new ParagraphLayout(chars, charCount, &fontRuns, NULL, NULL, NULL, 0, FALSE, status);
+    paragraphLayout = new ParagraphLayout(chars, charCount, &fontRuns, NULL, NULL, NULL, 0, false, status);
 
     if (LE_FAILURE(status)) {
         goto close_font;
diff --git a/icu4c/source/test/letest/letest.sln b/icu4c/source/test/letest/letest.sln
index 7006671..aebf869 100644
--- a/icu4c/source/test/letest/letest.sln
+++ b/icu4c/source/test/letest/letest.sln
@@ -35,6 +35,6 @@
 		{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|x64.Build.0 = Release|x64
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
+		HideSolutionNode = false
 	EndGlobalSection
 EndGlobal
diff --git a/icu4c/source/test/letest/xmlreader.cpp b/icu4c/source/test/letest/xmlreader.cpp
index a5e0403..eb46979 100644
--- a/icu4c/source/test/letest/xmlreader.cpp
+++ b/icu4c/source/test/letest/xmlreader.cpp
@@ -208,14 +208,14 @@
                     fontCksum = getCString(element->getAttribute(cksum_attr));
 
                 } else if (tag.compare(test_text) == 0) {
-                    text = element->getText(TRUE);
+                    text = element->getText(true);
                     charCount = text.length();
                 } else if (tag.compare(result_glyphs) == 0) {
-                    glyphs = element->getText(TRUE);
+                    glyphs = element->getText(true);
                 } else if (tag.compare(result_indices) == 0) {
-                    indices = element->getText(TRUE);
+                    indices = element->getText(true);
                 } else if (tag.compare(result_positions) == 0) {
-                    positions = element->getText(TRUE);
+                    positions = element->getText(true);
                 } else {
                     // an unknown tag...
                     char *cTag = getCString(&tag);
